diff --git a/.coveragerc b/.coveragerc index 638e19a7d..a4ec3818b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,3 +1,8 @@ [run] branch = True source = pylops +omit = + pylops/basicoperators/_*.py + pylops/signalprocessing/_*.py + pylops/utils/_*.py + pylops/waveeqprocessing/_*.py diff --git a/.github/workflows/build-mkl.yaml b/.github/workflows/build-mkl.yaml index 9aa2b91eb..db5dbc51e 100644 --- a/.github/workflows/build-mkl.yaml +++ b/.github/workflows/build-mkl.yaml @@ -1,26 +1,34 @@ name: PyLops Testing with Intel oneAPI Math Kernel Library(oneMKL) -on: [push, pull_request] +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev jobs: build: strategy: matrix: platform: [ubuntu-latest] - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13"] runs-on: ${{ matrix.platform }} defaults: run: shell: bash -l {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - uses: conda-incubator/setup-miniconda@v3.2.0 + - uses: conda-incubator/setup-miniconda@v4 with: + # Pinned to a specific version, see https://github.com/conda-incubator/setup-miniconda/issues/501 + miniconda-version: "py312_26.1.1-1" use-mamba: true channels: https://software.repos.intel.com/python/conda, conda-forge conda-remove-defaults: true @@ -34,7 +42,6 @@ jobs: pip install -r requirements-torch.txt - name: Install pylops run: | - python -m setuptools_scm pip install . - name: Tests with pytest run: | diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3a9b4adb0..b9c177a54 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,6 +1,12 @@ name: PyLops Testing -on: [push, pull_request] +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev jobs: build: @@ -10,33 +16,17 @@ jobs: python-version: ["3.10", "3.11", "3.12", "3.13"] runs-on: ${{ matrix.platform }} - steps: - - uses: actions/checkout@v4 - - name: Get history and tags for SCM versioning to work - run: | - git fetch --prune --unshallow - git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools - pip install flake8 pytest - if [[ "${{ matrix.platform }}" == ubuntu* ]]; then - pip install -r requirements-dev.txt - pip install -r requirements-pyfftw.txt - else - pip install -r requirements-dev-arm.txt - pip install -r requirements-pyfftw.txt - fi - pip install -r requirements-torch.txt - - name: Install pylops - run: | - python -m setuptools_scm - pip install . - - name: Tests with pytest - run: | - pytest + steps: + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Install uv with Python ${{ matrix.python-version }} + uses: astral-sh/setup-uv@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies and pylops + run: uv sync --locked --extra advanced --extra stat --extra deep --all-groups + - name: Test with pytest + run: uv run pytest --color=yes pytests/ diff --git a/.github/workflows/buildcupy.yaml b/.github/workflows/buildcupy.yaml index 85a2afd71..5574b0f25 100644 --- a/.github/workflows/buildcupy.yaml +++ b/.github/workflows/buildcupy.yaml @@ -1,35 +1,38 @@ name: PyLops Testing (CuPy) -on: [push, pull_request] +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev jobs: build: runs-on: self-hosted steps: - name: Check out source repository - uses: actions/checkout@v4 - - name: Set up Python environment and Install dependencies and pylops + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Install uv with Python 3.11 + uses: astral-sh/setup-uv@v6 + with: + python-version: 3.11 + - name: Install dependencies and pylops run: | - python3 -m venv .venv-pylops - # write install scripts - cat << 'EOF' > pylops_tests.sh - #!/bin/bash - PYTHON=.venv-pylops/bin/python3 - PIP=.venv-pylops/bin/pip - ls $PYTHON - ls $PIP - $PIP install - $PIP install --upgrade pip setuptools - $PIP install install flake8 pytest setuptools-scm - $PIP install -r requirements-dev-gpu.txt - $PIP install cupy-cuda12x - $PYTHON -m setuptools_scm - $PIP install . - EOF - srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash pylops_tests.sh - - name: Tests with pytest + srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' + uv sync --locked --extra advanced \ + --extra stat --extra gpu-cu12 \ + --extra deep-cu128 --all-groups + ' + echo "done!" + - name: Test with pytest run: | - export CUPY_PYLOPS=1; export TEST_CUPY_PYLOPS=1; - export PYTEST=.venv-pylops/bin/pytest - srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 $PYTEST + srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' + export CUPY_PYLOPS=1 + export TEST_CUPY_PYLOPS=1 + uv run pytest --color=yes pytests/ + ' echo "done!" diff --git a/.github/workflows/codacy-coverage-reporter.yaml b/.github/workflows/codacy-coverage-reporter.yaml index f005925df..81ef492b8 100644 --- a/.github/workflows/codacy-coverage-reporter.yaml +++ b/.github/workflows/codacy-coverage-reporter.yaml @@ -2,43 +2,38 @@ # For more information see: https://github.com/codacy/codacy-coverage-reporter-action name: PyLops-coverage -on: [push, pull_request_target] +on: + pull_request: + push: + branches: [dev] jobs: build: - strategy: - matrix: - platform: [ ubuntu-latest, ] - python-version: ["3.11", ] - - runs-on: ${{ matrix.platform }} + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Get history and tags for SCM versioning to work - run: | - git fetch --prune --unshallow - git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - pip install -r requirements-dev.txt - pip install -r requirements-pyfftw.txt - pip install -r requirements-torch.txt - - name: Install pylops - run: | - pip install . - pip install coverage - - name: Code coverage with coverage - run: | - coverage run -m pytest - coverage xml - - name: Run codacy-coverage-reporter - uses: codacy/codacy-coverage-reporter-action@v1 - with: - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - coverage-reports: coverage.xml + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Install uv with Python + uses: astral-sh/setup-uv@v6 + with: + python-version: "3.11" + - name: Install dependencies and pylops + run: uv sync --locked --extra advanced --extra stat --extra deep --all-groups + - name: Coverage with pytest + run: | + uv run coverage run -m pytest + uv run coverage xml + uv run coverage html + - name: Upload HTML coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-html + path: htmlcov/ + - name: Run codacy-coverage-reporter + if: github.event_name == 'push' + uses: codacy/codacy-coverage-reporter-action@v1 + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: coverage.xml diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 25153f10d..48fc5eab3 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -1,28 +1,67 @@ -# This workflow uploads PyLops on PyPI using Twine when a release is created -# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries +# This workflow uploads PyLops on PyPI when a release is created +# For more information see: https://github.com/python-attrs/attrs/blob/main/.github/workflows/pypi-package.yml name: PyLops-deploy on: + push: + tags: ["*"] release: - types: [published] + types: + - published + workflow_dispatch: jobs: - deploy: + build-package: + name: Build & verify package runs-on: ubuntu-latest + + steps: + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Build and inspect package + uses: hynek/build-and-inspect-python-package@v2 + + release-test-pypi: + name: Publish in-dev package to test.pypi.org + if: github.repository_owner == 'PyLops' && github.ref_type == 'tag' + runs-on: ubuntu-latest + needs: build-package + permissions: + contents: read + id-token: write + steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 + - name: Download package + uses: actions/download-artifact@v8 with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build - - name: Build package - run: python -m build - - name: Publish package + name: Packages + path: dist + + - name: Upload package to Test PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + attestations: true + repository-url: https://test.pypi.org/legacy/ + + release-pypi: + name: Publish released package to pypi.org + if: github.repository_owner == 'PyLops' && github.event.action == 'published' + runs-on: ubuntu-latest + needs: build-package + permissions: + contents: read + id-token: write + + steps: + - name: Download package + uses: actions/download-artifact@v8 + with: + name: Packages + path: dist + + - name: Upload package to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} + attestations: true diff --git a/.github/workflows/ruff.yaml b/.github/workflows/ruff.yaml new file mode 100644 index 000000000..7363d0930 --- /dev/null +++ b/.github/workflows/ruff.yaml @@ -0,0 +1,19 @@ +# This workflow runs Ruff on the PR +# For more information see: https://github.com/marketplace/actions/ruff-action +name: PyLops-ruff + +on: [push, pull_request] + +jobs: + ruff-lint: + runs-on: ubuntu-latest + name: Lint + steps: + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Lint with ruff + uses: astral-sh/ruff-action@v3 + with: + src: "./pylops" diff --git a/.gitignore b/.gitignore index c73720a86..bc74f2f46 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ pylops.egg-info/ .eggs/ __pycache__ -# setuptools_scm generated # +# hatchling generated # pylops/version.py # Development # @@ -50,3 +50,6 @@ ASV .asv/ asv.conf.json benchmarks/ + +# Virtual Environments +.venv** diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a4ca2e166..7af58437c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,30 +1,31 @@ exclude: "^docs/" repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v6.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer + - id: mixed-line-ending + - id: check-toml - id: check-yaml + - id: check-added-large-files + - id: check-case-conflict + - id: check-merge-conflict - - repo: https://github.com/psf/black - rev: 22.3.0 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.14.14 hooks: - - id: black - args: # arguments to configure black - - --line-length=88 + - id: ruff-check + args: [ --fix ] + - id: ruff-format - - repo: https://github.com/pycqa/isort - rev: 5.12.0 + - repo: https://github.com/astral-sh/uv-pre-commit + rev: 0.9.28 hooks: - - id: isort - name: isort (python) - args: - [ - "--profile", - "black", - "--skip", - "__init__.py", - "--filter-files", - "--line-length=88", - ] + - id: uv-lock + + - repo: https://github.com/abravalheri/validate-pyproject + rev: "v0.23" + hooks: + - id: validate-pyproject + additional_dependencies: ["validate-pyproject-schema-store[all]"] diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 1b48143b4..7bd228c91 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -5,20 +5,21 @@ # Required version: 2 -# Set the version of Python and other tools you might need -build: - os: ubuntu-24.04 - tools: - python: "3.12" - # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/source/conf.py -# Declare the Python requirements required to build your docs -python: - install: - - requirements: requirements-doc.txt - - requirements: requirements-torch.txt - - method: pip - path: . +# Set the version of environment using UV +build: + os: ubuntu-24.04 + tools: + python: "3.12" + jobs: + pre_create_environment: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + create_environment: + - uv venv "${READTHEDOCS_VIRTUALENV_PATH}" + install: + - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --locked --extra advanced --extra stat --extra deep --all-groups diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..b89d11d8f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,68 @@ +# Agent Guide for PyLops + +## Project structure (high level) +- `pylops/`: core library source code. +- `pytests/`: pytest test suite (discovered via `pytests/*.py`). +- `docs/`: Sphinx documentation sources and build output. +- `examples/`: runnable examples and small scripts. +- `tutorials/`: tutorial notebooks/scripts used in docs. +- `testdata/`: data used by tests/examples. +- `build/`, `pylops.egg-info/`: build artifacts (usually not edited). + +## Common commands (prefer Makefile targets) +- `make tests`: run CPU tests with pytest. +- `make tests_cpu_ongpu`: run CPU tests on GPU systems (disables CuPy usage). +- `make tests_gpu`: run GPU tests (requires CuPy; sets TEST_CUPY_PYLOPS=1). +- `make lint`: run `flake8` on `docs/`, `examples/`, `pylops/`, `pytests/`, `tutorials/`. +- `make typeannot`: run `mypy` on `pylops/`. +- `make doc`: clean docs build artifacts and build HTML docs. +- `make docupdate`: rebuild HTML docs without a clean. +- `make servedoc`: serve docs from `docs/build/html/`. +- `make coverage`: run tests with coverage and build HTML/XML reports. + +## CI (GitHub Actions) +- `build.yaml`: main test matrix on `ubuntu-latest` and `macos-latest` for Python `3.10`–`3.13`. + - Installs dev requirements (CPU vs ARM variants), pyfftw, torch, then runs `pytest`. +- `build-mkl.yaml`: Ubuntu-only tests using Intel oneMKL via conda (Python `3.11`–`3.13`). +- `buildcupy.yaml`: self-hosted GPU job running CuPy tests (`TEST_CUPY_PYLOPS=1`). +- `flake8.yaml`: flake8 linting on `pylops/` with the same ignores/max line length as `setup.cfg`. +- `codacy-coverage-reporter.yaml`: runs tests with coverage and uploads `coverage.xml` to Codacy. +- `deploy.yaml`: builds and publishes the package to PyPI on GitHub release publish. + +## Code style and typing guidelines +- Follow `flake8` rules from `setup.cfg`: + - Max line length is 88. + - Ignored rules: `E203`, `E501`, `W503`, `E402`. + - `__init__.py` allows unused imports (`F401`, `F403`, `F405`). +- Prefer clear, PEP 8–style Python, keeping imports at the top unless there is a strong reason. +- Type checking uses `mypy` with `numpy.typing` plugin enabled. + - `mypy` runs on `pylops/` only via `make typeannot`. + - Several third-party modules are configured with `ignore_missing_imports = True` in `setup.cfg`. +- When changing APIs or adding new modules, add or update tests under `pytests/`. + +## Notes for agents +- Use Makefile targets rather than invoking tools directly where possible. +- Keep changes focused; avoid editing build artifacts or generated docs. + +## Issue-to-PR workflow (feature contributions) +Use `docs/source/contributing.rst` as the source of truth. When taking a GitHub issue through to PR, follow this sequence: +1. Ensure dev environment is set up (per `DevInstall` in the docs). +2. Branch from `dev` for your work: + - `git checkout -b dev` +3. Implement the change and add/update tests in `pytests/`. +4. Run CPU tests: + - `make tests` +5. If a GPU is available, also run: + - `make tests_gpu` +6. Run linting: + - `make lint` +7. Update docs if functionality changes: + - `make docupdate` +8. Commit and push: + - `git add .` + - `git commit -m ""` (Conventional Commits recommended, not required) + - `git push -u origin ` +9. Open a PR and ensure it meets the PR guidelines: + - Include tests for new core routines. + - Update docs when adding functionality. + - Ensure all tests pass. diff --git a/CHANGELOG.md b/CHANGELOG.md index bd675c9fb..91a14ee8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,23 @@ Changelog ========= +# 2.7.0 +* Added cubic spline interpolation operator via + `pylops.signalprocessing.interpspline.InterpCubicSpline` (also interfaceable via + `pylops.signalprocessing.interp.Interp(..., kind="cubic_spline"`) +* Added `pylops.medical.MRI2D` operator +* Added `pylops.basicoperators.SmoothingND` operator +* Added 3d extension to `pylops.utils.signalprocessing.pwd_slope_estimate` +* Fixed unwanted upcasting in `pylops.avo.AVOLinearModelling`, + `pylops.Laplacian`, `pylops.signalprocessing.Bilinear`, + `pylops.signalprocessing.Interp`, `pylops.signalprocessing.NonStationaryFilters2D`, + `pylops.signalprocessing.Seislet`, `pylops.signalprocessing.Sliding1D`, + `pylops.signalprocessing.Sliding2D`, `pylops.signalprocessing.Sliding3D`, + `pylops.basicoperators.Smoothing1D`, `pylops.basicoperators.Smoothing2D`, + and `pylops.waveeqprocessing.Marchenko` +* Improved typing annotations across all operators (and enforced use of + Literal for parameters with multiple options) + # 2.6.0 * Added `pylops.medical` module and `pylops.medical.CT2D` operator * Added `pylops.utils.signalprocessing.pwd_slope_estimate` and diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 58ce812c6..dd690a560 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,10 +6,6 @@ The best way to get in touch with the core developers and maintainers is to join the [PyLops slack channel](https://pylops.slack.com/) as well as open new *Issues* directly from the GitHub repo. -Moreover, take a look at the [Roadmap](https://pylops.readthedocs.io/en/stable/roadmap.html) -page for a list of current ideas for improvements and additions to the PyLops library. - - ## Welcomed contributions ### Bug reports diff --git a/MANIFEST.in b/MANIFEST.in index f76b4ea6b..0b65f4832 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,8 @@ exclude .* -exclude environment.yml requirements.txt Makefile -exclude environment-dev.yml requirements-dev.txt azure-pipelines.yml readthedocs.yml +exclude Makefile +exclude environment* +exclude requirements* +exclude azure-pipelines.yml readthedocs.yml recursive-exclude docs * recursive-exclude examples * recursive-exclude pytests * diff --git a/Makefile b/Makefile index 64940b375..b6b172891 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,13 @@ PIP := $(shell command -v pip3 2> /dev/null || command which pip 2> /dev/null) PYTHON := $(shell command -v python3 2> /dev/null || command which python 2> /dev/null) +UV := $(shell command -v uv 2> /dev/null || command which uv 2> /dev/null) +NOX := $(shell command -v nox 2> /dev/null || command which nox 2> /dev/null) -.PHONY: install dev-install dev-install_intel_mkl dev-install_gpu install_conda dev-install_conda dev-install_conda_intel_mkl dev-install_conda_arm tests tests_cpu_ongpu tests_gpu doc docupdate servedoc lint typeannot coverage +.PHONY: install_conda dev-install_conda dev-install_conda_intel_mkl dev-install_conda_arm dev-install_conda_gpu +.PHONY: dev-install_uv dev-install_uvcu126 dev-install_uvcu128 dev-install_uvcu13 +.PHONY: tests tests_cpu_ongpu tests_gpu tests_uv tests_cpu_ongpu_uv tests_gpu_uv tests_nox +.PHONY: doc doc_uv docupdate docupdate_uv servedoc servedoc_uv lint lint_uv typeannot typeannot_uv +.PHONY: coverage coverage_uv pipcheck: ifndef PIP @@ -15,26 +21,17 @@ ifndef PYTHON endif @echo Using python: $(PYTHON) -install: - make pipcheck - $(PIP) install -r requirements.txt && $(PIP) install . - -dev-install: - make pipcheck - $(PIP) install -r requirements-dev.txt &&\ - $(PIP) install -r requirements-pyfftw.txt &&\ - $(PIP) install -r requirements-torch.txt && $(PIP) install -e . - -dev-install_intel_mkl: - make pipcheck - $(PIP) install -r requirements-intel-mkl.txt &&\ - $(PIP) install -r requirements-dev.txt &&\ - $(PIP) install -r requirements-torch.txt && $(PIP) install -e . +uvcheck: +ifndef UV + $(error "Ensure uv is in your PATH") +endif + @echo Using uv: $(UV) -dev-install_gpu: - make pipcheck - $(PIP) install -r requirements-dev-gpu.txt &&\ - $(PIP) install -e . +noxcheck: +ifndef NOX + $(error "Ensure nox is in your PATH") +endif + @echo Using nox: $(NOX) install_conda: conda env create -f environment.yml && source ${CONDA_PREFIX}/etc/profile.d/conda.sh && conda activate pylops && pip install . @@ -51,36 +48,103 @@ dev-install_conda_arm: dev-install_conda_gpu: conda env create -f environment-dev-gpu.yml && source ${CONDA_PREFIX}/etc/profile.d/conda.sh && conda activate pylops_gpu && pip install -e . +dev-install_uv: + make uvcheck + $(UV) sync --locked --extra advanced --extra stat --extra deep --all-groups + +dev-install_uvcu126: + make uvcheck + $(UV) sync --locked --extra advanced --extra stat --extra gpu-cu12 --extra deep-cu126 --all-groups + +dev-install_uvcu128: + make uvcheck + $(UV) sync --locked --extra advanced --extra stat --extra gpu-cu12 --extra deep-cu128 --all-groups + +dev-install_uvcu13: + make uvcheck + $(UV) sync --locked --extra advanced --extra stat --extra gpu-cu13 --extra deep-cu13 --all-groups + tests: # Run tests with CPU make pythoncheck pytest +tests_uv: + # Run tests with CPU + make uvcheck + $(UV) run pytest + +tests_nox: + make noxcheck + $(NOX) -s tests + tests_cpu_ongpu: # Run tests with CPU on a system with GPU (and CuPy installed) make pythoncheck export CUPY_PYLOPS=0 && export TEST_CUPY_PYLOPS=0 && pytest +tests_cpu_ongpu_uv: + # Run tests with CPU on a system with GPU (and CuPy installed) + make pythoncheck + export CUPY_PYLOPS=0 && export TEST_CUPY_PYLOPS=0 && $(UV) run pytest + tests_gpu: # Run tests with GPU (requires CuPy to be installed) make pythoncheck export TEST_CUPY_PYLOPS=1 && pytest +tests_gpu_uv: + # Run tests with GPU (requires CuPy to be installed) + make pythoncheck + export TEST_CUPY_PYLOPS=1 && $(UV) run pytest + doc: + cd docs && rm -rf source/api/generated && rm -rf source/gallery &&\ + rm -rf source/tutorials && rm -rf source/examples &&\ + rm -rf build && make html && cd .. + +doc_uv: + make uvcheck cd docs && rm -rf source/api/generated && rm -rf source/gallery &&\ - rm -rf source/tutorials && rm -rf build && make html && cd .. + rm -rf source/tutorials && rm -rf source/examples &&\ + rm -rf build && $(UV) run make html && cd .. docupdate: cd docs && make html && cd .. +docupdate_uv: + make uvcheck + cd docs && $(UV) run make html && cd .. + servedoc: + make pythoncheck $(PYTHON) -m http.server --directory docs/build/html/ +servedoc_uv: + make uvcheck + $(UV) run python -m http.server --directory docs/build/html/ + lint: - flake8 docs/ examples/ pylops/ pytests/ tutorials/ + ruff check docs/source examples/ pylops/ pytests/ tutorials/ + +lint_uv: + make uvcheck + $(UV) run ruff check docs/source examples/ pylops/ pytests/ tutorials/ typeannot: mypy pylops/ +typeannot_uv: + make uvcheck + $(UV) run mypy pylops/ + coverage: - coverage run -m pytest && coverage xml && coverage html && $(PYTHON) -m http.server --directory htmlcov/ + coverage run --source=pylops -m pytest && \ + coverage xml && coverage html && $(PYTHON) -m http.server --directory htmlcov/ + +coverage_uv: + make uvcheck + $(UV) run coverage run --source=pylops -m pytest &&\ + $(UV) run coverage xml &&\ + $(UV) run coverage html &&\ + $(UV) run python -m http.server --directory htmlcov/ diff --git a/README.md b/README.md index 814ad2cdd..de6c777f6 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,37 @@ It is inspired by the iconic MATLAB [Spot – A Linear-Operator Toolbox](http:// ## Installation -To get the most out of PyLops straight out of the box, we recommend `conda` to install PyLops: +To get the most out of PyLops straight out of the box, we recommend using +the PyPI distribution via `uv`: + ```bash -conda install -c conda-forge pylops +uv pip install pylops ``` -You can also install with `pip`: + +or directly via `pip`: + ```bash pip install pylops ``` +#### From Conda +You can also install PyLops via `conda`: + +```bash +conda install -c conda-forge pylops +``` + +#### From Github +Finally, you can also directly install from the main branch (although this is not recommended) via `uv`: + +```bash +uv add git+https://github.com/PyLops/pylops.git --branch main +``` +or via `pip`: +```bash +pip install git+https://git@github.com/PyLops/pylops.git@main +``` + See the docs ([Installation](https://pylops.readthedocs.io/en/stable/installation.html)) for more information about dependencies and performance. ## Why PyLops? diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9f96e7e01..f29bc75f3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,43 +12,13 @@ trigger: jobs: -# Windows -######################################################################################## -# - job: -# displayName: 'Windows' -# -# pool: -# vmImage: 'windows-2025' -# -# variables: -# NUMBA_NUM_THREADS: 1 -# -# steps: -# - task: UsePythonVersion@0 -# inputs: -# versionSpec: '3.10' -# architecture: 'x64' -# -# - script: | -# python -m pip install --upgrade pip setuptools wheel django -# pip install -r requirements-dev.txt -# pip install -r requirements-torch.txt -# pip install . -# displayName: 'Install prerequisites and library' -# -# - script: | -# pytest -# condition: succeededOrFailed() -# displayName: 'Run tests' - - # Mac ######################################################################################## - job: displayName: 'Mac' pool: - vmImage: 'macOS-latest' + vmImage: 'macOS-15-arm64' variables: NUMBA_NUM_THREADS: 1 @@ -56,19 +26,24 @@ jobs: steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.10' - architecture: 'x64' + versionSpec: '3.11' + architecture: 'arm64' - script: | - python -m pip install --upgrade pip setuptools wheel django - pip install -r requirements-dev-arm.txt - pip install -r requirements-pyfftw.txt - pip install -r requirements-torch.txt - pip install . - displayName: 'Install prerequisites and library' + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "##vso[task.prependpath]$HOME/.cargo/bin" + displayName: 'Install uv' - script: | - pytest + uv sync --locked \ + --extra advanced \ + --extra stat \ + --extra deep \ + --all-groups + displayName: 'Install dependencies andn pylops' + + - script: | + uv run pytest --color=yes pytests/ condition: succeededOrFailed() displayName: 'Run tests' @@ -87,18 +62,23 @@ jobs: steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.10' + versionSpec: '3.11' architecture: 'x64' - script: | - python -m pip install --upgrade pip setuptools wheel django - pip install -r requirements-dev.txt - pip install -r requirements-pyfftw.txt - pip install -r requirements-torch.txt - pip install . - displayName: 'Install prerequisites and library' + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "##vso[task.prependpath]$HOME/.cargo/bin" + displayName: 'Install uv' + + - script: | + uv sync --locked \ + --extra advanced \ + --extra stat \ + --extra deep \ + --all-groups + displayName: 'Install dependencies andn pylops' - script: | - pytest + uv run pytest --color=yes pytests/ condition: succeededOrFailed() displayName: 'Run tests' diff --git a/docs/source/_static/style.css b/docs/source/_static/style.css deleted file mode 100644 index 94b9bef81..000000000 --- a/docs/source/_static/style.css +++ /dev/null @@ -1,117 +0,0 @@ -/* To stick the footer to the bottom of the page */ -html { -} - -body { - font-family: 'Open Sans', sans-serif; -} - -h1, h2, h3, h4 { - font-weight: 300; - font-family: "Open Sans",sans-serif; -} - -h1 { - font-size: 200%; -} - -.sidebar-title { - margin-top: 10px; - margin-bottom: 0px; -} - -.banner { - padding-bottom: 60px; - text-align: center; -} - -.banner img { - margin-bottom: 40px; -} - -.api-module { - margin-bottom: 80px; -} - -.youtube-embed { - max-width: 600px; - margin-bottom: 24px; -} - -.video-container { - position:relative; - padding-bottom:56.25%; - padding-top:30px; - height:0; - overflow:hidden; -} - -.video-container iframe, .video-container object, .video-container embed { - position:absolute; - top:0; - left:0; - width:100%; - height:100%; -} - -.wy-nav-content { - max-width: 1000px; -} - -.wy-nav-top { - background-color: #555555; -} - -.wy-side-nav-search { - background-color: #555555; -} - -.wy-side-nav-search > a img.logo { - width: 50%; -} - -.wy-side-nav-search input[type="text"] { - border-color: #555555; -} - -/* Remove the padding from the Parameters table */ -.rst-content table.field-list .field-name { - padding-left: 0px; -} - -/* Lign up the Parameters section with the descriptions */ -.rst-content table.field-list td { - padding-top: 8px; -} - -.rst-content .highlight > pre { - font-size: 14px; -} - -.rst-content img { - max-width: 100%; -} - -.source-link { - float: right; -} - -.strike { - text-decoration: line-through; -} - -/* Don't let the edit and notebook download links disappear on mobile. */ -@media screen and (max-width: 480px) { - .wy-breadcrumbs li.source-link { - float:none; - display: block; - margin-top: 20px; - } -} - -/* Sphinx-Gallery */ -/****************************************************************************/ -/* Don't let captions be italic */ -.rst-content div.figure p.caption { - font-style: normal; -} \ No newline at end of file diff --git a/docs/source/adding.rst b/docs/source/adding.rst index 4420b1573..1c9be8e68 100755 --- a/docs/source/adding.rst +++ b/docs/source/adding.rst @@ -1,7 +1,8 @@ .. _addingoperator: -Implementing new operators -========================== +|:paintbrush:| Implementing new operators +######################################### + Users are welcome to create new operators and add them to the PyLops library. In this tutorial, we will go through the key steps in the definition of an operator, using a simplified version of the @@ -10,7 +11,7 @@ to the model in forward mode and to the data in adjoint mode. Creating the operator ---------------------- +********************* The first thing we need to do is to create a new file with the name of the operator we would like to implement. Note that as the operator will be a class, we need to follow the UpperCaseCamelCase convention both for the class itself and for the filename. @@ -42,7 +43,7 @@ input parameters and a ``Notes`` section providing a mathematical explanation of some of the core operators of PyLops to get a feeling of the level of details of the mathematical explanation. Initialization (``__init__``) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +============================= We then need to create the ``__init__`` where the input parameters are passed and saved as members of our class. While the input parameters change from operator to operator, it is always required to create three members: @@ -87,7 +88,7 @@ See the docs of :py:class:`pylops.LinearOperator` for more information about wha attributes mean. Forward mode (``_matvec``) -^^^^^^^^^^^^^^^^^^^^^^^^^^ +========================== We can then move onto writing the *forward mode* in the method ``_matvec``. In other words, we will need to write the piece of code that will implement the following operation :math:`\mathbf{y} = \mathbf{A}\mathbf{x}`. Such method is always composed of two inputs (the object itself ``self`` and the input model ``x``). @@ -105,7 +106,7 @@ more details in the decorator documentation, by adding such decorator the input a nd-array of shape ``dims``, fed to the actual code in ``_matvec`` and then flattened. Adjoint mode (``_rmatvec``) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +=========================== Finally we need to implement the *adjoint mode* in the method ``_rmatvec``. In other words, we will need to write the piece of code that will implement the following operation :math:`\mathbf{x} = \mathbf{A}^H\mathbf{y}`. Such method is also composed of two inputs (the object itself ``self`` and the input data ``y``). @@ -123,8 +124,9 @@ Similar to ``_matvec``, since version ``v2.0.0``, this method can also be decora When doing so, the input ``x`` is initially reshaped into a nd-array of shape ``dimsd``, fed to the actual code in ``_rmatvec`` and then flattened. + Testing the operator --------------------- +******************** Being able to write an operator is not yet a guarantee of the fact that the operator is correct, or in other words that the adjoint code is actually the *adjoint* of the forward code. Luckily for us, a simple test can be performed to check the validity of forward and adjoint operators, the so called *dot-test*. @@ -170,7 +172,7 @@ model tested towards the input model. Documenting the operator ------------------------- +************************ Once the operator has been created, we can add it to the documentation of PyLops. To do so, simply add the name of the operator within the ``index.rst`` file in ``docs/source/api`` directory. @@ -180,7 +182,7 @@ can be used as template. Final checklist ---------------- +*************** Before submitting your new operator for review, use the following **checklist** to ensure that your code adheres to the guidelines of PyLops: diff --git a/docs/source/addingsolver.rst b/docs/source/addingsolver.rst index fbd321225..d38664975 100755 --- a/docs/source/addingsolver.rst +++ b/docs/source/addingsolver.rst @@ -1,11 +1,12 @@ .. _addingsolver: -Implementing new solvers -======================== +|:fire:| Implementing new solvers +################################# + Users are welcome to create new solvers and add them to the PyLops library. In this tutorial, we will go through the key steps in the definition of a solver, using a -sligthly simplified version of :py:class:`pylops.optimization.basic.CG` as an example. +sligthly simplified version of :py:class:`pylops.optimization.cls_basic.CG` as an example. .. note:: In case the solver that you are planning to create falls within the category of proximal solvers, diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst index e2bdc988e..145c4b96e 100755 --- a/docs/source/api/index.rst +++ b/docs/source/api/index.rst @@ -1,7 +1,7 @@ .. _api: -PyLops API -========== +|:wrench:| PyLops API +===================== The Application Programming Interface (API) of PyLops can be loosely seen as composed of a stack of three main layers: @@ -64,7 +64,7 @@ Basic operators Imag Conj ToCupy - + Smoothing and derivatives ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -74,6 +74,7 @@ Smoothing and derivatives Smoothing1D Smoothing2D + SmoothingND FirstDerivative SecondDerivative Laplacian @@ -99,6 +100,7 @@ Signal processing NonStationaryFilters1D NonStationaryFilters2D Interp + InterpCubicSpline Bilinear FFT FFT2D @@ -169,6 +171,7 @@ Medical imaging :toctree: generated/ CT2D + MRI2D Solvers diff --git a/docs/source/api/others.rst b/docs/source/api/others.rst index 6eb19031f..470740fad 100755 --- a/docs/source/api/others.rst +++ b/docs/source/api/others.rst @@ -1,8 +1,8 @@ .. _others: +|:nut_and_bolt:| PyLops Utilities +================================= -PyLops Utilities -================ Alongside with its *Linear Operators* and *Solvers*, PyLops contains also a number of auxiliary routines performing universal tasks that are used by several operators or simply within one or more :ref:`tutorials` for the preparation of input data and subsequent visualization of results. diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index ce416c226..cb15ef6cb 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -1,9 +1,30 @@ .. _changlog: -Changelog -========= +|:newspaper_roll:| Changelog +############################ +Version 2.7.0 +------------- + +*Released on: 17/05/2026* + +* Added cubic spline interpolation operator via + :py:class:`pylops.signalprocessing.InterpCubicSpline` (also interfaceable via + :py:class:`pylops.signalprocessing.Interp` with `kind="cubic_spline"`) +* Added :py:class:`pylops.medical.MRI2D` operator +* Added :py:class:`pylops.SmoothingND` operator +* Added 3d extension to :py:func:`pylops.utils.signalprocessing.pwd_slope_estimate` +* Fixed unwanted upcasting in :py:class:`pylops.avo.avo.AVOLinearModelling`, + :py:class:`pylops.Laplacian`, :py:class:`pylops.signalprocessing.Bilinear`, + :py:class:`pylops.signalprocessing.Interp`, :py:class:`pylops.signalprocessing.NonStationaryFilters2D`, + :py:class:`pylops.signalprocessing.Seislet`, :py:class:`pylops.signalprocessing.Sliding1D`, + :py:class:`pylops.signalprocessing.Sliding2D`, :py:class:`pylops.signalprocessing.Sliding3D`, + :py:class:`pylops.Smoothing1D`, :py:class:`pylops.Smoothing2D`, + and :py:class:`pylops.waveeqprocessing.Marchenko` +* Improved typing annotations across all operators (and enforced use of + Literal for parameters with multiple options) + Version 2.6.0 ------------- diff --git a/docs/source/citing.rst b/docs/source/citing.rst index b8adfb18d..888af8540 100755 --- a/docs/source/citing.rst +++ b/docs/source/citing.rst @@ -1,7 +1,8 @@ .. _citing: -How to cite -=========== +|:pencil2:| How to cite +####################### + When using PyLops in scientific publications, please cite the following paper: .. raw:: html diff --git a/docs/source/conf.py b/docs/source/conf.py index 568c7c313..bee240f8f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import datetime import os import sys @@ -22,9 +21,10 @@ "matplotlib.sphinxext.plot_directive", "numpydoc", "nbsphinx", + "sphinx_design", + "sphinx_iconify", "sphinx_gallery.gen_gallery", "sphinxemoji.sphinxemoji", - # 'sphinx.ext.napoleon', ] # intersphinx configuration @@ -99,7 +99,7 @@ # General information about the project year = datetime.date.today().year project = "PyLops" -copyright = "{}, PyLops Development Team".format(year) +copyright = f"{year}, PyLops Development Team" # Version version = __version__ @@ -107,9 +107,9 @@ version = "dev" # These enable substitutions using |variable| in the rst files -rst_epilog = """ +rst_epilog = f""" .. |year| replace:: {year} -""".format(year=year) +""" html_static_path = ["_static"] html_last_updated_fmt = "%b %d, %Y" html_title = "PyLops" @@ -124,15 +124,12 @@ html_show_copyright = True # Theme config -html_theme = "pydata_sphinx_theme" +html_theme = "shibuya" html_theme_options = { + "accent_color": "teal", "github_url": "https://github.com/PyLops/pylops", - # "logo_only": True, - # "display_version": True, - "logo": { - "image_light": "pylops_b.png", - "image_dark": "pylops.png", - } + "light_logo": "_static/pylops_b.png", + "dark_logo": "_static/pylops.png", } html_css_files = [ "css/custom.css", @@ -155,14 +152,9 @@ "doc_path": "docs/source", "galleries": sphinx_gallery_conf["gallery_dirs"], "gallery_dir": dict( - zip(sphinx_gallery_conf["gallery_dirs"], sphinx_gallery_conf["examples_dirs"]) + zip(sphinx_gallery_conf["gallery_dirs"], sphinx_gallery_conf["examples_dirs"], strict=True) ), "github_project": "PyLops", "github_repo": "pylops", "github_version": "master", } - - -# Load the custom CSS files (needs sphinx >= 1.6 for this to work) -def setup(app): - app.add_css_file("style.css") diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst index 8b8eb9d5c..82a30720b 100755 --- a/docs/source/contributing.rst +++ b/docs/source/contributing.rst @@ -1,7 +1,7 @@ .. _contributing: -Contributing -############ +|:heart:| Contributing +###################### Contributions are welcome and greatly appreciated! @@ -9,10 +9,6 @@ The best way to get in touch with the core developers and maintainers is to join the `PyLops slack channel `_ as well as open new *Issues* directly from the `GitHub repo `_. -Moreover, take a look at the :ref:`roadmap` page for a list of current ideas -for improvements and additions to the PyLops library. - - Welcomed contributions ********************** @@ -37,14 +33,12 @@ If you are proposing a new operator or a new feature: * Explain in detail how it should work. * Keep the scope as narrow as possible, to make it easier to implement. - Fix issues ========== There is always a backlog of issues that need to be dealt with. Look through the `GitHub Issues `_ for operator/feature requests or bugfixes. - Add examples or improve documentation ===================================== @@ -124,8 +118,9 @@ Before you submit a pull request, check that it meets these guidelines: 2. If the pull request adds functionality, the docs should be updated accordingly. 3. Ensure that the updated code passes all tests. + Project structure -################# +***************** This repository is organized as follows: * **pylops**: Python library containing various linear operators and auxiliary routines diff --git a/docs/source/credits.rst b/docs/source/credits.rst index 755b3966b..e51638896 100755 --- a/docs/source/credits.rst +++ b/docs/source/credits.rst @@ -1,7 +1,7 @@ .. _credits: -Contributors -============ +|:people_holding_hands:| Contributors +##################################### * `Matteo Ravasi `_, mrava87 * `Carlos da Costa `_, cako diff --git a/docs/source/extensions.rst b/docs/source/extensions.rst index 25220df54..768a3e790 100755 --- a/docs/source/extensions.rst +++ b/docs/source/extensions.rst @@ -1,7 +1,7 @@ .. _extensions: -Extensions -========== +|:link:| Extensions +################### PyLops brings to users the power of linear operators in a simple and easy to use programming interface. diff --git a/docs/source/faq.rst b/docs/source/faq.rst index ab0573925..90d03d5ba 100755 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -1,7 +1,7 @@ .. _faq: -Frequenty Asked Questions -========================= +|:question:| Frequenty Asked Questions +###################################### **1. Can I visualize my operator?** @@ -14,7 +14,7 @@ working with linear operators is indeed that you don't really need to access the of an operator. -**2. Can I have an older version of** ``cupy`` **installed in my system (** ``cupy-cudaXX<10.6.0``)?** +**2. Can I have an older version of** ``cupy`` **installed in my system (** ``cupy-cudaXX<10.6.0`` **)?** Yes. Nevertheless you need to tell PyLops that you don't want to use its ``cupy`` backend by setting the environment variable ``CUPY_PYLOPS=0``. diff --git a/docs/source/gpu.rst b/docs/source/gpu.rst index 64695ae93..0a07ad106 100755 --- a/docs/source/gpu.rst +++ b/docs/source/gpu.rst @@ -1,10 +1,11 @@ .. _gpu: -GPU / TPU Support -================= +|:video_game:| GPU / TPU Support +################################ Overview --------- +******** + From ``v1.12.0``, PyLops supports computations on GPUs powered by `CuPy `_ (``cupy-cudaXX>=13.0.0``). This library must be installed *before* PyLops is installed. @@ -32,8 +33,10 @@ be also wrapped into a :class:`pylops.JaxOperator`. See below for a comphrensive list of supported operators and additional functionalities for both the ``cupy`` and ``jax`` backends. + Install dependencies --------------------- +******************** + GPU-enabled development environments can created using ``conda`` .. code-block:: bash @@ -48,12 +51,12 @@ or ``pip`` Examples --------- +******** Let's now briefly look at some use cases. End-to-end GPU powered inverse problems -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +======================================= First we consider the most common scenario when both the model and data vectors fit onto the GPU memory. We can therefore simply replace all our @@ -122,7 +125,7 @@ Again, the code is almost unchanged apart from the fact that we now use ``jax`` Mixed CPU-GPU powered inverse problems -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +====================================== Let us now consider a more intricate scenario where we have access to a GPU-powered operator, however the model and/or data vectors are too large @@ -208,7 +211,7 @@ These features are currently not available for ``jax`` arrays. Supported Operators -------------------- +******************* In the following, we provide a list of methods in :class:`pylops.LinearOperator` with their current status (available on CPU, GPU with CuPy, and GPU with JAX): @@ -602,6 +605,10 @@ Medical: - |:white_check_mark:| - |:white_check_mark:| - |:white_check_mark:| + * - :class:`pylops.medical.mri.MRI2D` + - |:white_check_mark:| + - |:red_circle:| + - |:white_check_mark:| .. warning:: diff --git a/docs/source/index.rst b/docs/source/index.rst index 1a8f5a430..ecc28e505 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,5 +1,6 @@ -Overview -======== +PyLops +====== + PyLops is an open-source Python library focused on providing a backend-agnostic, idiomatic, matrix-free library of linear operators and related computations. It is inspired by the iconic MATLAB `Spot – A Linear-Operator Toolbox `_ project. @@ -72,23 +73,23 @@ It is a flexible and scalable python library for large-scale optimization with l that can be tailored to our needs, and as contribution to the free software community. Since June 2021, PyLops is a `NUMFOCUS `_ Affiliated Project. + .. toctree:: :maxdepth: 1 :hidden: - :caption: Getting started + :caption: Getting started: - self installation.rst gpu.rst extensions.rst tutorials/index.rst gallery/index.rst - FAQs + faq.rst .. toctree:: :maxdepth: 2 :hidden: - :caption: Reference documentation + :caption: Reference documentation: api/index.rst api/others.rst @@ -96,13 +97,12 @@ PyLops is a `NUMFOCUS - Implementing new solvers - Contributing - Changelog - Roadmap - Papers using PyLops - How to cite - Credits + :caption: Getting involved: + + adding.rst + addingsolver.rst + contributing.rst + changelog.rst + papers.rst + citing.rst + credits.rst diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 669994f6f..a64b195de 100755 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -1,7 +1,7 @@ .. _installation: -Installation -############ +|:desktop_computer:| Installation +################################# Dependencies ************ @@ -13,52 +13,70 @@ Required dependencies are limited to: * `NumPy `_ * `SciPy `_ -We highly encourage using the `Anaconda Python distribution `_ +We encourage using the `Anaconda Python distribution `_ or its standalone package manager `Conda `_. -Especially for Intel processors, this ensures a higher performance with no configuration. +Especially for Intel processors, this ensures a higher performance with no configuration (e.g., +the linking to ``Intel MKL`` library, a highly optimized BLAS library created by Intel). If you are interested in getting the best code performance, read carefully :ref:`Performance`. -For learning, however, the standard installation is often good enough. -Some operators have additional, optional "engines" to improve their performance. -These often rely on third-party libraries which are added to the -list of our optional dependencies. -Optional dependencies therefore refer to those dependencies that are not strictly -needed nor installed directly as part of a standard installation. -For details more details, see :ref:`Optional`. +For learning, however, the standard installation is often good enough; in that case, we +recommend using `uv `_, a modern Python package manager that +is easy to use and has a very fast dependency resolver. + +Some operators have additional, optional *engines* that are usually meant to provide improved +performance on CPU or enable GPU acceleration. These rely on third-party libraries, which are +added to the list of our optional dependencies and must be installed to be able to use the +associated engine. Similarly, some operators are implemented on top of third-party libraries, +which are also added to the list of our optional dependencies and must be installed to be +able to use the associated operator. In both cases, if the dependency is not installed, the +rest of the library will still work. For details more details, see :ref:`Optional`. Step-by-step installation for users *********************************** -Conda (recommended) -=================== -If using ``conda``, install our ``conda-forge`` distribution via: +From Package Manager +==================== +First install `pylops` with your package manager of choice. -.. code-block:: bash +.. tab-set:: - >> conda install --channel conda-forge pylops + .. tab-item:: :iconify:`devicon:anaconda` conda -Using the ``conda-forge`` distribution is recommended as all the dependencies (both required -and optional) will be automatically installed for you. + .. code-block:: bash -Pip -=== -If you are using ``pip``, and simply type the following command in your terminal -to install the PyPI distribution: + >> conda install --channel conda-forge pylops -.. code-block:: bash + which installs also the *required* dependencies, if not already present + in your environment. - >> pip install pylops + .. tab-item:: :iconify:`material-icon-theme:uv` uv -Note that when installing via ``pip``, only *required* dependencies are installed. + .. code-block:: bash + + >> uv add pylops + + which installs also the *required* dependencies, if not already present + in your environment. Refer to :ref:`Optional` for alternative `uv` + commands that install some of the optional dependencies as well. From Source =========== -To access the latest source from github: +To access the latest source from GitHub: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`devicon:pypi` pip + + .. code-block:: bash - >> pip install https://github.com/PyLops/pylops.git@dev + >> pip install https://github.com/PyLops/pylops.git@dev + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add git+https://github.com/PyLops/pylops.git --branch dev Docker ====== @@ -82,6 +100,7 @@ A larger image with ``conda`` a distribution is also available: >> docker run -it -v /path/to/local/folder:/home/jupyter/notebook -p 8888:8888 mrava87/pylops:conda_notebook + .. _DevInstall: Step-by-step installation for developers @@ -97,39 +116,47 @@ Fork the `PyLops repository `_ and clone it by Install dependencies ==================== - We recommend installing dependencies into a separate environment. For that end, we provide a `Makefile` with useful commands for setting up the environment. -Conda (recommended) -------------------- -For a ``conda`` environment, run +.. tab-set:: -.. code-block:: bash + .. tab-item:: conda - >> make dev-install_conda # for x86 (Intel or AMD CPUs) - >> make dev-install_conda_arm # for arm (M-series Mac) + .. code-block:: bash -This will create and activate an environment called ``pylops``, with all required and optional dependencies. + >> make dev-install_conda # for x86 (Intel or AMD CPUs) + >> make dev-install_conda_arm # for arm (M-series Mac) + + This creates and activate an environment called ``pylops``, with + all required and optional dependencies. -Pip ---- -If you prefer a ``pip`` installation, we provide the following command + .. tab-item:: :iconify:`material-icon-theme:uv` uv -.. code-block:: bash - - >> make dev-install + .. code-block:: bash -Note that, differently from the ``conda`` command, the above **will not** create a virtual environment. -Make sure you create and activate your environment previously. + >> make dev-install_uv + + This creates a virtual environment `.venv` that can be activated at + any time with `source .venv/bin/activate` (Linux/macOS). Run tests ========= To ensure that everything has been setup correctly, run tests: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`devicon:anaconda` conda + + .. code-block:: bash + + >> make tests + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash - >> make tests + >> make tests_uv Make sure no tests fail, this guarantees that the installation has been successful. @@ -149,7 +176,6 @@ From then on, you can pull changes (for example, in the dev branch) with: >> git pull upstream dev - Install pre-commit hooks ======================== To ensure consistency in the coding style of our developers we rely on @@ -159,35 +185,75 @@ that have been configured in the ``.pre-commit-config.yaml`` file. In order to setup such hooks in your local repository, run: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`devicon:anaconda` conda + + .. code-block:: bash - >> pre-commit install + >> pre-commit install + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv run pre-commit install Once this is set up, when committing changes, ``pre-commit`` will reject and "fix" your code by running the proper hooks. At this point, the user must check the changes and then stage them before trying to commit again. Final steps =========== -PyLops does not enforce the use of a linter as a pre-commit hook, but we do highly encourage using one before submitting a Pull Request. -A properly configured linter (``flake8``) can be run with: +PyLops does enforce the use of a linter (``ruff``), which is run both as a pre-commit hook and as a GitHub Action. +The linter can also be run locally with: -.. code-block:: bash +.. tab-set:: - >> make lint + .. tab-item:: :iconify:`devicon:anaconda` conda + + .. code-block:: bash + + >> make lint + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> make lint_uv In addition, it is highly encouraged to build the docs prior to submitting a Pull Request. Apart from ensuring that docstrings are properly formatted, they can aid in catching bugs during development. Build (or update) the docs with: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`devicon:anaconda` conda + + .. code-block:: bash + + >> make doc + + .. tab-item:: :iconify:`material-icon-theme:uv` uv - >> make doc + .. code-block:: bash + + >> make doc_uv or -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`devicon:anaconda` conda + + .. code-block:: bash - >> make docupdate + >> make docupdate + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> make docupdate_uv .. _Performance: @@ -232,7 +298,6 @@ These are an option for an environment without ``conda`` that needs Intel MKL wi ``intel-numpy`` and ``intel-scipy`` not only link against Intel MKL, but also substitute NumPy and SciPy FFTs with `Intel MKL FFT `_. - Multithreading ============== It is important to ensure that your environment variable which sets threads is @@ -295,66 +360,179 @@ other libraries that you have in your system, we have decided to build some of t of PyLops in such a way that if an *optional* dependency is not present in your Python environment, a safe fallback to one of the required dependencies will be enforced. -When available in your system, we recommend using the Conda package manager and install all the -required and some of the optional dependencies of PyLops at once using the command: - -.. code-block:: bash - - >> conda install --channel conda-forge pylops - -in this case all dependencies will be installed from their Conda distributions. - -Alternatively, from version ``1.4.0`` some of the optional dependencies can also be -installed as part of the pip installation via: - -.. code-block:: bash - - >> pip install pylops[advanced] - -Dependencies are however installed from their PyPI wheels. - -Finally, note that CuPy and JAX are not **not** installed -automatically. Users interested to accelerate their computations with the aid -of GPUs should install either or both of them prior to installing PyLops as -described in :ref:`OptionalGPU`. - .. note:: If you are a developer, all the optional dependencies below (except GPU) can be installed automatically by cloning the repository and installing - PyLops via ``make dev-install_conda`` (``conda``) or ``make dev-install`` (``pip``). - + PyLops via ``make dev-install_conda`` (``conda``) or + ``make dev-install_uv`` (``uv``). GPU-enabled equivalents are + ``make dev-install_conda_gpu`` (``conda``) and + ``make dev-install_uvcu126 / dev-install_uvcu128 / dev-install_uvcu13`` (``uv``) + +When using the Conda package manager, only the required dependencies will be installed +when installing PyLops. It is recommended to install the optional dependencies manually +before installing PyLops or as part of the creation of the environment via an +`environment.yml` file. + +Alternatively, from version ``v1.4.0`` some of the optional dependencies can be +installed as part of the pip installation via (see summary table below for details): + +.. tab-set:: + + .. tab-item:: :iconify:`devicon:pypi` pip + + .. code-block:: bash + + >> pip install pylops[advanced] + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add "pylops[advanced]" + +Finally, from version ``2.7.0``, all of the optional dependencies can be installed as part of +the pip installation via (see summary table below for details): + + +.. tab-set:: + + .. tab-item:: :iconify:`devicon:pypi` pip + + .. code-block:: bash + + >> pip install pylops[advanced, stat, deep] # CPU + >> pip install pylops[advanced, stat, gpu-cu12, deep-cu126] # GPU with CUDA 12.6 + >> pip install pylops[advanced, stat, gpu-cu12, deep-cu128] # GPU with CUDA 12.6 + >> pip install pylops[advanced, stat, gpu-cu13, deep-cu13] # GPU with CUDA 13.0 + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add "pylops[advanced, stat, deep]" # CPU + >> uv add "pylops[advanced, stat, gpu-cu12, deep-cu126]" # GPU with CUDA 12.6 + >> uv add "pylops[advanced, stat, gpu-cu12, deep-cu128]" # GPU with CUDA 12.6 + >> uv add "pylops[advanced, stat, gpu-cu13, deep-cu13]" # GPU with CUDA 13.0 + +In all cases, dependencies are installed from their PyPI wheels. + +A summary table of all optional dependencies, the operators that rely on them (and +whether they are required to be able to use the operator(s)), and how to install +them as part of the installation process of PyLops provided in the table below. + +.. list-table:: + :widths: 15 40 5 40 + :header-rows: 1 + + * - Dependency + - Operator(s) affected + - Required + - Install with + * - ASTRA + - :py:class:`pylops.medical.CT2D` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - dtcwt + - :py:class:`pylops.signalprocessing.DTCWT` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - Devito + - :py:class:`pylops.waveeqprocessing.AcousticWave2D` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - FFTW + - :py:class:`pylops.signalprocessing.FFT`, :py:class:`pylops.signalprocessing.FFT2D`, + :py:class:`pylops.signalprocessing.FFTND` + - |:red_circle:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - MKL-FFT + - :py:class:`pylops.signalprocessing.FFT`, :py:class:`pylops.signalprocessing.FFT2D`, + :py:class:`pylops.signalprocessing.FFTND` + - |:red_circle:| + - N/A (see below for installation instructions) + * - Numba + - :py:class:`pylops.basicoperators.Spread`, :py:class:`pylops.signalprocessing.FourierRadon2D`, + :py:class:`pylops.signalprocessing.FourierRadon3D`, :py:class:`pylops.signalprocessing.Radon2D`, + :py:class:`pylops.signalprocessing.Radon3D`, :py:class:`pylops.signalprocessing.NonStationaryConvolve2D`, + :py:class:`pylops.signalprocessing.NonStationaryFilters2D`, :py:class:`pylops.signalprocessing.NonStationaryConvolve3D`, + :py:class:`pylops.signalprocessing.PWSprayer2D`, :py:class:`pylops.signalprocessing.PWSmoother2D`, + :py:class:`pylops.waveeqprocessing.Kirchhoff` + - |:red_circle:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - PyMC and PyTensor + - :py:class:`pylops.PyTensorOperator` + - |:white_check_mark:| + - `pip install pylops[stat]` / `uv add "pylops[stat]"` + * - PyWavelets + - :py:class:`pylops.signalprocessing.DWT`, :py:class:`pylops.signalprocessing.DWT2D`, + :py:class:`pylops.signalprocessing.DWTND` + - |:red_circle:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - scikit-fmm + - :py:class:`pylops.waveeqprocessing.Kirchhoff` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - SPGL1 + - :py:class:`pylops.optimization.sparsity.spgl1` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - Sympy + - :py:class:`pylops.waveeqprocessing.AcousticWave2D` and :py:func:`pylops.utils.describe.describe` + - |:white_check_mark:| + - `pip install pylops[advanced]` / `uv add "pylops[advanced]"` + * - Torch + - :py:class:`pylops.TorchOperator` + - |:white_check_mark:| + - `pip install pylops[deep]` / `uv add "pylops[deep]"` (or GPU equivalents) + * - CuPy + - Almost all operators (see :ref:`gpu` for details) + - |:red_circle:| + - `pip install pylops[gpu-cu12]` / `uv add "pylops[gpu-cu12]"` + * - JAX + - :py:class:`pylops.JAXOperator` + - |:red_circle:| + - `pip install pylops[deep]` / `uv add "pylops[deep]"` (or GPU equivalents) More details about the installation process for the different optional dependencies are described -in the following (an asterisc is used to indicate those dependencies that are automatically installed -when installing PyLops from conda-forge or via ``pip install pylops[advanced]``): +in the following: ASTRA ----- `ASTRA `_ is library used to perform computerized tomography. It is used in PyLops in the operator :py:class:`pylops.medical.CT2D` -To use this library, install it manually either via ``conda``: +To use this library, install it via: -.. code-block:: bash - >> conda install --channel astra-toolbox astra-toolbox +.. tab-set:: -or via pip: + .. tab-item:: :iconify:`devicon:anaconda` conda -.. code-block:: bash - >> pip install astra-toolbox + .. code-block:: bash + >> conda install --channel astra-toolbox astra-toolbox + + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add astra-toolbox -dtcwt* ------- + +dtcwt +----- `dtcwt `_ is a library used to implement the DT-CWT operators. -Install it via ``pip`` with: +Install it via: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`material-icon-theme:uv` uv - >> pip install dtcwt + .. code-block:: bash + + >> uv add dtcwt .. warning:: ``dtcwt`` does not support NumPy 2 yet, so make sure you use NumPy 1.x @@ -367,15 +545,19 @@ Devito the finite-difference method. It is used in PyLops to compute wavefields :py:class:`pylops.waveeqprocessing.AcousticWave2D` -Install it via ``pip`` with +Install it via: -.. code-block:: bash +.. tab-set:: - >> pip install devito + .. tab-item:: :iconify:`material-icon-theme:uv` uv + .. code-block:: bash -FFTW* and MKL-FFT ------------------ + >> uv add devito + + +FFTW and MKL-FFT +---------------- Four different "engines" are provided by the :py:class:`pylops.signalprocessing.FFT` operator: ``engine="numpy"`` (default), ``engine="scipy"``, ``engine="fftw"`` and ``engine="mkl_fft"``. Similarly, the :py:class:`pylops.signalprocessing.FFT2D` and @@ -386,33 +568,41 @@ The first two engines are part of the required PyLops dependencies. The third implements the well-known `FFTW `_ via the Python wrapper :py:class:`pyfftw.FFTW`. While this optimized FFT tends to outperform the other two in many cases, it is not included by default. -To use this library, install it manually either via ``conda``: +To use this library, install it via: -.. code-block:: bash +.. tab-set:: - >> conda install --channel conda-forge pyfftw + .. tab-item:: :iconify:`devicon:anaconda` conda -or via pip: + .. code-block:: bash -.. code-block:: bash + >> conda install --channel conda-forge pyfftw - >> pip install pyfftw + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add pyfftw The fourth implements **Intel MKL FFT** via the Python interface `mkl_fft `_. This provides access to Intel’s oneMKL Fourier Transform routines, enabling efficient FFT computations with performance close to native C/Intel® oneMKL -To use this library, you can install it using ``conda``: +To use this library, you can install it via: -.. code-block:: bash +.. tab-set:: - >> conda install --channel https://software.repos.intel.com/python/conda --channel conda-forge mkl_fft + .. tab-item:: :iconify:`devicon:anaconda` conda -or via pip: + .. code-block:: bash -.. code-block:: bash + >> conda install --channel https://software.repos.intel.com/python/conda --channel conda-forge mkl_fft - >> pip install --index-url https://software.repos.intel.com/python/pypi --extra-index-url https://pypi.org/simple mkl_fft + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add mkl_fft --index-url https://software.repos.intel.com/python/pypi --extra-index-url https://pypi.org/simple Installing ``mkl-fft`` triggers the installation of Intel-optimized versions of `NumPy `__ and `SciPy `__, which redirects ``numpy.fft`` and ``scipy.fft`` to use MKL FFT routines. @@ -422,7 +612,7 @@ Although the library can run without Intel-optimized NumPy and SciPy, maximum pe SciPy built with Intel’s Math Kernel Library (MKL) alongside Intel Python. .. note:: - `mkl_fft` is not supported on macOS + `mkl_fft` is not supported on macOS. .. warning:: @@ -442,8 +632,9 @@ SciPy built with Intel’s Math Kernel Library (MKL) alongside Intel Python. Alternatively, you can install ``pyFFTW`` directly with ``conda``, since the updated recipe is already available and works without any manual adjustments. -Numba* ------- + +Numba +----- Although we always strive to write code for forward and adjoint operators that takes advantage of the perks of NumPy and SciPy (e.g., broadcasting, ufunc), in some case we may end up using for loops that may lead to poor performance. In those cases we may decide to implement alternative (optional) @@ -455,26 +646,27 @@ always available implementation to the Numba implementation by simply providing additional input parameter to the operator ``engine="numba"``. This is for example the case in the :py:class:`pylops.signalprocessing.Radon2D`. -If interested to use Numba backend from ``conda``, you will need to manually install it: +If interested to use Numba backend, install it via: -.. code-block:: bash +.. tab-set:: - >> conda install numba + .. tab-item:: :iconify:`devicon:anaconda` conda -It is also advised to install the additional package -`icc_rt `_ to use -optimised transcendental functions as compiler intrinsics. + .. code-block:: bash -.. code-block:: bash + >> conda install numba + >> conda install --channel numba icc_rt # optional - >> conda install --channel numba icc_rt + .. tab-item:: :iconify:`material-icon-theme:uv` uv -Through ``pip`` the equivalent would be: + .. code-block:: bash -.. code-block:: bash + >> uv add numba + >> uv add icc_rt # optional - >> pip install numba - >> pip install icc_rt +Note that it is also advised to install the additional package +`icc_rt `_ to use +optimised transcendental functions as compiler intrinsics. However, it is important to note that ``icc_rt`` will only be identified by Numba if ``LD_LIBRARY_PATH`` is properly set. @@ -504,68 +696,85 @@ PyMC and PyTensor ----------------- `PyTensor `_ is used to allow seamless integration between PyLops and `PyMC `_ operators. -Install both of them via ``conda`` with: +Install both of them with: -.. code-block:: bash +.. tab-set:: - conda install -c conda-forge pytensor pymc + .. tab-item:: :iconify:`devicon:anaconda` conda -or via ``pip`` with + .. code-block:: bash -.. code-block:: bash + >> conda install -c conda-forge pytensor pymc - >> pip install pytensor pymc + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add pytensor pymc .. warning:: OSX users may experience a ``CompileError`` error when using PyTensor. This can be solved by adding ``pytensor.config.gcc__cxxflags = "-Wno-c++11-narrowing"`` after ``import pytensor``. -PyWavelets* ------------ + +PyWavelets +---------- `PyWavelets `_ is used to implement the wavelet operators. -Install it via ``conda`` with: +Install it via: -.. code-block:: bash +.. tab-set:: - >> conda install pywavelets + .. tab-item:: :iconify:`devicon:anaconda` conda -or via ``pip`` with + .. code-block:: bash -.. code-block:: bash + >> conda install pywavelets + + .. tab-item:: :iconify:`material-icon-theme:uv` uv - >> pip install PyWavelets + .. code-block:: bash + >> uv add PyWavelets -scikit-fmm* ------------ + +scikit-fmm +---------- `scikit-fmm `_ is a library which implements the fast marching method. It is used in PyLops to compute traveltime tables in the initialization of :py:class:`pylops.waveeqprocessing.Kirchhoff` when choosing ``mode="eikonal"``. As this may not be of interest for many users, this library has not been added -to the mandatory requirements of PyLops. With ``conda``, install it via +to the mandatory requirements of PyLops. Install it via -.. code-block:: bash +.. tab-set:: - >> conda install --channel conda-forge scikit-fmm + .. tab-item:: :iconify:`devicon:anaconda` conda -or with ``pip`` via + .. code-block:: bash -.. code-block:: bash + >> conda install --channel conda-forge scikit-fmm - >> pip install scikit-fmm + .. tab-item:: :iconify:`material-icon-theme:uv` uv + .. code-block:: bash -SPGL1* ------- + >> uv add scikit-fmm + + +SPGL1 +----- `SPGL1 `_ is used to solve sparsity-promoting basis pursuit, basis pursuit denoise, and Lasso problems in :py:func:`pylops.optimization.sparsity.SPGL1` solver. -Install it via ``pip`` with: +Install it via: -.. code-block:: bash +.. tab-set:: + + .. tab-item:: :iconify:`material-icon-theme:uv` uv - >> pip install spgl1 + .. code-block:: bash + + >> uv add spgl1 Sympy @@ -573,38 +782,47 @@ Sympy This library is used to implement the ``describe`` method, which transforms PyLops operators into their mathematical expression. -Install it via ``conda`` with: +Install it via: -.. code-block:: bash +.. tab-set:: - >> conda install sympy + .. tab-item:: :iconify:`devicon:anaconda` conda -or via ``pip`` with + .. code-block:: bash -.. code-block:: bash + >> conda install sympy - >> pip install sympy + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add sympy Torch ----- `Torch `_ is used to allow seamless integration between PyLops and PyTorch operators. -Install it via ``conda`` with: +Install it via: -.. code-block:: bash +.. tab-set:: - >> conda install -c pytorch pytorch + .. tab-item:: :iconify:`devicon:anaconda` conda -or via ``pip`` with + .. code-block:: bash -.. code-block:: bash + >> conda install -c pytorch pytorch - >> pip install torch + .. tab-item:: :iconify:`material-icon-theme:uv` uv + + .. code-block:: bash + + >> uv add torch .. _OptionalGPU: + Optional Dependencies for GPU ============================= PyLops will automatically diff --git a/docs/source/papers.rst b/docs/source/papers.rst index c4774e8b7..0637a76f3 100755 --- a/docs/source/papers.rst +++ b/docs/source/papers.rst @@ -1,7 +1,8 @@ .. _papers: -Papers using PyLops -=================== +|:bookmark:| Papers using PyLops +################################ + This section lists various conference abstracts and papers using the PyLops framework. If you publish a paper using PyLops, `we'd love to hear about it `_! diff --git a/docs/source/roadmap.rst b/docs/source/roadmap.rst deleted file mode 100755 index 968333465..000000000 --- a/docs/source/roadmap.rst +++ /dev/null @@ -1,109 +0,0 @@ -.. _roadmap: - -.. role:: strike - :class: strike - -Roadmap -======= - -This roadmap is aimed at providing an high-level overview on the bug fixes, improvements -and new functionality that are planned for the PyLops library. - -Any of the fixes/additions mentioned in the roadmap are directly linked to a *Github Issue* -that provides more details onto the reason and initial thoughts for the implementation of -such a fix/addition. - -:strike:`Striked tasks` have been completed and related github issue closed -with more details regarding how this task has been carried out. - -Library structure ------------------ - -* Create a child repository and python library called ``geolops`` (just a suggestion) - where geoscience-related operators and examples are moved across, keeping the core - ``pylops`` library very generic and multi-purpose - - `Issue #22 `_. - - -Code cleaning -------------- - -* :strike:`Change all ``np.flatten()``` :strike:`into ``np.ravel()``` - - `Issue #24 `_. -* Fix all ``if: return ... else: ...`` statements to enforce a single return - with the same number of outputs - - `Issue #26 `_. -* Protected attributes and @property attributes in linear operator classes? - - `Issue #27 `_. - - -Code optimization ------------------ - -* Investigate speed-up given by decorating ``_matvec`` and ``_rmatvec`` methods with - `numba `_ ``@jit`` and ``@stencil`` decorators - - `Issue #23 `_. - -* :strike:`Replace np.fft.* routines used in several submodules with double engine, - numpy and pyFFTW` - - `Issue #20 `_. - - -Modules -------- - -avo -~~~ - -* Add possibility to choose different damping factors for each elastic parameter to invert for in - :py:class:`pylops.avo.prestack.PrestackInversion` - `Issue #25 `_. - -basicoperators -~~~~~~~~~~~~~~ - -* :strike:`Create Kronecker operator` - - `Issue #28 `_. - -* :strike:`Deal with edges in FirstDerivative and SecondDerivative operators` - - `Issue #34 `_. - -optimization -~~~~~~~~~~~~ - -* :strike:`Sparse solvers` - - `Issue #44 `_. - - -signalprocessing -~~~~~~~~~~~~~~~~ - -* :strike:`Compare performance in FTT operator of performing - np.swap+np.fft.fft(..., axis=-1) versus np.fft.fft(..., axis=chosen)` - - `Issue #33 `_. - -* :strike:`Add Wavelet operator performing the wavelet transform` - - `Issue #21 `_. - -* :strike:`Fredholm1 operator applying Fredholm integrals - of first kind` - `Issue #31 `_. - -* :strike:`Fredholm2 operators applying Fredholm integrals - of second kind` - `Issue #31 `_. - -utils -~~~~~ - -Nothing so far - - -waveeqprocessing -~~~~~~~~~~~~~~~~ - -* :strike:`numpy.matmul as a way to speed up integral computation (i.e., inner for loop) - in MDC operator` - `Issue #32 `_. - -* ``NMO`` operator performing NMO modelling - - `Issue #29 `_. - -* :strike:`WavefieldDecomposition operator performing acoustic wavefield separation - by inversion` - `Issue #30 `_. diff --git a/environment-dev-arm.yml b/environment-dev-arm.yml index 4b5c80d1a..69dcbf6b6 100644 --- a/environment-dev-arm.yml +++ b/environment-dev-arm.yml @@ -22,8 +22,6 @@ dependencies: - numba - pre-commit - autopep8 - - isort - - black - pip: - torch - devito @@ -32,12 +30,14 @@ dependencies: - spgl1 - jax - pytest-runner - - setuptools_scm - - pydata-sphinx-theme - - pooch + - shibuya + - sphinx-design - sphinx-gallery + - sphinx-iconify + - pooch - nbsphinx - sphinxemoji - image - - flake8 + - ruff - mypy + - coverage diff --git a/environment-dev-gpu.yml b/environment-dev-gpu.yml index cb19a0b57..44a01a1c2 100644 --- a/environment-dev-gpu.yml +++ b/environment-dev-gpu.yml @@ -20,17 +20,17 @@ dependencies: - icc_rt - pre-commit - autopep8 - - isort - - black - pip: - torch - pytest-runner - - setuptools_scm - - pydata-sphinx-theme - - pooch + - shibuya + - sphinx-design - sphinx-gallery + - sphinx-iconify + - pooch - nbsphinx - sphinxemoji - image - - flake8 + - ruff - mypy + - coverage diff --git a/environment-dev-intel-mkl.yml b/environment-dev-intel-mkl.yml index 7ce56bd68..053787c2d 100644 --- a/environment-dev-intel-mkl.yml +++ b/environment-dev-intel-mkl.yml @@ -14,6 +14,7 @@ dependencies: - sympy - pymc>=5 - pytensor + - astra-toolbox>=2.3.0 - matplotlib - ipython - pytest @@ -23,8 +24,6 @@ dependencies: - icc_rt - pre-commit - autopep8 - - isort - - black - mkl_fft - pip: - torch @@ -34,12 +33,14 @@ dependencies: - spgl1 - jax - pytest-runner - - setuptools_scm - - pydata-sphinx-theme - - pooch + - shibuya + - sphinx-design - sphinx-gallery + - sphinx-iconify + - pooch - nbsphinx - sphinxemoji - image - - flake8 + - ruff - mypy + - coverage diff --git a/environment-dev.yml b/environment-dev.yml index f719e8d99..4689e4dba 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -23,8 +23,6 @@ dependencies: - icc_rt - pre-commit - autopep8 - - isort - - black - pip: - torch - devito @@ -33,12 +31,14 @@ dependencies: - spgl1 - jax - pytest-runner - - setuptools_scm - - pydata-sphinx-theme - - pooch + - shibuya + - sphinx-design - sphinx-gallery + - sphinx-iconify + - pooch - nbsphinx - sphinxemoji - image - - flake8 + - ruff - mypy + - coverage diff --git a/examples/README.txt b/examples/README.txt index 5d98186bf..6c3ef5c4f 100755 --- a/examples/README.txt +++ b/examples/README.txt @@ -1,6 +1,6 @@ .. _general_examples: -Gallery -------- +|:framed_picture:| Gallery +-------------------------- Below is a gallery of examples which use PyLops operators and utilities. diff --git a/examples/plot_avo.py b/examples/plot_avo.py index a3a306361..a2f121b27 100755 --- a/examples/plot_avo.py +++ b/examples/plot_avo.py @@ -1,6 +1,6 @@ r""" AVO modelling -=================== +============= This example shows how to create pre-stack angle gathers using the :py:class:`pylops.avo.avo.AVOLinearModelling` operator. """ diff --git a/examples/plot_bayeslinearregr.py b/examples/plot_bayeslinearregr.py index 42417eb15..37ca373b2 100644 --- a/examples/plot_bayeslinearregr.py +++ b/examples/plot_bayeslinearregr.py @@ -88,7 +88,7 @@ # Let's plot the best fitting line for the case of noise free and noisy data fig, ax = plt.subplots(figsize=(8, 4)) for est, est_label, c in zip( - [x, x_mle, x_map], ["True", "MLE", "MAP"], ["k", "C0", "C1"] + [x, x_mle, x_map], ["True", "MLE", "MAP"], ["k", "C0", "C1"], strict=True ): ax.plot( np.array([t.min(), t.max()]), @@ -219,7 +219,7 @@ ax=ax, ) for est, est_label, c in zip( - [x, x_mle, x_map], ["True", "MLE", "MAP"], ["k", "C0", "C1"] + [x, x_mle, x_map], ["True", "MLE", "MAP"], ["k", "C0", "C1"], strict=True ): ax.plot( np.array([t.min(), t.max()]), diff --git a/examples/plot_derivative.py b/examples/plot_derivative.py index 19d453d75..7e6fd6ef6 100644 --- a/examples/plot_derivative.py +++ b/examples/plot_derivative.py @@ -12,6 +12,7 @@ *Optimization* tutorial, these operators will be used as part of the regularization term to obtain a smooth solution. """ + import matplotlib.pyplot as plt import numpy as np @@ -223,9 +224,9 @@ nvertlayers = len(vertlayers) A = 1500 * np.ones((nz, nx)) -for top, base in zip(horlayers[:-1], horlayers[1:]): +for top, base in zip(horlayers[:-1], horlayers[1:], strict=True): A[top:base] = np.random.normal(2000, 200) -for top, base in zip(vertlayers[:-1], vertlayers[1:]): +for top, base in zip(vertlayers[:-1], vertlayers[1:], strict=True): A[horlayers[-1] :, top:base] = np.random.normal(2000, 200) v = np.zeros((2, nz, nx)) diff --git a/examples/plot_mri.py b/examples/plot_mri.py new file mode 100755 index 000000000..608bdbed8 --- /dev/null +++ b/examples/plot_mri.py @@ -0,0 +1,104 @@ +r""" +MRI modelling +============= +This example shows how to use the :py:class:`pylops.medical.mri.MRI2D` operator +to create K-space undersampled MRI data. +""" +import matplotlib.pyplot as plt +import numpy as np + +import pylops + +plt.close("all") +np.random.seed(0) + +############################################################################### +# Let"s start by loading the Shepp-Logan phantom model. +x = np.load("../testdata/optimization/shepp_logan_phantom.npy") +x = x / x.max() +nx, ny = x.shape + +############################################################################### +# Next, we create a mask to simulate undersampling in K-space and apply it to +# the phantom model. + +# Passing mask as array +mask = np.zeros((nx, ny)) +mask[:, np.random.randint(0, ny, 2 * ny // 3)] = 1 +mask[:, ny // 2 - 20 : ny // 2 + 10] = 1 + +Mop = pylops.medical.MRI2D(dims=(nx, ny), mask=mask) + +d = Mop @ x +x_adj = Mop.H @ d + +fig, axs = plt.subplots(1, 3, figsize=(12, 5)) +axs[0].imshow(x, cmap="gray", vmin=0, vmax=1) +axs[0].set_title("Original Image") +axs[1].imshow(np.abs(d), cmap="jet", vmin=0, vmax=1) +axs[1].set_title("K-space Data") +axs[2].imshow(x_adj.real, cmap="gray", vmin=0, vmax=1) +axs[2].set_title("Adjoint Reconstruction") +fig.tight_layout() + +############################################################################### +# Alternatively, we can create the same mask by specifying a sampling pattern +# using the ``mask`` keyword argument. Here, we create a ``vertical-reg`` mask +# that samples K-space lines in the vertical direction with a regular pattern. + +# Vertical uniform with center +Mop = pylops.medical.MRI2D( + dims=(nx, ny), mask="vertical-reg", nlines=ny // 2, perc_center=0.0 +) + +d = Mop @ x +x_adj = (Mop.H @ d).reshape(nx, ny) + +fig, axs = plt.subplots(1, 3, figsize=(12, 5)) +axs[0].imshow(x, cmap="gray", vmin=0, vmax=1) +axs[0].set_title("Original Image") +axs[1].imshow(np.abs(Mop.ROp.H @ d).reshape(nx, ny), cmap="jet", vmin=0, vmax=1) +axs[1].set_title("K-space Data") +axs[2].imshow(x_adj.real, cmap="gray", vmin=0, vmax=1) +axs[2].set_title("Adjoint Reconstruction") +fig.tight_layout() + +############################################################################### +# Similarly, we can create a ``vertical-uni`` mask that randomly samples +# K-space lines in the vertical direction. + +# Vertical uniform with center +Mop = pylops.medical.MRI2D( + dims=(nx, ny), mask="vertical-uni", nlines=40, perc_center=0.1 +) + +d = Mop @ x +x_adj = (Mop.H @ d).reshape(nx, ny) + +fig, axs = plt.subplots(1, 3, figsize=(12, 5)) +axs[0].imshow(x, cmap="gray", vmin=0, vmax=1) +axs[0].set_title("Original Image") +axs[1].imshow(np.abs(Mop.ROp.H @ d).reshape(nx, ny), cmap="jet", vmin=0, vmax=1) +axs[1].set_title("K-space Data") +axs[2].imshow(x_adj.real, cmap="gray", vmin=0, vmax=1) +axs[2].set_title("Adjoint Reconstruction") +fig.tight_layout() + +############################################################################### +# Finally, we can create a sampling pattern with radial lines using the +# ``radial-uni`` (or ``radial-reg``) option. + +# Radial uniform +Mop = pylops.medical.MRI2D(dims=(nx, ny), mask="radial-uni", nlines=40) + +d = Mop @ x +x_adj = (Mop.H @ d).reshape(nx, ny) + +fig, axs = plt.subplots(1, 3, figsize=(12, 5)) +axs[0].imshow(x, cmap="gray", vmin=0, vmax=1) +axs[0].set_title("Original Image") +axs[1].imshow(np.abs(Mop.ROp.H @ d).reshape(nx, ny), cmap="jet", vmin=0, vmax=1) +axs[1].set_title("K-space Data") +axs[2].imshow(x_adj.real, cmap="gray", vmin=0, vmax=1) +axs[2].set_title("Adjoint Reconstruction") +fig.tight_layout() diff --git a/examples/plot_nmo.py b/examples/plot_nmo.py index 80806fac8..aee6f1f38 100644 --- a/examples/plot_nmo.py +++ b/examples/plot_nmo.py @@ -7,6 +7,9 @@ We will perform classic NMO using an operator created from scratch, as well as using the :py:class:`pylops.Spread` operator. """ + +# flake8: noqa: B905 + from math import floor from time import time @@ -199,7 +202,7 @@ def nmo_forward(data, taxis, haxis, vels_rms): nmo_forward(data, t, x, vel_t) end = time() -print(f"Ran in {1e6*(end-start):.0f} μs") +print(f"Ran in {1e6 * (end - start):.0f} μs") ############################################################################### @@ -379,7 +382,7 @@ def create_tables(taxis, haxis, vels_rms): SpreadNMO @ data end = time() -print(f"Ran in {1e6*(end-start):.0f} μs") +print(f"Ran in {1e6 * (end - start):.0f} μs") ############################################################################### # Note that since v2.0, we do not need to pass a flattened array. Consequently, # the output will not be flattened, but will have ``SpreadNMO.dimsd`` as shape. diff --git a/examples/plot_pwdslope.py b/examples/plot_pwdslope.py index 08df93765..8916b6a5f 100644 --- a/examples/plot_pwdslope.py +++ b/examples/plot_pwdslope.py @@ -164,22 +164,27 @@ def create_colorbar(im, ax): ############################################################################### # Let's now compute the PWD slopes along both ``y`` and ``x`` directions. -pwd_slope_fun = partial( - pwd_slope_estimate, +pwd_slope3d_y = pwd_slope_estimate( + sigmoid3d.transpose(1, 2, 0), niter=5, liter=20, order=2, - nsmooth=(12, 12), + nsmooth=(12, 12, 5), damp=6e-4, smoothing="triangle", -) -pwd_slope3d_y = np.concatenate( - [pwd_slope_fun(sigmoid3d[i])[None].astype(np.float32) for i in range(ny)] -) + axis=1, +).transpose(2, 0, 1) -pwd_slope3d_x = np.concatenate( - [pwd_slope_fun(sigmoid3d[:, :, i].T)[None].astype(np.float32) for i in range(nx)] -).transpose(2, 1, 0) +pwd_slope3d_x = pwd_slope_estimate( + sigmoid3d.transpose(1, 2, 0), + niter=5, + liter=20, + order=2, + nsmooth=(12, 5, 12), + damp=6e-4, + smoothing="triangle", + axis=2, +).transpose(2, 0, 1) ############################################################################### v = np.max(np.abs(pwd_slope3d_y)) @@ -209,7 +214,8 @@ def create_colorbar(im, ax): fig.tight_layout() ############################################################################### -# Let's now compute the PWD slopes along both ``y`` and ``x`` directions. +# Finally we perform structure-aligned smoothing along both ``y`` and ``x`` +# directions. PWSmoother2D_ = partial(PWSmoother2D, radius=radius, alpha=alpha, dtype="float32") noise3d = np.random.uniform(-1.0, 1.0, size=(ny, nz, nx)).astype(np.float32) diff --git a/examples/plot_restriction.py b/examples/plot_restriction.py index 830075608..f0e0feaf4 100644 --- a/examples/plot_restriction.py +++ b/examples/plot_restriction.py @@ -47,20 +47,41 @@ # We then create the restriction and interpolation operators and display # the original signal as well as the subsampled signal. -Rop = pylops.Restriction(nt, iava, dtype="float64") +Rop = pylops.Restriction( + nt, + iava, + dtype="float64", +) NNop, iavann = pylops.signalprocessing.Interp( - nt, iava + 0.4, kind="nearest", dtype="float64" + nt, + iava + 0.4, + kind="nearest", + dtype="float64", ) LIop, iavali = pylops.signalprocessing.Interp( - nt, iava + 0.4, kind="linear", dtype="float64" + nt, + iava + 0.4, + kind="linear", + dtype="float64", ) SIop, iavasi = pylops.signalprocessing.Interp( - nt, iava + 0.4, kind="sinc", dtype="float64" + nt, + iava + 0.4, + kind="sinc", + dtype="float64", +) +CuSIop, iavacusi = pylops.signalprocessing.Interp( + nt, + iava + 0.4, + kind="cubic_spline", + dtype="float64", ) + y = Rop * x ynn = NNop * x yli = LIop * x ysi = SIop * x +ycusi = CuSIop * x ymask = Rop.mask(x) # Visualize data @@ -70,6 +91,7 @@ plt.plot(iavann, ynn, ".r", ms=25, label="NN interp samples") plt.plot(iavali, yli, ".m", ms=20, label="Linear interp samples") plt.plot(iavasi, ysi, ".y", ms=15, label="Sinc interp samples") +plt.plot(iavasi, ysi, "cyan", linestyle="none", marker="D", ms=4, label="Cubic Spline interp samples") plt.legend(loc="right") plt.title("Data restriction") @@ -79,6 +101,7 @@ subax.plot(iavann, ynn, ".r", ms=25) subax.plot(iavali, yli, ".m", ms=20) subax.plot(iavasi, ysi, ".y", ms=15) +subax.plot(iavasi, ysi, "cyan", linestyle="none", marker="D", ms=4) subax.set_xlim([120, 127]) subax.set_ylim([-0.5, 0.5]) plt.tight_layout() diff --git a/examples/plot_slopeest.py b/examples/plot_slopeest.py index 22cf90963..3d9ba4d2a 100755 --- a/examples/plot_slopeest.py +++ b/examples/plot_slopeest.py @@ -57,7 +57,7 @@ cb = fig.colorbar( iax, ticks=MultipleLocator(30), - format=FuncFormatter(lambda x, pos: "{:.0f}°".format(x)), + format=FuncFormatter(lambda x, pos: f"{x:.0f}°"), cax=cax, orientation="vertical", ) @@ -180,7 +180,7 @@ def rgb2gray(rgb): cb = fig.colorbar( im, ticks=MultipleLocator(30), - format=FuncFormatter(lambda x, pos: "{:.0f}°".format(x)), + format=FuncFormatter(lambda x, pos: f"{x:.0f}°"), cax=cax, orientation="vertical", ) @@ -191,7 +191,7 @@ def rgb2gray(rgb): cb = fig.colorbar( im, ticks=MultipleLocator(30), - format=FuncFormatter(lambda x, pos: "{:.0f}°".format(x)), + format=FuncFormatter(lambda x, pos: f"{x:.0f}°"), cax=cax, orientation="vertical", ) @@ -249,7 +249,7 @@ def rgb2gray(rgb): cb = fig.colorbar( im, ticks=MultipleLocator(30), - format=FuncFormatter(lambda x, pos: "{:.0f}°".format(x)), + format=FuncFormatter(lambda x, pos: f"{x:.0f}°"), cax=cax, orientation="vertical", ) @@ -260,7 +260,7 @@ def rgb2gray(rgb): cb = fig.colorbar( im, ticks=MultipleLocator(30), - format=FuncFormatter(lambda x, pos: "{:.0f}°".format(x)), + format=FuncFormatter(lambda x, pos: f"{x:.0f}°"), cax=cax, orientation="vertical", ) diff --git a/examples/plot_smoothing3d.py b/examples/plot_smoothing3d.py new file mode 100755 index 000000000..b4d04dff2 --- /dev/null +++ b/examples/plot_smoothing3d.py @@ -0,0 +1,48 @@ +""" +3D Smoothing +============ + +This example shows how to use the :py:class:`pylops.SmoothingND` operator +to smooth a three-dimensional input signal along all axes. + +""" +import matplotlib.pyplot as plt +import numpy as np + +import pylops + +plt.close("all") + +############################################################################### +# Define the input parameters: number of samples of input signal (``N1``, +# ``N2``, and ``N3``) and lenght of the smoothing filter regression coefficients +# (:math:`n_{smooth,1}`, :math:`n_{smooth,2}` and :math:`n_{smooth,3}`). +# The input signal is one at the center and zero elsewhere. +N1, N2, N3 = 11, 21, 15 +nsmooth1, nsmooth2, nsmooth3 = 5, 7, 3 +A = np.zeros((N1, N2, N3)) +A[5, 10, 7] = 1 + +Sop = pylops.SmoothingND( + nsmooth=[nsmooth1, nsmooth2, nsmooth3], dims=[N1, N2, N3], dtype="float64" +) +B = Sop * A + +############################################################################### +# After applying smoothing, we will also try to invert it. +Aest = Sop.div(B.ravel(), niter=2000).reshape(Sop.dims) + +fig, axs = plt.subplots(1, 3, figsize=(10, 3)) +im = axs[0].imshow(A[..., 7], interpolation="nearest", vmin=0, vmax=1) +axs[0].axis("tight") +axs[0].set_title("Model") +plt.colorbar(im, ax=axs[0]) +im = axs[1].imshow(B[..., 7], interpolation="nearest", vmin=0, vmax=0.1) +axs[1].axis("tight") +axs[1].set_title("Data") +plt.colorbar(im, ax=axs[1]) +im = axs[2].imshow(Aest[..., 7], interpolation="nearest", vmin=0, vmax=1) +axs[2].axis("tight") +axs[2].set_title("Estimated model") +plt.colorbar(im, ax=axs[2]) +plt.tight_layout() diff --git a/examples/plot_wavelet.py b/examples/plot_wavelet.py index 4c410112c..ccfeb3faa 100644 --- a/examples/plot_wavelet.py +++ b/examples/plot_wavelet.py @@ -5,6 +5,7 @@ :py:class:`pylops.DWT2D`, and :py:class:`pylops.DWTND` operators to perform 1-, 2-, and N-dimensional DWT. """ + import matplotlib.pyplot as plt import numpy as np @@ -21,7 +22,10 @@ t = np.arange(nt) * dt freqs = [10, 7, 9] amps = [1, -2, 0.5] -x = np.sum([amp * np.sin(2 * np.pi * f * t) for (f, amp) in zip(freqs, amps)], axis=0) +x = np.sum( + [amp * np.sin(2 * np.pi * f * t) for (f, amp) in zip(freqs, amps, strict=True)], + axis=0, +) Wop = pylops.signalprocessing.DWT(nt, wavelet="dmey", level=5) y = Wop * x diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 000000000..423aed97f --- /dev/null +++ b/noxfile.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +import shutil +from pathlib import Path + +import nox + +DIR = Path(__file__).parent.resolve() + +nox.options.default_venv_backend = "uv" +nox.options.sessions = ["lint", "tests"] + + +@nox.session +def lint(session): + """Run the Ruff linter.""" + session.install("ruff") + session.run( + "ruff", + "check", + "docs/source", + "examples/", + "pylops/", + "pytests/", + "tutorials/", + ) + + +@nox.session(python=["3.10", "3.11", "3.12", "3.13", "3.14"]) +def tests(session: nox.Session) -> None: + """ + Run unit tests. + """ + session.install("-e", ".[advanced,deep,stat]") + session.install("--group", "dev") + session.run("pytest", *session.posargs) + + +@nox.session(python=["3.10", "3.11", "3.12", "3.13", "3.14"]) +def build(session: nox.Session) -> None: + """ + Build an SDist and wheel. + """ + + build_path = DIR.joinpath("build") + if build_path.exists(): + shutil.rmtree(build_path) + + session.install("build") + session.run("python", "-m", "build") diff --git a/pylops/_torchoperator.py b/pylops/_torchoperator.py index 55527eb90..6249c9484 100644 --- a/pylops/_torchoperator.py +++ b/pylops/_torchoperator.py @@ -25,7 +25,8 @@ def forward(ctx, x, forw, adj, device, devicetorch): warnings.warn( "PyLops operator will be applied on the cpu " "whilst the input torch vector is on " - "%s, this may lead to poor performance" % ctx.devicetorch + "%s, this may lead to poor performance" % ctx.devicetorch, + stacklevel=2, ) # prepare input diff --git a/pylops/avo/avo.py b/pylops/avo/avo.py index 71eccfe9b..ed907a11f 100644 --- a/pylops/avo/avo.py +++ b/pylops/avo/avo.py @@ -9,17 +9,15 @@ "AVOLinearModelling", ] -from typing import List, Optional, Tuple, Union import numpy as np -import numpy.typing as npt from numpy import cos, sin, tan from pylops import LinearOperator from pylops.utils._internal import _value_or_sized_to_tuple from pylops.utils.backend import get_array_module from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tavolinearization def zoeppritz_scattering( @@ -29,7 +27,7 @@ def zoeppritz_scattering( vp0: float, vs0: float, rho0: float, - theta1: Union[float, npt.ArrayLike], + theta1: float | NDArray, ) -> NDArray: r"""Zoeppritz solution. @@ -145,7 +143,7 @@ def zoeppritz_element( vp0: float, vs0: float, rho0: float, - theta1: Union[float, NDArray], + theta1: float | NDArray, element: str = "PdPu", ) -> NDArray: """Single element of Zoeppritz solution. @@ -209,7 +207,7 @@ def zoeppritz_pp( vp0: float, vs0: float, rho0: float, - theta1: Union[float, NDArray], + theta1: float | NDArray, ) -> NDArray: """PP reflection coefficient from the Zoeppritz scattering matrix. @@ -250,13 +248,13 @@ def zoeppritz_pp( def approx_zoeppritz_pp( - vp1: Union[List, Tuple, npt.ArrayLike], - vs1: Union[List, Tuple, npt.ArrayLike], - rho1: Union[List, Tuple, npt.ArrayLike], - vp0: Union[List, Tuple, npt.ArrayLike], - vs0: Union[List, Tuple, npt.ArrayLike], - rho0: Union[List, Tuple, npt.ArrayLike], - theta1: Union[float, NDArray], + vp1: list | tuple | NDArray, + vs1: list | tuple | NDArray, + rho1: list | tuple | NDArray, + vp0: list | tuple | NDArray, + vs0: list | tuple | NDArray, + rho0: list | tuple | NDArray, + theta1: float | NDArray, ) -> NDArray: """PP reflection coefficient from the approximate Zoeppritz equation. @@ -335,10 +333,10 @@ def approx_zoeppritz_pp( def akirichards( - theta: npt.ArrayLike, - vsvp: Union[float, NDArray], + theta: NDArray, + vsvp: float | NDArray, n: int = 1, -) -> Tuple[NDArray, NDArray, NDArray]: +) -> tuple[NDArray, NDArray, NDArray]: r"""Three terms Aki-Richards approximation. Computes the coefficients of the of three terms Aki-Richards approximation @@ -409,10 +407,10 @@ def akirichards( def fatti( - theta: npt.ArrayLike, - vsvp: Union[float, NDArray], + theta: NDArray, + vsvp: float | NDArray, n: int = 1, -) -> Tuple[NDArray, NDArray, NDArray]: +) -> tuple[NDArray, NDArray, NDArray]: r"""Three terms Fatti approximation. Computes the coefficients of the three terms Fatti approximation @@ -485,10 +483,10 @@ def fatti( def ps( - theta: npt.ArrayLike, - vsvp: Union[float, NDArray], + theta: NDArray, + vsvp: float | NDArray, n: int = 1, -) -> Tuple[NDArray, NDArray, NDArray]: +) -> tuple[NDArray, NDArray, NDArray]: r"""PS reflection coefficient Computes the coefficients for the PS approximation @@ -647,10 +645,10 @@ class AVOLinearModelling(LinearOperator): def __init__( self, theta: NDArray, - vsvp: Union[float, NDArray] = 0.5, + vsvp: float | NDArray = 0.5, nt0: int = 1, - spatdims: Optional[Union[int, Tuple[int]]] = None, - linearization: str = "akirich", + spatdims: int | tuple[int] | None = None, + linearization: Tavolinearization = "akirich", dtype: DTypeLike = "float64", name: str = "A", ) -> None: @@ -672,14 +670,16 @@ def __init__( "%s not an available linearization..." % linearization ) self.npars = len(Gs) - dims: Tuple[int, ...] = (self.nt0, self.npars) - dimsd: Tuple[int, ...] = (self.nt0, self.ntheta) + dims: tuple[int, ...] = (self.nt0, self.npars) + dimsd: tuple[int, ...] = (self.nt0, self.ntheta) if spatdims is not None: dims += self.spatdims dimsd += self.spatdims super().__init__(dtype=np.dtype(dtype), dims=dims, dimsd=dimsd, name=name) - self.G = self.ncp.concatenate([gs.T[:, self.ncp.newaxis] for gs in Gs], axis=1) + self.G = self.ncp.concatenate( + [gs.astype(dtype).T[:, self.ncp.newaxis] for gs in Gs], axis=1 + ) # add dimensions to G to account for horizonal axes for _ in range(len(self.spatdims)): self.G = self.G[..., np.newaxis] diff --git a/pylops/avo/poststack.py b/pylops/avo/poststack.py index 1b58ad60b..27394ba59 100644 --- a/pylops/avo/poststack.py +++ b/pylops/avo/poststack.py @@ -3,10 +3,9 @@ "PoststackInversion", ] -from typing import Optional, Tuple, Union +from typing import Literal import numpy as np -import numpy.typing as npt from scipy.sparse.linalg import lsqr from pylops import ( @@ -42,9 +41,9 @@ def _PoststackLinearModelling( _MatrixMult=MatrixMult, _Convolve1D=Convolve1D, _FirstDerivative=FirstDerivative, - args_MatrixMult: Optional[dict] = None, - args_Convolve1D: Optional[dict] = None, - args_FirstDerivative: Optional[dict] = None, + args_MatrixMult: dict | None = None, + args_Convolve1D: dict | None = None, + args_FirstDerivative: dict | None = None, ): """Post-stack linearized seismic modelling operator. @@ -72,9 +71,10 @@ def _PoststackLinearModelling( dtype = wav.dtype # ensure wav.dtype rules that of operator if len(wav.shape) == 2 and wav.shape[0] != nt0: - raise ValueError("Provide 1d wavelet or 2d wavelet composed of nt0 " "wavelets") + msg = "Must provide 1d wavelet or 2d wavelet composed of nt0 wavelets" + raise ValueError(msg) - spatdims: Union[int, ShapeLike] + spatdims: int | ShapeLike # organize dimensions if spatdims is None: dims = (nt0,) @@ -118,14 +118,14 @@ def _PoststackLinearModelling( offset=len(wav) // 2, axis=0, dtype=dtype, - **args_Convolve1D + **args_Convolve1D, ) else: Cop = _MatrixMult( nonstationary_convmtx(wav, nt0, hc=wav.shape[1] // 2, pad=(nt0, nt0)), otherdims=spatdims, dtype=dtype, - **args_MatrixMult + **args_MatrixMult, ) # Create derivative operator Dop = _FirstDerivative( @@ -136,13 +136,13 @@ def _PoststackLinearModelling( def PoststackLinearModelling( - wav: npt.ArrayLike, + wav: NDArray, nt0: int, - spatdims: Optional[Union[int, ShapeLike]] = None, + spatdims: int | ShapeLike | None = None, explicit: bool = False, sparse: bool = False, - kind: str = "centered", - name: Optional[str] = None, + kind: Literal["centered", "forward"] = "centered", + name: str | None = None, ) -> LinearOperator: r"""Post-stack linearized seismic modelling operator. @@ -173,7 +173,7 @@ def PoststackLinearModelling( Create a sparse matrix (``True``) or dense (``False``) when ``explicit=True`` kind : :obj:`str`, optional - Derivative kind (``forward`` or ``centered``). + Derivative kind (``centered`` or ``forward``). name : :obj:`str`, optional .. versionadded:: 2.0.0 @@ -224,16 +224,16 @@ def PoststackLinearModelling( def PoststackInversion( data: NDArray, - wav: npt.ArrayLike, - m0: Optional[NDArray] = None, + wav: NDArray, + m0: NDArray | None = None, explicit: bool = False, simultaneous: bool = False, - epsI: Optional[float] = None, - epsR: Optional[float] = None, + epsI: float | None = None, + epsR: float | None = None, dottest: bool = False, - epsRL1: Optional[float] = None, - **kwargs_solver -) -> Tuple[NDArray, NDArray]: + epsRL1: float | None = None, + **kwargs_solver, +) -> tuple[NDArray, NDArray]: r"""Post-stack linearized seismic inversion. Invert post-stack seismic operator to retrieve an elastic parameter of @@ -322,9 +322,10 @@ def PoststackInversion( # check if background model and data have same shape if m0 is not None and data.shape != m0.shape: - raise ValueError("data and m0 must have same shape") + msg = "data and m0 must have the same shape" + raise ValueError(msg) - nspat: Optional[Union[int, ShapeLike]] + nspat: int | ShapeLike | None # find out dimensions if data.ndim == 1: dims = 1 @@ -375,7 +376,7 @@ def PoststackInversion( PPop, datar, x0=ncp.zeros(int(PPop.shape[1]), PPop.dtype), - **kwargs_solver + **kwargs_solver, )[0] elif epsI is not None: # create regularized normal equations @@ -394,7 +395,7 @@ def PoststackInversion( PPop_reg, datar.ravel(), x0=ncp.zeros(int(PPop_reg.shape[1]), PPop_reg.dtype), - **kwargs_solver + **kwargs_solver, )[0] else: # create regularized normal eqs. and solve them simultaneously @@ -411,7 +412,7 @@ def PoststackInversion( PPop, datar, x0=ncp.zeros(int(PPop.shape[1]), PPop.dtype), - **kwargs_solver + **kwargs_solver, )[0] else: if epsRL1 is None: @@ -429,7 +430,7 @@ def PoststackInversion( [Regop], x0=None if m0 is None else m0.ravel(), epsRs=[epsR], - **kwargs_solver + **kwargs_solver, )[0] else: # Blockiness-promoting inversion with spatial regularization @@ -477,7 +478,7 @@ def PoststackInversion( niter_outer=niter_outer, niter_inner=niter_inner, x0=None if m0 is None else m0.ravel(), - **kwargs_solver + **kwargs_solver, )[0] # compute residual diff --git a/pylops/avo/prestack.py b/pylops/avo/prestack.py index 79d0ebac3..03eef6b9e 100644 --- a/pylops/avo/prestack.py +++ b/pylops/avo/prestack.py @@ -4,7 +4,8 @@ "PrestackInversion", ] -from typing import Optional, Tuple, Union +from collections.abc import Callable +from typing import Literal import numpy as np from scipy.sparse.linalg import lsqr @@ -33,7 +34,7 @@ inplace_set, ) from pylops.utils.signalprocessing import convmtx -from pylops.utils.typing import NDArray, ShapeLike +from pylops.utils.typing import NDArray, ShapeLike, Tavolinearization _linearizations = {"akirich": 3, "fatti": 3, "ps": 3} @@ -41,13 +42,13 @@ def PrestackLinearModelling( wav: NDArray, theta: NDArray, - vsvp: Union[float, NDArray] = 0.5, + vsvp: float | NDArray = 0.5, nt0: int = 1, - spatdims: Optional[Union[int, ShapeLike]] = None, - linearization: str = "akirich", + spatdims: int | ShapeLike | None = None, + linearization: Tavolinearization = "akirich", explicit: bool = False, - kind: str = "centered", - name: Optional[str] = None, + kind: Literal["centered", "forward"] = "centered", + name: str | None = None, ) -> LinearOperator: r"""Pre-stack linearized seismic modelling operator. @@ -90,7 +91,7 @@ def PrestackLinearModelling( or a ``MatrixMult`` linear operator with dense matrix (``True``, preferred for small data) kind : :obj:`str`, optional - Derivative kind (``forward`` or ``centered``). + Derivative kind (``centered`` or ``forward``). name : :obj:`str`, optional .. versionadded:: 2.0.0 @@ -143,7 +144,7 @@ def PrestackLinearModelling( ntheta = len(theta) # organize dimensions - dims: Optional[ShapeLike] + dims: ShapeLike | None if spatdims is None: dims = (nt0, ntheta) spatdims = None @@ -226,10 +227,10 @@ def PrestackWaveletModelling( m: NDArray, theta: NDArray, nwav: int, - wavc: Optional[int] = None, - vsvp: Union[float, NDArray] = 0.5, - linearization: str = "akirich", - name: Optional[str] = None, + wavc: int | None = None, + vsvp: float | NDArray = 0.5, + linearization: Tavolinearization | Callable = "akirich", + name: str | None = None, ) -> LinearOperator: r"""Pre-stack linearized seismic modelling operator for wavelet. @@ -322,9 +323,8 @@ def PrestackWaveletModelling( elif callable(linearization): G = linearization(theta, vsvp, n=nt0) else: - raise NotImplementedError( - "%s not an available linearization..." % linearization - ) + msg = f"{linearization} is not an available linearization..." + raise NotImplementedError(msg) nG = len(G) G = [ ncp.hstack([ncp.diag(G_[itheta] * ncp.ones(nt0, dtype=dtype)) for G_ in G]) @@ -356,19 +356,19 @@ def PrestackInversion( data: NDArray, theta: NDArray, wav: NDArray, - m0: Optional[NDArray] = None, - linearization: str = "akirich", + m0: NDArray | None = None, + linearization: Tavolinearization | list[Tavolinearization] = "akirich", explicit: bool = False, simultaneous: bool = False, - epsI: Optional[float] = None, - epsR: Optional[float] = None, + epsI: float | None = None, + epsR: float | None = None, dottest: bool = False, returnres: bool = False, - epsRL1: Optional[float] = None, - kind: str = "centered", - vsvp: Union[float, NDArray] = 0.5, - **kwargs_solver -) -> Union[NDArray, Tuple[NDArray, NDArray]]: + epsRL1: float | None = None, + kind: Literal["centered", "forward"] = "centered", + vsvp: float | NDArray = 0.5, + **kwargs_solver, +) -> NDArray | tuple[NDArray, NDArray]: r"""Pre-stack linearized seismic inversion. Invert pre-stack seismic operator to retrieve a set of elastic property @@ -421,7 +421,7 @@ def PrestackInversion( epsRL1 : :obj:`float`, optional Damping factor for additional blockiness regularization term kind : :obj:`str`, optional - Derivative kind (``forward`` or ``centered``). + Derivative kind (``centered`` or ``forward``). vsvp : :obj:`float` or :obj:`numpy.ndarray` :math:`V_S/V_P` ratio (constant or time/depth variant) **kwargs_solver @@ -452,7 +452,8 @@ def PrestackInversion( # find out dimensions if m0 is None and linearization is None: - raise NotImplementedError("either m0 or linearization " "must be provided") + msg = "Either m0 or linearization must be provided" + raise NotImplementedError(msg) elif m0 is None: if isinstance(linearization, str): nm = _linearizations[linearization] @@ -495,7 +496,8 @@ def PrestackInversion( or (dims >= 2 and nx != m0.shape[2]) or (dims == 3 and ny != m0.shape[3]) ): - raise ValueError("data and m0 must have same time and space axes") + msg = "data and m0 must have the same time and space axes" + raise ValueError(msg) # create operator if isinstance(linearization, str): @@ -526,7 +528,7 @@ def PrestackInversion( linearization=lin, explicit=explicit, ) - for w, lin in zip(wav, linearization) + for w, lin in zip(wav, linearization, strict=True) ] if explicit: PPop = MatrixMult( @@ -562,7 +564,7 @@ def PrestackInversion( minv = get_lstsq(data)( PPop.A, datar.reshape(n_lins * nt0 * ntheta, nspatprod).squeeze(), - **kwargs_solver + **kwargs_solver, )[0] elif epsI is None and simultaneous: # solve unregularized equations simultaneously @@ -573,7 +575,7 @@ def PrestackInversion( PPop, datar, x0=ncp.zeros(int(PPop.shape[1]), PPop.dtype), - **kwargs_solver + **kwargs_solver, )[0] elif epsI is not None: # create regularized normal equations @@ -594,7 +596,7 @@ def PrestackInversion( PPop_reg, datarn.ravel(), x0=ncp.zeros(int(PPop_reg.shape[1]), PPop_reg.dtype), - **kwargs_solver + **kwargs_solver, )[0] # else: # # create regularized normal eqs. and solve them simultaneously @@ -611,14 +613,15 @@ def PrestackInversion( PPop, datar, x0=ncp.zeros(int(PPop.shape[1]), PPop.dtype), - **kwargs_solver + **kwargs_solver, )[0] else: # Create Thicknov regularization if epsI is not None: if isinstance(epsI, (list, tuple)): if len(epsI) != nm: - raise ValueError("epsI must be a scalar or a list of" "size nm") + msg = f"epsI must be a scalar or a list of size nm, got {epsI}" + raise ValueError(msg) RegI = Diagonal(np.array(epsI), dims=(nt0, nm, nspatprod), axis=1) else: RegI = epsI * Identity(nt0 * nm * nspatprod) @@ -643,7 +646,7 @@ def PrestackInversion( Regop, x0=m0.ravel() if m0 is not None else None, epsRs=epsR, - **kwargs_solver + **kwargs_solver, )[0] else: # Blockiness-promoting inversion with spatial regularization @@ -694,7 +697,7 @@ def PrestackInversion( niter_outer=niter_outer, niter_inner=niter_inner, x0=None if m0 is None else m0.ravel(), - **kwargs_solver + **kwargs_solver, )[0] # compute residual diff --git a/pylops/basicoperators/__init__.py b/pylops/basicoperators/__init__.py index 5d3a3d3e6..3aeba3b5e 100755 --- a/pylops/basicoperators/__init__.py +++ b/pylops/basicoperators/__init__.py @@ -32,6 +32,7 @@ Conj Conj operator. Smoothing1D 1D Smoothing. Smoothing2D 2D Smoothing. + SmoothingND ND Smoothing. FirstDerivative First derivative. SecondDerivative Second derivative. Laplacian Laplacian. @@ -67,6 +68,7 @@ from .conj import * from .smoothing1d import * from .smoothing2d import * +from .smoothingnd import * from .causalintegration import * from .firstderivative import * from .secondderivative import * @@ -103,6 +105,7 @@ "Conj", "Smoothing1D", "Smoothing2D", + "SmoothingND", "CausalIntegration", "FirstDerivative", "SecondDerivative", diff --git a/pylops/basicoperators/block.py b/pylops/basicoperators/block.py index e98f1cda9..cd29194bf 100644 --- a/pylops/basicoperators/block.py +++ b/pylops/basicoperators/block.py @@ -1,10 +1,10 @@ __all__ = ["Block"] -from typing import Iterable, Optional +from collections.abc import Iterable from pylops import LinearOperator from pylops.basicoperators import HStack, VStack -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tparallel_kind class _Block(LinearOperator): @@ -17,12 +17,12 @@ class _Block(LinearOperator): def __init__( self, ops: Iterable[Iterable[LinearOperator]], - forceflat: bool = None, - dtype: Optional[DTypeLike] = None, + forceflat: bool | None = None, + dtype: DTypeLike | None = None, _HStack=HStack, _VStack=VStack, - _args_HStack: Optional[dict] = None, - _args_VStack: Optional[dict] = None, + _args_HStack: dict | None = None, + _args_VStack: dict | None = None, name: str = "B", ): if _args_HStack is None: @@ -153,9 +153,9 @@ def __init__( self, ops: Iterable[Iterable[LinearOperator]], nproc: int = 1, - forceflat: bool = None, - parallel_kind: str = "multiproc", - dtype: Optional[DTypeLike] = None, + forceflat: bool | None = None, + parallel_kind: Tparallel_kind = "multiproc", + dtype: DTypeLike | None = None, ): super().__init__( ops=ops, diff --git a/pylops/basicoperators/blockdiag.py b/pylops/basicoperators/blockdiag.py index f6833864f..7d98026a3 100644 --- a/pylops/basicoperators/blockdiag.py +++ b/pylops/basicoperators/blockdiag.py @@ -14,16 +14,18 @@ from scipy.sparse.linalg.interface import _get_dtype else: from scipy.sparse.linalg._interface import ( - _get_dtype, LinearOperator as spLinearOperator, ) + from scipy.sparse.linalg._interface import ( + _get_dtype, + ) -from typing import Optional, Sequence +from collections.abc import Sequence from pylops import LinearOperator from pylops.basicoperators import MatrixMult from pylops.utils.backend import get_array_module, get_module, inplace_set -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tinoutengine, Tparallel_kind def _matvec_rmatvec_map(op, x: NDArray) -> NDArray: @@ -142,13 +144,14 @@ def __init__( self, ops: Sequence[LinearOperator], nproc: int = 1, - forceflat: bool = None, - inoutengine: Optional[tuple] = None, - parallel_kind: str = "multiproc", - dtype: Optional[DTypeLike] = None, + forceflat: bool | None = None, + inoutengine: Tinoutengine | None = None, + parallel_kind: Tparallel_kind = "multiproc", + dtype: DTypeLike | None = None, ) -> None: if parallel_kind not in ["multiproc", "multithread"]: - raise ValueError("parallel_kind must be 'multiproc' or 'multithread'") + msg = "parallel_kind must be 'multiproc' or 'multithread'" + raise ValueError(msg) # identify dimensions self.ops = ops mops = np.zeros(len(ops), dtype=int) @@ -181,7 +184,7 @@ def __init__( # create pool for multithreading / multiprocessing self.parallel_kind = parallel_kind self._nproc = nproc - self.pool: Optional[mp.pool.Pool] = None + self.pool: mp.pool.Pool | None = None if self.nproc > 1: if self.parallel_kind == "multiproc": self.pool = mp.Pool(processes=nproc) diff --git a/pylops/basicoperators/causalintegration.py b/pylops/basicoperators/causalintegration.py index 7d0289937..b688ee2fc 100644 --- a/pylops/basicoperators/causalintegration.py +++ b/pylops/basicoperators/causalintegration.py @@ -1,6 +1,6 @@ __all__ = ["CausalIntegration"] -from typing import Union +from typing import Literal import numpy as np @@ -98,10 +98,10 @@ class CausalIntegration(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - sampling: float = 1, - kind: str = "full", + sampling: float = 1.0, + kind: Literal["full", "half", "trapezoidal"] = "full", removefirst: bool = False, dtype: DTypeLike = "float64", name: str = "C", diff --git a/pylops/basicoperators/conj.py b/pylops/basicoperators/conj.py index 5d6ca3809..a4d073c08 100644 --- a/pylops/basicoperators/conj.py +++ b/pylops/basicoperators/conj.py @@ -1,8 +1,6 @@ __all__ = ["Conj"] -from typing import Union - import numpy as np from pylops import LinearOperator @@ -56,7 +54,7 @@ class Conj(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, dtype: DTypeLike = "complex128", name: str = "C", ) -> None: diff --git a/pylops/basicoperators/diagonal.py b/pylops/basicoperators/diagonal.py index 276464959..87a41d257 100644 --- a/pylops/basicoperators/diagonal.py +++ b/pylops/basicoperators/diagonal.py @@ -1,6 +1,5 @@ __all__ = ["Diagonal"] -from typing import Optional, Union import numpy as np @@ -78,7 +77,7 @@ class Diagonal(LinearOperator): def __init__( self, diag: NDArray, - dims: Optional[Union[int, InputDimsLike]] = None, + dims: int | InputDimsLike | None = None, axis: int = -1, dtype: DTypeLike = "float64", name: str = "D", diff --git a/pylops/basicoperators/directionalderivative.py b/pylops/basicoperators/directionalderivative.py index bf397ba66..f7c56cf31 100644 --- a/pylops/basicoperators/directionalderivative.py +++ b/pylops/basicoperators/directionalderivative.py @@ -3,9 +3,10 @@ "SecondDirectionalDerivative", ] + from pylops import LinearOperator from pylops.basicoperators import Diagonal, Gradient, Sum -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tderivkind class FirstDirectionalDerivative(LinearOperator): @@ -25,8 +26,9 @@ class FirstDirectionalDerivative(LinearOperator): v : :obj:`numpy.ndarray`, optional Single direction (array of size :math:`n_\text{dims}`) or group of directions (array of size :math:`[n_\text{dims} \times n_{d_0} \times ... \times n_{d_{n_\text{dims}}}]`) - sampling : :obj:`tuple`, optional - Sampling steps for each direction. + sampling : :obj:`tuple` or :obj:`float`, optional + Sampling steps for each direction. If a single float + is provided, it is used for all directions. edge : :obj:`bool`, optional Use reduced order derivative at edges (``True``) or ignore them (``False``). @@ -77,9 +79,9 @@ def __init__( self, dims: InputDimsLike, v: NDArray, - sampling: int = 1, + sampling: float | InputDimsLike = 1.0, edge: bool = False, - kind: str = "centered", + kind: Tderivkind = "centered", dtype: DTypeLike = "float64", name: str = "F", ): @@ -88,7 +90,12 @@ def __init__( self.kind = kind self.v = v Op = self._calc_first_ddop( - dims=dims, sampling=sampling, edge=edge, kind=kind, dtype=dtype, v=v + dims=dims, + v=v, + sampling=sampling, + edge=edge, + kind=kind, + dtype=dtype, ) super().__init__(Op=Op, name=name) @@ -102,9 +109,9 @@ def _rmatvec(self, x: NDArray) -> NDArray: def _calc_first_ddop( dims: InputDimsLike, v: NDArray, - sampling: int, + sampling: float | InputDimsLike, edge: bool, - kind: str, + kind: Tderivkind, dtype: DTypeLike, ): Gop = Gradient(dims, sampling=sampling, edge=edge, kind=kind, dtype=dtype) @@ -133,11 +140,16 @@ class SecondDirectionalDerivative(LinearOperator): v : :obj:`numpy.ndarray`, optional Single direction (array of size :math:`n_\text{dims}`) or group of directions (array of size :math:`[n_\text{dims} \times n_{d_0} \times ... \times n_{d_{n_\text{dims}}}]`) - sampling : :obj:`tuple`, optional - Sampling steps for each direction. + sampling : :obj:`tuple` or :obj:`float`, optional + Sampling steps for each direction. If a single float + is provided, it is used for all directions. edge : :obj:`bool`, optional Use reduced order derivative at edges (``True``) or ignore them (``False``). + kind : :obj:`str`, optional + .. versionadded:: 2.7.0 + + Derivative kind (``forward``, ``centered``, or ``backward``). dtype : :obj:`str`, optional Type of elements in input array. @@ -175,17 +187,18 @@ def __init__( self, dims: InputDimsLike, v: NDArray, - sampling: int = 1, + sampling: float | InputDimsLike = 1.0, edge: bool = False, + kind: Tderivkind = "centered", dtype: DTypeLike = "float64", name: str = "S", ): - self.dims = dims - self.v = v self.sampling = sampling self.edge = edge + self.kind = kind + self.v = v Op = self._calc_second_ddop( - dims=dims, v=v, sampling=sampling, edge=edge, dtype=dtype + dims=dims, v=v, sampling=sampling, edge=edge, kind=kind, dtype=dtype ) super().__init__(Op=Op, name=name) @@ -197,10 +210,15 @@ def _rmatvec(self, x: NDArray) -> NDArray: @staticmethod def _calc_second_ddop( - dims: InputDimsLike, v: NDArray, sampling: int, edge: bool, dtype: DTypeLike + dims: InputDimsLike, + v: NDArray, + sampling: int, + edge: bool, + kind: Tderivkind, + dtype: DTypeLike, ): Dop = FirstDirectionalDerivative( - dims=dims, v=v, sampling=sampling, edge=edge, dtype=dtype + dims=dims, v=v, sampling=sampling, edge=edge, kind=kind, dtype=dtype ) ddop = -Dop.H * Dop return ddop diff --git a/pylops/basicoperators/firstderivative.py b/pylops/basicoperators/firstderivative.py index 988b53042..9ed437f98 100644 --- a/pylops/basicoperators/firstderivative.py +++ b/pylops/basicoperators/firstderivative.py @@ -1,6 +1,7 @@ __all__ = ["FirstDerivative"] -from typing import Callable, Union +from collections.abc import Callable +from typing import Literal import numpy as np @@ -13,7 +14,7 @@ inplace_set, ) from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tderivkind class FirstDerivative(LinearOperator): @@ -91,12 +92,12 @@ class FirstDerivative(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, sampling: float = 1.0, - kind: str = "centered", + kind: Tderivkind = "centered", edge: bool = False, - order: int = 3, + order: Literal[3, 5] = 3, dtype: DTypeLike = "float64", name: str = "F", ) -> None: @@ -122,8 +123,8 @@ def __init__( def _register_multiplications( self, - kind: str, - order: int, + kind: Tderivkind, + order: Literal[3, 5], ) -> None: # choose _matvec and _rmatvec kind self._hmatvec: Callable @@ -139,14 +140,14 @@ def _register_multiplications( self._hmatvec = self._matvec_centered5 self._hrmatvec = self._rmatvec_centered5 else: - raise NotImplementedError("'order' must be '3, or '5'") + msg = "order must be '3', or '5'" + raise NotImplementedError(msg) elif kind == "backward": self._hmatvec = self._matvec_backward self._hrmatvec = self._rmatvec_backward else: - raise NotImplementedError( - "'kind' must be 'forward', 'centered', or 'backward'" - ) + msg = "kind must be 'forward', 'centered', or 'backward'" + raise NotImplementedError(msg) def _matvec(self, x: NDArray) -> NDArray: return self._hmatvec(x) diff --git a/pylops/basicoperators/flip.py b/pylops/basicoperators/flip.py index 55947e34d..ad8f6d424 100644 --- a/pylops/basicoperators/flip.py +++ b/pylops/basicoperators/flip.py @@ -1,6 +1,5 @@ __all__ = ["Flip"] -from typing import Union import numpy as np @@ -59,7 +58,7 @@ class Flip(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, dtype: DTypeLike = "float64", name: str = "F", diff --git a/pylops/basicoperators/functionoperator.py b/pylops/basicoperators/functionoperator.py index 00b9f439a..4136a45ad 100644 --- a/pylops/basicoperators/functionoperator.py +++ b/pylops/basicoperators/functionoperator.py @@ -1,7 +1,7 @@ __all__ = ["FunctionOperator"] +from collections.abc import Callable from numbers import Integral -from typing import Callable from pylops import LinearOperator from pylops.utils.typing import NDArray, ShapeLike @@ -103,5 +103,6 @@ def _matvec(self, x: NDArray) -> NDArray: def _rmatvec(self, x: NDArray) -> NDArray: if self.fc is None: - raise NotImplementedError("Adjoint not implemented") + msg = "Adjoint not implemented" + raise NotImplementedError(msg) return self.fc(x) diff --git a/pylops/basicoperators/gradient.py b/pylops/basicoperators/gradient.py index c6d4e9a02..0f5dff64e 100644 --- a/pylops/basicoperators/gradient.py +++ b/pylops/basicoperators/gradient.py @@ -1,11 +1,10 @@ __all__ = ["Gradient"] -from typing import Union from pylops import LinearOperator from pylops.basicoperators import FirstDerivative, VStack from pylops.utils._internal import _value_or_sized_to_tuple -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tderivkind class Gradient(LinearOperator): @@ -20,8 +19,9 @@ class Gradient(LinearOperator): ---------- dims : :obj:`tuple` Number of samples for each dimension. - sampling : :obj:`tuple`, optional - Sampling steps for each direction. + sampling : :obj:`tuple` or :obj:`float`, optional + Sampling steps for each direction. If a single float + is provided, it is used for all directions. edge : :obj:`bool`, optional Use reduced order derivative at edges (``True``) or ignore them (``False``). @@ -78,10 +78,10 @@ class Gradient(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], - sampling: int = 1, + dims: int | InputDimsLike, + sampling: float | InputDimsLike = 1.0, edge: bool = False, - kind: str = "centered", + kind: Tderivkind = "centered", dtype: DTypeLike = "float64", name: str = "G", ): diff --git a/pylops/basicoperators/hstack.py b/pylops/basicoperators/hstack.py index bf94a02ab..ca817e9fd 100644 --- a/pylops/basicoperators/hstack.py +++ b/pylops/basicoperators/hstack.py @@ -14,17 +14,17 @@ from scipy.sparse.linalg.interface import LinearOperator as spLinearOperator from scipy.sparse.linalg.interface import _get_dtype else: - from scipy.sparse.linalg._interface import _get_dtype from scipy.sparse.linalg._interface import ( LinearOperator as spLinearOperator, ) + from scipy.sparse.linalg._interface import _get_dtype -from typing import Callable, Optional, Sequence +from collections.abc import Callable, Sequence from pylops import LinearOperator from pylops.basicoperators import MatrixMult, Zero from pylops.utils.backend import get_array_module, get_module, inplace_add, inplace_set -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tinoutengine, Tparallel_kind def _matvec_rmatvec_map(op, x: NDArray) -> NDArray: @@ -152,13 +152,14 @@ def __init__( self, ops: Sequence[LinearOperator], nproc: int = 1, - forceflat: bool = None, - inoutengine: Optional[tuple] = None, - parallel_kind: str = "multiproc", - dtype: Optional[str] = None, + forceflat: bool | None = None, + inoutengine: Tinoutengine | None = None, + parallel_kind: Tparallel_kind = "multiproc", + dtype: str | None = None, ) -> None: if parallel_kind not in ["multiproc", "multithread"]: - raise ValueError("parallel_kind must be 'multiproc' or 'multithread'") + msg = "parallel_kind must be 'multiproc' or 'multithread'" + raise ValueError(msg) # identify dimensions self.ops = ops mops = np.zeros(len(ops), dtype=int) @@ -169,7 +170,8 @@ def __init__( self.mops = int(mops.sum()) nops = [oper.shape[0] for oper in self.ops] if len(set(nops)) > 1: - raise ValueError("operators have different number of rows") + msg = "Operators have different number of rows" + raise ValueError(msg) self.nops = int(nops[0]) self.mmops = np.insert(np.cumsum(mops), 0, 0) # define dimsd (check if all operators have the same, diff --git a/pylops/basicoperators/identity.py b/pylops/basicoperators/identity.py index 884600a94..1258f4d73 100644 --- a/pylops/basicoperators/identity.py +++ b/pylops/basicoperators/identity.py @@ -1,8 +1,6 @@ __all__ = ["Identity"] -from typing import Optional, Union - import numpy as np from pylops import LinearOperator @@ -119,10 +117,10 @@ class Identity(LinearOperator): def __init__( self, - N: Union[int, InputDimsLike], - M: Optional[Union[int, InputDimsLike]] = None, + N: int | InputDimsLike, + M: int | InputDimsLike | None = None, inplace: bool = True, - forceflat: bool = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "I", ) -> None: @@ -164,19 +162,21 @@ def __init__( self._sliceN = tuple([slice(0, n) for n in N]) self._sliceM = tuple([slice(0, m) for m in M]) else: - raise ValueError( + msg = ( "N and M are not identical, " "and some values are larger in N and some in M" ) + raise ValueError(msg) super().__init__( dtype=np.dtype(dtype), dims=M, dimsd=N, forceflat=forceflat, name=name ) else: - raise NotImplementedError( - f"N and M must have same type and equal to " - f"int, tuple, or list, instead their types" + msg = ( + "N and M must have same type and equal to " + "int, tuple, or list, instead their types" f" are type(N)={type(N)} and type(M)={type(M)}" ) + raise NotImplementedError(msg) self.inplace = inplace @reshaped diff --git a/pylops/basicoperators/imag.py b/pylops/basicoperators/imag.py index 94c2d4706..02b8a5a52 100644 --- a/pylops/basicoperators/imag.py +++ b/pylops/basicoperators/imag.py @@ -1,6 +1,5 @@ __all__ = ["Imag"] -from typing import Union import numpy as np @@ -59,7 +58,7 @@ class Imag(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, dtype: DTypeLike = "complex128", name: str = "I", ) -> None: diff --git a/pylops/basicoperators/laplacian.py b/pylops/basicoperators/laplacian.py index 3922f3c52..097dc8908 100644 --- a/pylops/basicoperators/laplacian.py +++ b/pylops/basicoperators/laplacian.py @@ -1,12 +1,17 @@ __all__ = ["Laplacian"] - -from typing import Tuple +import numpy as np from pylops import LinearOperator from pylops.basicoperators import SecondDerivative from pylops.utils.backend import get_normalize_axis_index -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import ( + DTypeLike, + InputDimsLike, + NDArray, + SamplingLike, + Tderivkind, +) class Laplacian(LinearOperator): @@ -77,16 +82,17 @@ def __init__( self, dims: InputDimsLike, axes: InputDimsLike = (-2, -1), - weights: Tuple[float, ...] = (1, 1), - sampling: Tuple[float, ...] = (1, 1), + weights: SamplingLike = (1.0, 1.0), + sampling: SamplingLike = (1.0, 1.0), edge: bool = False, - kind: str = "centered", + kind: Tderivkind = "centered", dtype: DTypeLike = "float64", name: str = "L", ): axes = tuple(get_normalize_axis_index()(ax, len(dims)) for ax in axes) if not (len(axes) == len(weights) == len(sampling)): - raise ValueError("axes, weights, and sampling have different size") + msg = "axes, weights, and sampling have different size" + raise ValueError(msg) self.axes = axes self.weights = weights self.sampling = sampling @@ -113,19 +119,23 @@ def _rmatvec(self, x: NDArray) -> NDArray: def _calc_l2op( dims: InputDimsLike, axes: InputDimsLike, - weights: Tuple[float, ...], - sampling: Tuple[float, ...], + weights: SamplingLike, + sampling: SamplingLike, edge: bool, - kind: str, + kind: Tderivkind, dtype: DTypeLike, ): + weights = np.array(weights, dtype=dtype) + sampling = np.array(sampling, dtype=dtype) l2op = SecondDerivative( dims, axis=axes[0], sampling=sampling[0], edge=edge, kind=kind, dtype=dtype ) dims = l2op.dims l2op *= weights[0] - for ax, samp, weight in zip(axes[1:], sampling[1:], weights[1:]): - l2op += weight * SecondDerivative( + for ax, samp, weight in zip(axes[1:], sampling[1:], weights[1:], strict=True): + tmpop = SecondDerivative( dims, axis=ax, sampling=samp, edge=edge, kind=kind, dtype=dtype ) + tmpop *= weight + l2op += tmpop return l2op diff --git a/pylops/basicoperators/linearregression.py b/pylops/basicoperators/linearregression.py index b367aee7a..278da381f 100644 --- a/pylops/basicoperators/linearregression.py +++ b/pylops/basicoperators/linearregression.py @@ -1,9 +1,7 @@ __all__ = ["LinearRegression"] -import numpy.typing as npt - from pylops.basicoperators import Regression -from pylops.utils.typing import DTypeLike +from pylops.utils.typing import DTypeLike, NDArray class LinearRegression(Regression): @@ -70,7 +68,5 @@ class LinearRegression(Regression): ``order=1``. """ - def __init__( - self, taxis: npt.ArrayLike, dtype: DTypeLike = "float64", name: str = "L" - ): + def __init__(self, taxis: NDArray, dtype: DTypeLike = "float64", name: str = "L"): super().__init__(taxis=taxis, order=1, dtype=dtype, name=name) diff --git a/pylops/basicoperators/matrixmult.py b/pylops/basicoperators/matrixmult.py index 897f68513..8b6bd805a 100644 --- a/pylops/basicoperators/matrixmult.py +++ b/pylops/basicoperators/matrixmult.py @@ -2,7 +2,6 @@ import logging import warnings -from typing import Optional, Union import numpy as np import scipy as sp @@ -75,8 +74,8 @@ class MatrixMult(LinearOperator): def __init__( self, A: NDArray, - otherdims: Optional[Union[int, InputDimsLike]] = None, - forceflat: bool = None, + otherdims: int | InputDimsLike | None = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "M", ) -> None: @@ -116,7 +115,9 @@ def __init__( # Check dtype for correctness (upcast to complex when A is complex) if np.iscomplexobj(A) and not np.iscomplexobj(np.ones(1, dtype=dtype)): dtype = A.dtype - warnings.warn("Matrix A is a complex object, dtype cast to %s" % dtype) + warnings.warn( + "Matrix A is a complex object, dtype cast to %s" % dtype, stacklevel=2 + ) super().__init__( dtype=np.dtype(dtype), dims=dims, diff --git a/pylops/basicoperators/memoizeoperator.py b/pylops/basicoperators/memoizeoperator.py index ef440a2e2..1ad4b4f4a 100644 --- a/pylops/basicoperators/memoizeoperator.py +++ b/pylops/basicoperators/memoizeoperator.py @@ -1,6 +1,5 @@ __all__ = ["MemoizeOperator"] -from typing import List, Tuple import numpy as np @@ -43,7 +42,7 @@ def __init__( super().__init__(Op=Op) self.max_neval = max_neval - self.store: List[Tuple[NDArray, NDArray]] = [] # Store a list of (x, y) + self.store: list[tuple[NDArray, NDArray]] = [] # Store a list of (x, y) self.neval = 0 # Number of evaluations of the operator def _matvec(self, x: NDArray) -> NDArray: diff --git a/pylops/basicoperators/pad.py b/pylops/basicoperators/pad.py index 37a51e5be..66e05fa11 100644 --- a/pylops/basicoperators/pad.py +++ b/pylops/basicoperators/pad.py @@ -1,6 +1,6 @@ __all__ = ["Pad"] -from typing import Sequence, Tuple, Union +from collections.abc import Sequence import numpy as np @@ -76,17 +76,21 @@ class Pad(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], - pad: Union[Tuple[int, int], Sequence[Tuple[int, int]]], + dims: int | InputDimsLike, + pad: tuple[int, int] | Sequence[tuple[int, int]], dtype: DTypeLike = "float64", name: str = "P", ) -> None: if np.any(np.array(pad) < 0): - raise ValueError("Padding must be positive or zero") + msg = "Padding must be positive or zero" + raise ValueError(msg) dims = _value_or_sized_to_tuple(dims) # Accept (padbeg, padend) and [(padbeg, padend)] self.pad: Sequence = [pad] if len(dims) == 1 and len(pad) == 2 else pad - dimsd = [dim + before + after for dim, (before, after) in zip(dims, self.pad)] + dimsd = [ + dim + before + after + for dim, (before, after) in zip(dims, self.pad, strict=True) + ] super().__init__(dtype=np.dtype(dtype), dims=dims, dimsd=dimsd, name=name) @reshaped diff --git a/pylops/basicoperators/real.py b/pylops/basicoperators/real.py index 99d21edef..c2e739fa6 100644 --- a/pylops/basicoperators/real.py +++ b/pylops/basicoperators/real.py @@ -1,5 +1,4 @@ __all__ = ["Real"] -from typing import Union import numpy as np @@ -58,7 +57,7 @@ class Real(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, dtype: DTypeLike = "complex128", name: str = "R", ) -> None: diff --git a/pylops/basicoperators/regression.py b/pylops/basicoperators/regression.py index 5af837439..307966886 100644 --- a/pylops/basicoperators/regression.py +++ b/pylops/basicoperators/regression.py @@ -1,7 +1,6 @@ __all__ = ["Regression"] import numpy as np -import numpy.typing as npt from pylops import LinearOperator from pylops.utils.backend import get_array_module @@ -78,14 +77,15 @@ class Regression(LinearOperator): def __init__( self, - taxis: npt.ArrayLike, + taxis: NDArray, order: int, dtype: DTypeLike = "float64", name: str = "R", ) -> None: ncp = get_array_module(taxis) if not isinstance(taxis, ncp.ndarray): - raise TypeError("t must be ndarray...") + msg = "t must be ndarray..." + raise TypeError(msg) else: self.taxis = taxis self.order = order @@ -104,7 +104,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: return ncp.vstack([ncp.dot(self.taxis**i, x) for i in range(self.order + 1)]) - def apply(self, t: npt.ArrayLike, x: NDArray) -> NDArray: + def apply(self, t: NDArray, x: NDArray) -> NDArray: """Return values along y-axis given certain ``t`` location(s) along t-axis and regression coefficients ``x`` diff --git a/pylops/basicoperators/restriction.py b/pylops/basicoperators/restriction.py index 1636874af..387161049 100644 --- a/pylops/basicoperators/restriction.py +++ b/pylops/basicoperators/restriction.py @@ -1,7 +1,7 @@ __all__ = ["Restriction"] import logging -from typing import Sequence, Union +from collections.abc import Sequence import numpy as np import numpy.ma as np_ma @@ -116,11 +116,11 @@ class Restriction(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], - iava: Union[IntNDArray, Sequence[int]], + dims: int | InputDimsLike, + iava: IntNDArray | Sequence[int], axis: int = -1, inplace: bool = True, - forceflat: bool = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "R", ) -> None: diff --git a/pylops/basicoperators/roll.py b/pylops/basicoperators/roll.py index cbeead286..469c6c44d 100644 --- a/pylops/basicoperators/roll.py +++ b/pylops/basicoperators/roll.py @@ -1,6 +1,5 @@ __all__ = ["Roll"] -from typing import Union import numpy as np @@ -56,7 +55,7 @@ class Roll(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, shift: int = 1, dtype: DTypeLike = "float64", diff --git a/pylops/basicoperators/secondderivative.py b/pylops/basicoperators/secondderivative.py index b1b6b0b12..2c649cdfa 100644 --- a/pylops/basicoperators/secondderivative.py +++ b/pylops/basicoperators/secondderivative.py @@ -1,6 +1,6 @@ __all__ = ["SecondDerivative"] -from typing import Callable, Union +from collections.abc import Callable import numpy as np @@ -13,7 +13,7 @@ inplace_set, ) from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tderivkind class SecondDerivative(LinearOperator): @@ -83,10 +83,10 @@ class SecondDerivative(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, sampling: float = 1.0, - kind: str = "centered", + kind: Tderivkind = "centered", edge: bool = False, dtype: DTypeLike = "float64", name: str = "S", @@ -127,9 +127,8 @@ def _register_multiplications( self._hmatvec = self._matvec_backward self._hrmatvec = self._rmatvec_backward else: - raise NotImplementedError( - "'kind' must be 'forward', 'centered' or 'backward'" - ) + msg = "'kind' must be 'forward', 'centered' or 'backward'" + raise NotImplementedError(msg) def _matvec(self, x: NDArray) -> NDArray: return self._hmatvec(x) diff --git a/pylops/basicoperators/smoothing1d.py b/pylops/basicoperators/smoothing1d.py index 9fc7d2f0e..ceae4b8f3 100644 --- a/pylops/basicoperators/smoothing1d.py +++ b/pylops/basicoperators/smoothing1d.py @@ -1,6 +1,5 @@ __all__ = ["Smoothing1D"] -from typing import Union import numpy as np @@ -81,14 +80,14 @@ class Smoothing1D(Convolve1D): def __init__( self, nsmooth: int, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, dtype: DTypeLike = "float64", name: str = "S", ): if nsmooth % 2 == 0: nsmooth += 1 - h = np.ones(nsmooth) / float(nsmooth) + h = np.ones(nsmooth, dtype=dtype) / float(nsmooth) offset = (nsmooth - 1) // 2 super().__init__( dims=dims, h=h, axis=axis, offset=offset, dtype=dtype, name=name diff --git a/pylops/basicoperators/smoothing2d.py b/pylops/basicoperators/smoothing2d.py index abf76fbfb..886cbdb78 100644 --- a/pylops/basicoperators/smoothing2d.py +++ b/pylops/basicoperators/smoothing2d.py @@ -1,6 +1,5 @@ __all__ = ["Smoothing2D"] -from typing import Union import numpy as np @@ -30,7 +29,7 @@ class Smoothing2D(Convolve2D): Attributes ---------- - nh : :obj:`int` + nh : :obj:`tuple` Length of the filter convolve : :obj:`callable` Convolution function @@ -71,7 +70,7 @@ class Smoothing2D(Convolve2D): def __init__( self, nsmooth: InputDimsLike, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axes: InputDimsLike = (-2, -1), dtype: DTypeLike = "float64", name: str = "S", @@ -81,7 +80,9 @@ def __init__( nsmooth[0] += 1 if nsmooth[1] % 2 == 0: nsmooth[1] += 1 - h = np.ones((nsmooth[0], nsmooth[1])) / float(nsmooth[0] * nsmooth[1]) + h = np.ones((nsmooth[0], nsmooth[1]), dtype=dtype) / float( + nsmooth[0] * nsmooth[1] + ) offset = [(nsmooth[0] - 1) // 2, (nsmooth[1] - 1) // 2] super().__init__( dims=dims, h=h, offset=offset, axes=axes, dtype=dtype, name=name diff --git a/pylops/basicoperators/smoothingnd.py b/pylops/basicoperators/smoothingnd.py new file mode 100644 index 000000000..7ea23ca38 --- /dev/null +++ b/pylops/basicoperators/smoothingnd.py @@ -0,0 +1,85 @@ +__all__ = ["SmoothingND"] + + +import numpy as np + +from pylops.signalprocessing import ConvolveND +from pylops.utils.typing import DTypeLike, InputDimsLike + + +class SmoothingND(ConvolveND): + r"""ND Smoothing. + + Apply smoothing to model (and data) along the + ``axes`` of a n-dimensional array. + + Parameters + ---------- + nsmooth : :obj:`tuple` or :obj:`list` + Length of smoothing operator in the chosen dimensions + (must be odd, if even it will be increased by 1). + dims : :obj:`tuple` + Number of samples for each dimension + axes : :obj:`int`, optional + Axes along which model (and data) are smoothed. + dtype : :obj:`str`, optional + Type of elements in input array. + + Attributes + ---------- + nh : :obj:`tuple` + Length of the filter + convolve : :obj:`callable` + Convolution function + correlate : :obj:`callable` + Correlation function + dims : :obj:`tuple` + Shape of the array after the adjoint, but before flattening. + + For example, ``x_reshaped = (Op.H * y.ravel()).reshape(Op.dims)``. + dimsd : :obj:`tuple` + Shape of the array after the forward, but before flattening. In + this case, same as ``dims``. + shape : :obj:`tuple` + Operator shape. + + See Also + -------- + pylops.signalprocessing.ConvolveND : ND convolution + + Notes + ----- + The ND Smoothing operator is a special type of convolutional operator that + convolves the input model (or data) with a constant nd filter of size + :math:`n_{\text{smooth}, 1} \times n_{\text{smooth}, 2} \times n_{\text{smooth}, 3}`: + + Its application to a three dimensional input signal is: + + .. math:: + y[i,j,k] = 1/(n_{\text{smooth}, 1}\cdot n_{\text{smooth}, 2}\cdot n_{\text{smooth}, 3}) + \sum_{l=-(n_{\text{smooth},1}-1)/2}^{(n_{\text{smooth},1}-1)/2} + \sum_{m=-(n_{\text{smooth},2}-1)/2}^{(n_{\text{smooth},2}-1)/2} + \sum_{n=-(n_{\text{smooth},3}-1)/2}^{(n_{\text{smooth},3}-1)/2} x[l,m,n] + + Note that since the filter is symmetrical, the *Smoothing3D* operator is + self-adjoint. + + """ + + def __init__( + self, + nsmooth: InputDimsLike, + dims: int | InputDimsLike, + axes: InputDimsLike = (-2, -1), + dtype: DTypeLike = "float64", + name: str = "S", + ): + nsmooth = list(nsmooth) + for i in range(len(nsmooth)): + if nsmooth[i] % 2 == 0: + nsmooth[i] += 1 + h = np.ones(nsmooth, dtype=dtype) / float(np.prod(nsmooth)) + offset = [(nsm - 1) // 2 for nsm in nsmooth] + super().__init__( + dims=dims, h=h, offset=offset, axes=axes, dtype=dtype, name=name + ) diff --git a/pylops/basicoperators/spread.py b/pylops/basicoperators/spread.py index aa4b301e4..b291e0dc0 100644 --- a/pylops/basicoperators/spread.py +++ b/pylops/basicoperators/spread.py @@ -1,14 +1,14 @@ __all__ = ["Spread"] import logging -from typing import Callable, Optional +from collections.abc import Callable import numpy as np from pylops import LinearOperator from pylops.utils import deps from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tengine_nn jit_message = deps.numba_import("the spread module") @@ -127,10 +127,10 @@ class Spread(LinearOperator): Raises ------ - KeyError - If ``engine`` is neither ``numpy`` nor ``numba`` NotImplementedError If both ``table`` and ``fh`` are not provided + ValueError + If ``engine`` is neither ``numpy`` nor ``numba`` ValueError If ``table`` has shape different from :math:`[n_{x_0} \times n_{t_0} \times n_x]` @@ -168,18 +168,19 @@ def __init__( self, dims: InputDimsLike, dimsd: InputDimsLike, - table: Optional[NDArray] = None, - dtable: Optional[NDArray] = None, - fh: Optional[Callable] = None, - interp: Optional[bool] = None, - engine: str = "numpy", + table: NDArray | None = None, + dtable: NDArray | None = None, + fh: Callable | None = None, + interp: bool | None = None, + engine: Tengine_nn = "numpy", dtype: DTypeLike = "float64", name: str = "S", ) -> None: super().__init__(dtype=np.dtype(dtype), dims=dims, dimsd=dimsd, name=name) if engine not in ["numpy", "numba"]: - raise KeyError("engine must be numpy or numba") + msg = f"engine must be 'numpy' or 'numba', got {engine}" + raise ValueError(msg) if engine == "numba" and jit_message is None: self.engine = "numba" else: @@ -196,15 +197,19 @@ def __init__( # find out if mapping is in table of function handle if self.table is None and fh is None: - raise NotImplementedError("provide either table or fh.") + msg = "Provide either table or fh." + raise NotImplementedError(msg) elif self.table is not None: if fh is not None: - raise ValueError("provide only one of table or fh.") + msg = "Provide only one of table or fh." + raise ValueError(msg) if self.table.shape != (self.nx0, self.nt0, self.nx): - raise ValueError("table must have shape [nx0 x nt0 x nx]") + msg = "table must have shape [nx0 x nt0 x nx]" + raise ValueError(msg) self.usetable = True if np.any(self.table > self.nt): - raise ValueError("values in table must be smaller than nt") + msg = "Values in table must be smaller than nt" + raise ValueError(msg) else: self.usetable = False @@ -213,7 +218,8 @@ def __init__( if self.usetable: if self.dtable is not None: if self.dtable.shape != (self.nx0, self.nt0, self.nx): - raise ValueError("dtable must have shape [nx0 x nt x nx]") + msg = "dtable must have shape [nx0 x nt x nx]" + raise ValueError(msg) self.interp = True else: if self.engine == "numba": diff --git a/pylops/basicoperators/sum.py b/pylops/basicoperators/sum.py index 8bb65be4b..b0d59a1aa 100644 --- a/pylops/basicoperators/sum.py +++ b/pylops/basicoperators/sum.py @@ -76,7 +76,7 @@ def __init__( self, dims: InputDimsLike, axis: int = -1, - forceflat: bool = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "S", ) -> None: diff --git a/pylops/basicoperators/symmetrize.py b/pylops/basicoperators/symmetrize.py index 3f7925515..79d382c7b 100644 --- a/pylops/basicoperators/symmetrize.py +++ b/pylops/basicoperators/symmetrize.py @@ -1,6 +1,5 @@ __all__ = ["Symmetrize"] -from typing import Union import numpy as np @@ -77,7 +76,7 @@ class Symmetrize(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, dtype: DTypeLike = "float64", name: str = "S", diff --git a/pylops/basicoperators/tocupy.py b/pylops/basicoperators/tocupy.py index a1dfb5b0b..0c43afad2 100644 --- a/pylops/basicoperators/tocupy.py +++ b/pylops/basicoperators/tocupy.py @@ -1,6 +1,5 @@ __all__ = ["ToCupy"] -from typing import Union import numpy as np @@ -50,7 +49,7 @@ class ToCupy(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, dtype: DTypeLike = "float64", name: str = "C", ) -> None: diff --git a/pylops/basicoperators/transpose.py b/pylops/basicoperators/transpose.py index 280a05021..dee0972ac 100644 --- a/pylops/basicoperators/transpose.py +++ b/pylops/basicoperators/transpose.py @@ -75,7 +75,11 @@ def __init__( # find out if all axes are present only once in axes if len(np.unique(self.axes)) != ndims: - raise ValueError("axes must contain each direction once") + msg = ( + "axes must contain all dimensions, " + f"and each dimension at least once, got {self.axes}, instead" + ) + raise ValueError(msg) # find out how axes should be transposed in adjoint mode axesd = np.empty(ndims, dtype=int) diff --git a/pylops/basicoperators/vstack.py b/pylops/basicoperators/vstack.py index c1dcb7bb9..50d756095 100644 --- a/pylops/basicoperators/vstack.py +++ b/pylops/basicoperators/vstack.py @@ -19,12 +19,12 @@ ) from scipy.sparse.linalg._interface import _get_dtype -from typing import Callable, Optional, Sequence +from collections.abc import Callable, Sequence from pylops import LinearOperator from pylops.basicoperators import MatrixMult, Zero from pylops.utils.backend import get_array_module, get_module, inplace_add, inplace_set -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tinoutengine, Tparallel_kind def _matvec_rmatvec_map(op: Callable, x: NDArray) -> NDArray: @@ -151,13 +151,14 @@ def __init__( self, ops: Sequence[LinearOperator], nproc: int = 1, - forceflat: bool = None, - inoutengine: Optional[tuple] = None, - parallel_kind: str = "multiproc", - dtype: Optional[DTypeLike] = None, + forceflat: bool | None = None, + inoutengine: Tinoutengine | None = None, + parallel_kind: Tparallel_kind = "multiproc", + dtype: DTypeLike | None = None, ) -> None: if parallel_kind not in ["multiproc", "multithread"]: - raise ValueError("parallel_kind must be 'multiproc' or 'multithread'") + msg = "parallel_kind must be 'multiproc' or 'multithread'" + raise ValueError(msg) # identify dimensions self.ops = ops nops = np.zeros(len(self.ops), dtype=int) @@ -168,7 +169,8 @@ def __init__( self.nops = int(nops.sum()) mops = [oper.shape[1] for oper in self.ops] if len(set(mops)) > 1: - raise ValueError("operators have different number of columns") + msg = f"Operators have different number of columns - {mops}" + raise ValueError(msg) self.mops = int(mops[0]) self.nnops = np.insert(np.cumsum(nops), 0, 0) # define dims (check if all operators have the same, diff --git a/pylops/basicoperators/zero.py b/pylops/basicoperators/zero.py index c82b23818..d2fe70f48 100644 --- a/pylops/basicoperators/zero.py +++ b/pylops/basicoperators/zero.py @@ -1,6 +1,5 @@ __all__ = ["Zero"] -from typing import Optional, Union import numpy as np @@ -69,9 +68,9 @@ class Zero(LinearOperator): def __init__( self, - N: Union[int, InputDimsLike], - M: Optional[Union[int, InputDimsLike]] = None, - forceflat: bool = None, + N: int | InputDimsLike, + M: int | InputDimsLike | None = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "Z", ) -> None: @@ -83,11 +82,12 @@ def __init__( # N and M are tuples (nd-arrays) dims, dimsd = M, N else: - raise NotImplementedError( - f"N and M must have same type and equal to " - f"int, tuple, or list, instead their types" + msg = ( + "N and M must have same type and equal to " + "int, tuple, or list, instead their types" f" are type(N)={type(N)} and type(M)={type(M)}" ) + raise NotImplementedError(msg) super().__init__( dtype=np.dtype(dtype), dims=dims, diff --git a/pylops/config.py b/pylops/config.py index 07fb14243..59c098e22 100644 --- a/pylops/config.py +++ b/pylops/config.py @@ -15,9 +15,10 @@ disabled_ndarray_multiplication Disable ndarray multiplication within context. """ + +from collections.abc import Generator from contextlib import contextmanager from dataclasses import dataclass -from typing import Generator __all__ = [ "get_ndarray_multiplication", diff --git a/pylops/jaxoperator.py b/pylops/jaxoperator.py index d2b190475..097fb3119 100644 --- a/pylops/jaxoperator.py +++ b/pylops/jaxoperator.py @@ -96,9 +96,8 @@ def rmatvecad(self, x: JaxTypeIn, y: JaxTypeIn) -> JaxTypeOut: M, N = self.shape if x.shape != (M,) and x.shape != (M, 1): - raise ValueError( - f"Dimension mismatch. Got {x.shape}, but expected ({M},) or ({M}, 1)." - ) + msg = f"Dimension mismatch. Got {x.shape}, but expected ({M},) or ({M}, 1)." + raise ValueError(msg) y = self._rmatvecad(x, y) @@ -107,8 +106,9 @@ def rmatvecad(self, x: JaxTypeIn, y: JaxTypeIn) -> JaxTypeOut: elif x.ndim == 2: y = y.reshape(N, 1) else: - raise ValueError( - f"Invalid shape returned by user-defined rmatvecad(). " + msg = ( + "Invalid shape returned by user-defined rmatvecad(). " f"Expected 2-d ndarray or matrix, not {x.ndim}-d ndarray" ) + raise ValueError(msg) return y diff --git a/pylops/linearoperator.py b/pylops/linearoperator.py index 29e567457..286400d5a 100644 --- a/pylops/linearoperator.py +++ b/pylops/linearoperator.py @@ -1,4 +1,4 @@ -from __future__ import annotations, division +from __future__ import annotations __all__ = [ "LinearOperator", @@ -27,7 +27,7 @@ else: from scipy.sparse._sputils import isintlike, isshape -from typing import Callable, List, Optional, Sequence, Union +from collections.abc import Callable, Sequence from pylops import get_ndarray_multiplication from pylops.optimization.basic import cgls @@ -120,15 +120,15 @@ class LinearOperator(_LinearOperator): def __init__( self, - Op: Optional[Union[spLinearOperator, LinearOperator]] = None, - dtype: Optional[DTypeLike] = None, - shape: Optional[ShapeLike] = None, - dims: Optional[ShapeLike] = None, - dimsd: Optional[ShapeLike] = None, - clinear: Optional[bool] = None, - explicit: Optional[bool] = None, - forceflat: Optional[bool] = None, - name: Optional[str] = None, + Op: spLinearOperator | LinearOperator | None = None, + dtype: DTypeLike | None = None, + shape: ShapeLike | None = None, + dims: ShapeLike | None = None, + dimsd: ShapeLike | None = None, + clinear: bool | None = None, + explicit: bool | None = None, + forceflat: bool | None = None, + name: str | None = None, ) -> None: if Op is not None: self.Op = Op @@ -178,12 +178,11 @@ def shape(self): dims = getattr(self, "_dims", None) dimsd = getattr(self, "_dimsd", None) if dims is None or dimsd is None: # Cannot find both dims and dimsd, error - raise AttributeError( - ( - f"'{self.__class__.__name__}' object has no attribute 'shape' " - "nor both fallback attributes ('dims', 'dimsd')" - ) + msg = ( + f"'{self.__class__.__name__}' object has no attribute 'shape' " + "nor both fallback attributes ('dims', 'dimsd')" ) + raise AttributeError(msg) _shape = (int(np.prod(dimsd)), int(np.prod(dims))) self._shape = _shape # Update to not redo everything above on next call return _shape @@ -192,16 +191,20 @@ def shape(self): def shape(self, new_shape: ShapeLike) -> None: new_shape = tuple(new_shape) if not isshape(new_shape): - raise ValueError(f"invalid shape %{new_shape:r} (must be 2-d)") + msg = f"Invalid shape; must be 2-d tuple of integers, got {new_shape}" + raise ValueError(msg) dims = getattr(self, "_dims", None) dimsd = getattr(self, "_dimsd", None) if dims is not None and dimsd is not None: # Found dims and dimsd if np.prod(dimsd) != new_shape[0] and np.prod(dims) != new_shape[1]: - raise ValueError("New shape incompatible with dims and dimsd") + msg = "New shape incompatible with dims and dimsd" + raise ValueError(msg) elif np.prod(dimsd) != new_shape[0]: - raise ValueError("New shape incompatible with dimsd") + msg = "New shape incompatible with dimsd" + raise ValueError(msg) elif np.prod(dims) != new_shape[1]: - raise ValueError("New shape incompatible with dims") + msg = "New shape incompatible with dims" + raise ValueError(msg) self._shape = new_shape @shape.deleter @@ -214,9 +217,11 @@ def dims(self): if _dims is None: shape = getattr(self, "_shape", None) if shape is None: - raise AttributeError( - f"'{self.__class__.__name__}' object has no attributes 'dims' or 'shape'" + msg = ( + f"'{self.__class__.__name__}' object has no " + "attributes 'dims' or 'shape'" ) + raise AttributeError(msg) _dims = (shape[1],) return _dims @@ -230,7 +235,8 @@ def dims(self, new_dims: ShapeLike) -> None: if np.prod(new_dims) == self.shape[1]: self._dims = new_dims else: - raise ValueError("dims incompatible with shape[1]") + msg = "dims incompatible with shape[1]" + raise ValueError(msg) @dims.deleter def dims(self): @@ -242,9 +248,11 @@ def dimsd(self): if _dimsd is None: shape = getattr(self, "_shape", None) if shape is None: - raise AttributeError( - f"'{self.__class__.__name__}' object has no attributes 'dimsd' or 'shape'" + msg = ( + f"'{self.__class__.__name__}' object has " + "no attributes 'dimsd' or 'shape'" ) + raise AttributeError(msg) _dimsd = (shape[0],) return _dimsd @@ -258,7 +266,8 @@ def dimsd(self, new_dimsd: ShapeLike) -> None: if np.prod(new_dimsd) == self.shape[0]: self._dimsd = new_dimsd else: - raise ValueError("dimsd incompatible with shape[0]") + msg = "dimsd incompatible with shape[0]" + raise ValueError(msg) @dimsd.deleter def dimsd(self): @@ -315,12 +324,13 @@ def name(self, new_name: str) -> None: def name(self): del self._name - def __mul__(self, x: Union[float, LinearOperator]) -> LinearOperator: + def __mul__(self, x: float | LinearOperator) -> LinearOperator: return self.dot(x) def __matmul__(self, other): if np.isscalar(other): - raise ValueError("Scalar not allowed, use * instead") + msg = "Scalar not allowed, use * instead" + raise ValueError(msg) return self.__mul__(other) def __rmul__(self, x: float) -> LinearOperator: @@ -340,7 +350,8 @@ def __rmul__(self, x: float) -> LinearOperator: def __rmatmul__(self, other): if np.isscalar(other): - raise ValueError("Scalar not allowed, use * instead") + msg = "Scalar not allowed, use * instead" + raise ValueError(msg) return self.__rmul__(other) def __pow__(self, p: int) -> LinearOperator: @@ -379,9 +390,8 @@ def __add__(self, x: LinearOperator) -> LinearOperator: elif self.forceflat is not None and Opx.forceflat is not None: # Define forceflat only if differing, otherwise raise error if self.forceflat != Opx.forceflat: - raise ValueError( - f"Operators have conflicting forceflat {Op.forceflat} != {Opx.forceflat}" - ) + msg = f"Operators have conflicting forceflat {Op.forceflat} != {Opx.forceflat}" + raise ValueError(msg) Op.forceflat = self.forceflat else: # Only one of them is None Op.forceflat = ( @@ -425,7 +435,7 @@ def __repr__(self): def _copy_attributes( self, dest: LinearOperator, - exclude: Optional[List[str]] = None, + exclude: list[str] | None = None, ) -> None: """Copy attributes from one LinearOperator to another""" if exclude is None: @@ -522,9 +532,8 @@ def matvec(self, x: NDArray) -> NDArray: M, N = self.shape if x.shape != (N,) and x.shape != (N, 1): - raise ValueError( - f"Dimension mismatch. Got {x.shape}, but expected ({N},) or ({N}, 1)." - ) + msg = f"Dimension mismatch. Got {x.shape}, but expected ({N},) or ({N}, 1)." + raise ValueError(msg) y = self._matvec(x) @@ -533,7 +542,8 @@ def matvec(self, x: NDArray) -> NDArray: elif x.ndim == 2: y = y.reshape(M, 1) else: - raise ValueError("Invalid shape returned by user-defined matvec()") + msg = "Invalid shape returned by user-defined matvec()" + raise ValueError(msg) return y @count(forward=False) @@ -558,9 +568,8 @@ def rmatvec(self, x: NDArray) -> NDArray: M, N = self.shape if x.shape != (M,) and x.shape != (M, 1): - raise ValueError( - f"Dimension mismatch. Got {x.shape}, but expected ({M},) or ({M}, 1)." - ) + msg = f"Dimension mismatch. Got {x.shape}, but expected ({M},) or ({M}, 1)." + raise ValueError(msg) y = self._rmatvec(x) @@ -569,7 +578,8 @@ def rmatvec(self, x: NDArray) -> NDArray: elif x.ndim == 2: y = y.reshape(N, 1) else: - raise ValueError("Invalid shape returned by user-defined rmatvec()") + msg = "Invalid shape returned by user-defined rmatvec()" + raise ValueError(msg) return y @count(forward=True, matmat=True) @@ -592,9 +602,11 @@ def matmat(self, X: NDArray) -> NDArray: """ if X.ndim != 2: - raise ValueError(f"Expected 2-d ndarray or matrix, not {X.ndim}-d ndarray") + msg = f"Expected 2-d ndarray or matrix, not {X.ndim}-d ndarray" + raise ValueError(msg) if X.shape[0] != self.shape[1]: - raise ValueError(f"Dimension mismatch: {self.shape}, {X.shape}") + msg = f"Dimension mismatch: {self.shape}, {X.shape}" + raise ValueError(msg) Y = self._matmat(X) return Y @@ -618,9 +630,11 @@ def rmatmat(self, X: NDArray) -> NDArray: """ if X.ndim != 2: - raise ValueError(f"Expected 2-d ndarray or matrix, not {X.ndim}-d ndarray") + msg = f"Expected 2-d ndarray or matrix, not {X.ndim}-d ndarray" + raise ValueError(msg) if X.shape[0] != self.shape[0]: - raise ValueError(f"Dimension mismatch: {self.shape}, {X.shape}") + f"Dimension mismatch: {self.shape}, {X.shape}" + raise ValueError(msg) Y = self._rmatmat(X) return Y @@ -652,9 +666,8 @@ def dot(self, x: NDArray) -> NDArray: elif self.forceflat is not None and Opx.forceflat is not None: # Define forceflat only if differing, otherwise raise error if self.forceflat != Opx.forceflat: - raise ValueError( - f"Operators have conflicting forceflat {Op.forceflat} != {Opx.forceflat}" - ) + msg = f"Operators have conflicting forceflat: {Op.forceflat} != {Opx.forceflat}" + raise ValueError(msg) Op.forceflat = self.forceflat else: # Only one of them is None Op.forceflat = ( @@ -674,10 +687,11 @@ def dot(self, x: NDArray) -> NDArray: if not get_ndarray_multiplication() and ( x.ndim > 2 or (x.ndim == 2 and x.shape[0] != self.shape[1]) ): - raise ValueError( - "Operator can only be applied 1D vectors or 2D matrices. " + msg = ( + "Operator can only be applied to 1D vectors or 2D matrices. " "Enable ndarray multiplication with pylops.set_ndarray_multiplication(True)." ) + raise ValueError(msg) is_dims_shaped = x.shape == self.dims is_dims_shaped_matrix = len(x.shape) > 1 and x.shape[:-1] == self.dims if is_dims_shaped: @@ -705,16 +719,14 @@ def dot(self, x: NDArray) -> NDArray: y = y.reshape((*self.dimsd, -1)) return y else: - raise ValueError( - ( - "Wrong shape.\nFor vector multiplication, expects either a 1d " - "array or, an ndarray of size `dims` when `dims` and `dimsd` " - "both are available.\n" - "For matrix multiplication, expects a 2d array with its first " - f"dimension is equal to {self.shape[1]}.\n" - f"Instead, received an array of shape {x.shape}." - ) + msg = ( + "Wrong shape.\nFor vector multiplication, expects either a 1d " + "array or, an ndarray of size `dims` when `dims` and `dimsd` " + "both are available.\n For matrix multiplication, expects a 2d " + f"array with its first dimension is equal to {self.shape[1]}.\n" + f"Instead, received an array of shape {x.shape}." ) + raise ValueError(msg) def div( self, @@ -885,11 +897,11 @@ def tosparse(self) -> NDArray: def eigs( self, - neigs: Optional[int] = None, + neigs: int | None = None, symmetric: bool = False, - niter: Optional[int] = None, + niter: int | None = None, uselobpcg: bool = False, - **kwargs_eig: Union[int, float, str], + **kwargs_eig: int | float | str, ) -> NDArray: r"""Most significant eigenvalues of linear operator. @@ -964,11 +976,11 @@ def eigs( eigenvalues = eigvals(self.A) else: if not symmetric and np.iscomplexobj(self) and uselobpcg: - raise ValueError( - "cannot use scipy.sparse.linalg.lobpcg " - "for non-symmetric square matrices of " - "complex type..." + msg = ( + "Cannot use scipy.sparse.linalg.lobpcg " + "for non-symmetric square matrices of complex type..." ) + raise ValueError(msg) if symmetric and uselobpcg: X = np.random.rand(self.shape[0], neigs).astype(self.dtype) eigenvalues = sp_lobpcg( @@ -1011,11 +1023,11 @@ def eigs( neigs = self.shape[1] - 2 if self.shape[0] == self.shape[1]: if not symmetric and np.iscomplexobj(self) and uselobpcg: - raise ValueError( - "cannot use scipy.sparse.linalg.lobpcg for " - "non symmetric square matrices of " - "complex type..." + msg = ( + "Cannot use scipy.sparse.linalg.lobpcg for " + "non symmetric square matrices of complex type..." ) + raise ValueError(msg) if symmetric and uselobpcg: X = np.random.rand(self.shape[0], neigs).astype(self.dtype) eigenvalues = sp_lobpcg(self, X=X, maxiter=niter, **kwargs_eig)[0] @@ -1040,7 +1052,7 @@ def eigs( def cond( self, uselobpcg: bool = False, - **kwargs_eig: Union[int, float, str], + **kwargs_eig: int | float | str, ) -> NDArray: r"""Condition number of linear operator. @@ -1174,8 +1186,8 @@ def toimag(self, forw: bool = True, adj: bool = True) -> LinearOperator: def trace( self, - neval: Optional[int] = None, - method: Optional[str] = None, + neval: int | None = None, + method: str | None = None, backend: str = "numpy", **kwargs_trace, ) -> float: @@ -1222,7 +1234,8 @@ def trace( If the ``method`` is not one of the available methods. """ if self.shape[0] != self.shape[1]: - raise ValueError("operator is not square.") + msg = f"Operator must be square, got {self.shape}" + raise ValueError(msg) ncp = get_module(backend) @@ -1240,7 +1253,8 @@ def trace( elif method_l == "na-hutch++": return trace_nahutchpp(self, neval=neval, backend=backend, **kwargs_trace) else: - raise NotImplementedError(f"method {method} not available.") + msg = f"`method={method}` not available." + raise NotImplementedError(msg) def reset_count(self) -> None: """Reset counters @@ -1256,7 +1270,7 @@ def reset_count(self) -> None: def _get_dtype( operators: Sequence[LinearOperator], - dtypes: Optional[Sequence[DTypeLike]] = None, + dtypes: Sequence[DTypeLike] | None = None, ) -> DTypeLike: if dtypes is None: dtypes = [] @@ -1275,9 +1289,11 @@ def __init__( alpha: float, ) -> None: if not isinstance(A, LinearOperator): - raise ValueError("LinearOperator expected as A") + msg = "LinearOperator expected as A" + raise ValueError(msg) if not np.isscalar(alpha): - raise ValueError("scalar expected as alpha") + msg = "Scalar expected as alpha" + raise ValueError(msg) if isinstance(alpha, complex) and not np.iscomplexobj( np.ones(1, dtype=A.dtype) ): @@ -1287,7 +1303,7 @@ def __init__( # if both the scalar and operator are of real or complex type, use type # of the operator dtype = A.dtype - super(_ScaledLinearOperator, self).__init__(dtype=dtype, shape=A.shape) + super().__init__(dtype=dtype, shape=A.shape) self.args = (A, alpha) def _matvec(self, x: NDArray) -> NDArray: @@ -1312,8 +1328,9 @@ class _ConjLinearOperator(LinearOperator): def __init__(self, Op: LinearOperator) -> None: if not isinstance(Op, LinearOperator): - raise TypeError("Op must be a LinearOperator") - super(_ConjLinearOperator, self).__init__(Op, shape=Op.shape) + msg = "Op must be a LinearOperator" + raise TypeError(msg) + super().__init__(Op, shape=Op.shape) self.Op = Op def _matvec(self, x: NDArray) -> NDArray: @@ -1339,8 +1356,9 @@ def __init__( cols: InputDimsLike, ) -> None: if not isinstance(Op, LinearOperator): - raise TypeError("Op must be a LinearOperator") - super(_ColumnLinearOperator, self).__init__(Op) + msg = "Op must be a LinearOperator" + raise TypeError(msg) + super().__init__(Op) self.Op = Op self.cols = cols self._shape = (Op.shape[0], len(cols)) @@ -1372,7 +1390,7 @@ class _AdjointLinearOperator(LinearOperator): def __init__(self, A: LinearOperator): shape = (A.shape[1], A.shape[0]) - super(_AdjointLinearOperator, self).__init__(shape=shape, dtype=A.dtype) + super().__init__(shape=shape, dtype=A.dtype) self.A = A self.args = (A,) @@ -1394,7 +1412,7 @@ class _TransposedLinearOperator(LinearOperator): def __init__(self, A: LinearOperator): shape = (A.shape[1], A.shape[0]) - super(_TransposedLinearOperator, self).__init__(shape=shape, dtype=A.dtype) + super().__init__(shape=shape, dtype=A.dtype) self.A = A self.args = (A,) @@ -1416,11 +1434,13 @@ class _ProductLinearOperator(LinearOperator): def __init__(self, A: LinearOperator, B: LinearOperator): if not isinstance(A, LinearOperator) or not isinstance(B, LinearOperator): - raise ValueError( - f"both operands have to be a LinearOperator{type(A)} {type(B)}" + msg = ( + f"Both operands have to be a LinearOperator - got {type(A)}, {type(B)}" ) + raise ValueError(msg) if A.shape[1] != B.shape[0]: - raise ValueError("cannot add %r and %r: shape mismatch" % (A, B)) + msg = f"Cannot add {A} and {B}: shape mismatch" + raise ValueError(msg) super().__init__(dtype=_get_dtype([A, B]), shape=(A.shape[0], B.shape[1])) self.args = (A, B) @@ -1448,13 +1468,13 @@ def __init__( B: LinearOperator, ) -> None: if not isinstance(A, LinearOperator) or not isinstance(B, LinearOperator): - raise ValueError("both operands have to be a LinearOperator") + msg = "Both operands have to be a LinearOperator" + raise ValueError(msg) if A.shape != B.shape: - raise ValueError("cannot add %r and %r: shape mismatch" % (A, B)) + msg = f"Cannot add {A} to {B}: shape mismatch" + raise ValueError(msg) self.args = (A, B) - super(_SumLinearOperator, self).__init__( - dtype=_get_dtype([A, B]), shape=A.shape - ) + super().__init__(dtype=_get_dtype([A, B]), shape=A.shape) def _matvec(self, x: NDArray) -> NDArray: return self.args[0].matvec(x) + self.args[1].matvec(x) @@ -1476,13 +1496,16 @@ def _adjoint(self) -> LinearOperator: class _PowerLinearOperator(LinearOperator): def __init__(self, A: LinearOperator, p: int) -> None: if not isinstance(A, LinearOperator): - raise ValueError("LinearOperator expected as A") + msg = "LinearOperator expected as A" + raise ValueError(msg) if A.shape[0] != A.shape[1]: - raise ValueError("square LinearOperator expected, got %r" % A) + msg = f"Square LinearOperator expected, got {A}" + raise ValueError(msg) if not isintlike(p) or p < 0: - raise ValueError("non-negative integer expected as p") + msg = "Non-negative integer expected as p" + raise ValueError(msg) - super(_PowerLinearOperator, self).__init__(dtype=A.dtype, shape=A.shape) + super().__init__(dtype=A.dtype, shape=A.shape) self.args = (A, p) def _power(self, fun: Callable, x: NDArray) -> NDArray: @@ -1525,8 +1548,9 @@ def __init__( real: bool = True, ) -> None: if not isinstance(Op, LinearOperator): - raise TypeError("Op must be a LinearOperator") - super(_RealImagLinearOperator, self).__init__(Op, shape=Op.shape) + msg = "Op must be a LinearOperator" + raise TypeError(msg) + super().__init__(Op, shape=Op.shape) self.Op = Op self.real = real self.forw = forw @@ -1554,7 +1578,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: return y -def aslinearoperator(Op: Union[spLinearOperator, LinearOperator]) -> LinearOperator: +def aslinearoperator(Op: spLinearOperator | LinearOperator) -> LinearOperator: """Return Op as a LinearOperator. Converts any operator compatible with pylops definition of LinearOperator into a pylops diff --git a/pylops/medical/__init__.py b/pylops/medical/__init__.py index b11b398f0..2771aac33 100644 --- a/pylops/medical/__init__.py +++ b/pylops/medical/__init__.py @@ -8,11 +8,12 @@ A list of operators present in pylops.medical: CT2D 2D Computerized Tomography. + MRI2D 2D Magnetic Resonance Imaging. """ from .ct import * +from .mri import * -__all__ = [ - "CT2D", -] + +__all__ = ["CT2D", "MRI2D"] diff --git a/pylops/medical/ct.py b/pylops/medical/ct.py index 53de16f7c..980f5d5e3 100644 --- a/pylops/medical/ct.py +++ b/pylops/medical/ct.py @@ -3,7 +3,6 @@ ] import warnings -from typing import Optional import numpy as np @@ -11,7 +10,14 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module, get_module_name, to_numpy from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import ( + DTypeLike, + InputDimsLike, + NDArray, + Tctengine, + Tctprojectortype, + Tctprojgeom, +) astra_message = deps.astra_import("the astra module") @@ -63,6 +69,14 @@ class CT2D(LinearOperator): Attributes ---------- + dims : :obj:`tuple` + Shape of the array after the adjoint, but before flattening. + + For example, ``x_reshaped = (Op.H * y.ravel()).reshape(Op.dims)``. + dimsd : :obj:`tuple` + Shape of the array after the forward, but before flattening. + + For example, ``y_reshaped = (Op * x.ravel()).reshape(Op.dimsd)``. shape : :obj:`tuple` Operator shape explicit : :obj:`bool` @@ -102,11 +116,11 @@ def __init__( det_width: float, det_count: int, thetas: NDArray, - engine: str, - proj_geom_type: str = "parallel", - source_origin_dist: Optional[float] = None, - origin_detector_dist: Optional[float] = None, - projector_type: Optional[str] = None, + engine: Tctengine, + proj_geom_type: Tctprojgeom = "parallel", + source_origin_dist: float | None = None, + origin_detector_dist: float | None = None, + projector_type: Tctprojectortype | None = None, dtype: DTypeLike = "float32", name: str = "C", ) -> None: @@ -128,18 +142,20 @@ def __init__( projector_type = "strip" # fanflat geometry projectors need an appropriate suffix (unless it's "cuda") if projector_type == "cuda": - warnings.warn("'cuda' projector type specified with 'cpu' engine.") + warnings.warn( + "'cuda' projector type specified with 'cpu' engine.", stacklevel=2 + ) elif proj_geom_type == "fanflat": projector_type += "_fanflat" elif engine == "cuda": if projector_type in [None, "cuda"]: projector_type = "cuda" else: - raise ValueError( - "Only 'cuda' projector type is supported for 'cuda' engine." - ) + msg = f"Only 'cuda' projector type is supported for 'cuda' engine. Got {projector_type}" + raise ValueError(msg) else: - raise NotImplementedError("Engine must be 'cpu' or 'cuda'") + msg = f"engine must be 'cpu' or 'cuda', got {engine}" + raise NotImplementedError(msg) self.projector_type = projector_type # create create volume and projection geometries as well as projector @@ -202,7 +218,8 @@ def _astra_project(self, x, mode): if x_dtype != ncp.float32: warnings.warn( "CT2D operator received input that is not of float32 dtype. It will " - "be cast into float32 internally for ASTRA compatibility." + "be cast into float32 internally for ASTRA compatibility.", + stacklevel=2, ) x = x.astype(ncp.float32) if self.engine == "cpu": @@ -220,7 +237,8 @@ def _astra_project(self, x, mode): # should throw an error later warnings.warn( "CT2D operator received input that is not of contiguous. It will be " - "cast into a contiguous array internally for ASTRA compatibility." + "cast into a contiguous array internally for ASTRA compatibility.", + stacklevel=2, ) x = ncp.ascontiguousarray(x) x = ncp.expand_dims(x, axis=0) diff --git a/pylops/medical/mri.py b/pylops/medical/mri.py new file mode 100644 index 000000000..3b53d89f5 --- /dev/null +++ b/pylops/medical/mri.py @@ -0,0 +1,310 @@ +__all__ = [ + "MRI2D", +] + +import warnings + +import numpy as np + +from pylops import LinearOperator +from pylops.basicoperators import Diagonal, Restriction +from pylops.signalprocessing import FFT2D, Bilinear +from pylops.utils.backend import get_module +from pylops.utils.typing import ( + DTypeLike, + InputDimsLike, + NDArray, + Tfftengine_nsm, + Tmriengine, + Tmrimask, +) + + +class MRI2D(LinearOperator): + r"""2D Magnetic Resonance Imaging + + Apply 2D Magnetic Resonance Imaging operator to obtain a k-space data (i.e., + undersampled Fourier representation of the model). + + Parameters + ---------- + dims : :obj:`list` or :obj:`int` + Number of samples for each dimension. Must be 2-dimensional and of size + :math:`n_y \times n_x` + mask : :obj:`str` or :obj:`numpy.ndarray` + Mask to be applied in the Fourier domain: + + - :obj:`numpy.ndarray`: a 2-dimensional array of size :math:`n_y \times n_x` + with 1 in the selected locations; + - ``vertical-reg``: mask with vertical lines (regularly sampled around the + second dimension); + - ``vertical-uni``: mask with vertical lines (irregularly sampled around the + second dimension, with lines drawn from a uniform distribution); + - ``radial-reg``: mask with radial lines (regularly sampled around the + :math:`-\pi/\pi` angles); + - ``radial-uni``: mask with radial lines (irregularly sampled around the + :math:`-\pi/\pi` angles, with angles drawn from a uniform distribution); + nlines : :obj:`int`, optional + Number of lines in the k-space. Not required if ``mask`` is passed as array. + perc_center : :obj:`float`, optional + Percentage of total lines to retain in the center. Not required if ``mask`` + is passed as array. + engine : :obj:`str`, optional + Engine used for computation (``numpy`` or ``jax``). + fft_engine : :obj:`str`, optional + Engine used for fft computation (``numpy`` or ``scipy`` or ``mkl_fft``). + dtype : :obj:`str`, optional + Type of elements in input array. + name : :obj:`str`, optional + Name of operator (to be used by :func:`pylops.utils.describe.describe`) + **kwargs_fft + Arbitrary keyword arguments to be passed to the selected fft method + + Attributes + ---------- + mask : :obj:`numpy.ndarray` + Mask applied in the Fourier domain. + ROp : :obj:`pylops.Restriction` or :obj:`pylops.Diagonal` or :obj:`pylops.signalprocessing.Bilinear` + Operator that applies the mask in the Fourier domain. + dims : :obj:`tuple` + Shape of the array after the adjoint, but before flattening. + + For example, ``x_reshaped = (Op.H * y.ravel()).reshape(Op.dims)``. + dimsd : :obj:`tuple` + Shape of the array after the forward, but before flattening. + + For example, ``y_reshaped = (Op * x.ravel()).reshape(Op.dimsd)``. + shape : :obj:`tuple` + Operator shape + explicit : :obj:`bool` + Operator contains a matrix that can be solved + explicitly (``True``) or not (``False``) + + Raises + ------ + ValueError + If ``mask`` is not one of the accepted strings or a numpy array. + ValueError + If ``fft_engine`` is neither ``numpy``, ``fftw``, nor ``scipy``. + ValueError + If ``nlines`` or ``perc_center`` are not specified when providing ``mask`` + as string. + ValueError + If ``perc_center`` is greater than 0 when using ``vertical-reg`` mask. + + Notes + ----- + The MRI2D operator applies 2-dimensional Fourier transform to the model, + followed by a subsampling with a given ``mask``: + + .. math:: + \mathbf{d} = \mathbf{R} \mathbf{F}_{k} \mathbf{m} + + where :math:`\mathbf{F}_{k}` is the 2-dimensional Fourier transform and + :math:`\mathbf{R}` is the mask. + + """ + + def __init__( + self, + dims: InputDimsLike, + mask: Tmrimask | NDArray, + nlines: int | None = None, + perc_center: float | None = 0.1, + engine: Tmriengine = "numpy", + fft_engine: Tfftengine_nsm = "numpy", + dtype: DTypeLike = "complex128", + name: str = "M", + **kwargs_fft, + ) -> None: + self._mask_type = mask if isinstance(mask, str) else "mask" + self.engine = engine + self.fft_engine = fft_engine + + # Validate inputs + if engine == "jax" and fft_engine != "numpy": + warnings.warn( + "When engine='jax', fft_engine is forced to 'numpy'", stacklevel=2 + ) + self.fft_engine = "numpy" + if isinstance(mask, str) and mask not in ( + "vertical-reg", + "vertical-uni", + "radial-reg", + "radial-uni", + ): + msg = ( + "`mask` must be a numpy array, 'vertical-reg', 'vertical-uni', " + f"'radial-reg', or 'radial-uni', got {mask}" + ) + raise ValueError(msg) + if self.fft_engine not in ["numpy", "scipy", "mkl_fft"]: + msg = "`fft_engine` must be 'numpy', 'scipy', or 'mkl_fft'" + raise ValueError(msg) + if isinstance(mask, str) and (nlines is None or perc_center is None): + msg = ( + "`nlines` and `perc_center` must be specified providing mask as string" + ) + raise ValueError(msg) + if isinstance(mask, str) and mask == "vertical-reg" and perc_center > 0.0: + msg = "`perc_center` must be 0.0 when using `mask=vertical-reg`" + raise ValueError(msg) + + # Create mask + self.mask: NDArray + if self._mask_type == "mask": + self.mask = mask + elif "vertical" in self._mask_type: + self.mask = self._vertical_mask( + dims, + nlines, + perc_center, + uniform=True if "reg" in self._mask_type else False, + ) + elif "radial" in self._mask_type: + self.mask = self._radial_mask( + dims, nlines, uniform=True if "reg" in self._mask_type else False + ) + + # Convert mask to appropriate backend + ncp = get_module(self.engine) + self.mask = ncp.asarray(self.mask) + + # Create operator + self.ROp, Op = self._calc_op( + dims=dims, + mask_type=mask if isinstance(mask, str) else "mask", + mask=self.mask, + fft_engine=self.fft_engine, + dtype=dtype, + **kwargs_fft, + ) + super().__init__(Op=Op, name=name) + + @staticmethod + def _vertical_mask( + dims: InputDimsLike, nlines: int, perc_center: float, uniform: bool = True + ) -> NDArray: + """Create vertical mask""" + nlines_center = int(perc_center * dims[1]) + if (nlines + nlines_center) > dims[1]: + msg = ( + "`nlines` and `perc_center` produce a number of lines " + "greater than the total number of lines of the k-space" + f"({nlines + nlines_center}>{dims[1]})" + ) + raise ValueError(msg) + + if nlines_center == 0: + # No lines from the center + if uniform: + step = dims[1] // nlines + mask = np.arange(0, dims[1], step)[:nlines] + else: + rng = np.random.default_rng() + mask = rng.choice(np.arange(dims[1]), nlines, replace=False) + else: + # Lines taken from the center + istart_center = dims[1] // 2 - nlines_center // 2 + iend_center = dims[1] // 2 + nlines_center // 2 + (nlines_center % 2) + ilines_center = np.arange(istart_center, iend_center) + + # Other lines + if uniform: + nlines_left = nlines // 2 + nlines % 2 + step_left = istart_center // nlines_left + ilines_left = np.arange(0, istart_center, step_left)[:nlines_left] + nlines_right = nlines // 2 + step_right = (dims[1] - iend_center) // nlines_left + ilines_right = np.arange(iend_center, dims[1], step_right)[ + :nlines_right + ] + mask = np.sort(np.hstack((ilines_left, ilines_center, ilines_right))) + else: + rng = np.random.default_rng() + ilines_other = np.hstack( + (np.arange(0, istart_center), np.arange(iend_center, dims[1])) + ) + ilines_other = rng.choice(ilines_other, nlines, replace=False) + mask = np.sort(np.hstack((ilines_center, ilines_other))) + return mask + + @staticmethod + def _radial_mask(dims: InputDimsLike, nlines: int, uniform: bool = True) -> NDArray: + """Create radial mask""" + npoints_per_line = dims[1] - 1 + + # Define angles + if uniform: + thetas = np.linspace(0, np.pi, nlines, endpoint=False) + else: + rng = np.random.default_rng() + thetas = rng.uniform(-np.pi, np.pi, nlines) + + # Create lines + lines = [] + for theta in thetas: + if theta == np.pi / 2: + # Create vertical line + xline = np.zeros(npoints_per_line) + yline = np.linspace( + -dims[1] // 2 + 1, dims[1] // 2 - 1, npoints_per_line, endpoint=True + ) + elif np.tan(theta) >= 0: + # Create lines for positive angles + xmax = min(dims[1] // 2, (dims[0] // 2) / np.tan(theta)) + xline = np.linspace( + -xmax, + min(xmax, dims[0] // 2 - 1 - (dims[0] + 1) % 2), + npoints_per_line, + endpoint=True, + ) + yline = np.tan(theta) * xline + else: + # Create lines for negative angles + xmin = max(-dims[1] // 2 + 1, (dims[0] // 2) / np.tan(theta)) + xline = np.linspace( + xmin, min(-xmin, dims[0] // 2 - 1), npoints_per_line, endpoint=True + ) + yline = np.tan(theta) * xline + xline, yline = xline + dims[0] // 2, yline + dims[1] // 2 + lines.append(np.vstack((xline, yline))) + mask = np.concatenate(lines, axis=1) + # Remove points beyond domain allowed by Bilinear operator + # and duplicate points + mask = mask[:, mask[0] < dims[0] - 1] + mask = mask[:, mask[1] < dims[1] - 1] + mask = np.unique(mask, axis=1) + return mask + + def _matvec(self, x: NDArray) -> NDArray: + return super()._matvec(x) + + def _rmatvec(self, x: NDArray) -> NDArray: + return super()._rmatvec(x) + + @staticmethod + def _calc_op( + dims: InputDimsLike, + mask_type: str, + mask: NDArray, + fft_engine: Tfftengine_nsm, + dtype: DTypeLike, + **kwargs_fft, + ): + """Calculate MRI operator""" + fop = FFT2D( + dims, + nffts=dims, + fftshift_after=True, + engine=fft_engine, + dtype=dtype, + **kwargs_fft, + ) + if mask_type == "mask": + rop = Diagonal(mask, dtype=dtype) + elif "vertical" in mask_type: + rop = Restriction(dims, mask, axis=-1, forceflat=True, dtype=dtype) + elif "radial" in mask_type: + rop = Bilinear(mask, dims, dtype=dtype) + return rop, rop @ fop diff --git a/pylops/optimization/__init__.py b/pylops/optimization/__init__.py index 20b817aca..80ccd8fbb 100755 --- a/pylops/optimization/__init__.py +++ b/pylops/optimization/__init__.py @@ -5,7 +5,7 @@ The subpackage optimization provides an extensive set of solvers to be used with PyLops linear operators. -A list of least-squares solvers in pylops.optimization.solver: +A list of least-squares solvers in pylops.optimization.basic: cg Conjugate gradient. cgls Conjugate gradient least-squares. @@ -26,7 +26,7 @@ spgl1 Spectral Projected-Gradient for L1 norm. splitbregman Split Bregman for mixed L2-L1 norms. -Note that these solvers are thin wrappers over class-based solvers (new in v2), which can be accessed from -submodules with equivalent name and suffix c. +Note that these solvers are thin wrappers over class-based solvers (new in v2), which can be +accessed from submodules with equivalent name and prefix cls_. """ diff --git a/pylops/optimization/basesolver.py b/pylops/optimization/basesolver.py index b965b926d..6b4faafa8 100644 --- a/pylops/optimization/basesolver.py +++ b/pylops/optimization/basesolver.py @@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any from pylops.optimization.callback import Callbacks -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tmemunit if TYPE_CHECKING: from pylops.linearoperator import LinearOperator @@ -46,7 +46,7 @@ class Solver(metaclass=ABCMeta): Parameters ---------- Op : :obj:`pylops.LinearOperator` - Operator to invert of + Operator to invert callbacks : :obj:`pylops.optimization.callback.Callbacks` Callbacks object used to implement custom callbacks @@ -88,10 +88,10 @@ def _print_solver(self, text: str = "", nbar: int = 80) -> None: f"The Operator Op has {self.Op.shape[0]} rows and {self.Op.shape[1]} cols" ) - def _print_setup(self, *args: Any, **kwargs: Any) -> None: + def _print_setup(self, *args: Any, **kwargs: Any) -> None: # noqa: B027 pass - def _print_step(self, *args: Any, **kwargs: Any) -> None: + def _print_step(self, *args: Any, **kwargs: Any) -> None: # noqa: B027 pass def _print_finalize(self, *args: Any, nbar: int = 80, **kwargs: Any) -> None: @@ -153,14 +153,15 @@ def _setpreallocate(self, preallocate: bool) -> None: if preallocate and self.isjax: warnings.warn( "Preallocation is not supported for JAX arrays. " - "Setting preallocate to False." + "Setting preallocate to False.", + stacklevel=2, ) @abstractmethod def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -309,7 +310,7 @@ def solve( """ pass - def callback( + def callback( # noqa: B027 self, x: NDArray, *args, @@ -330,14 +331,14 @@ def callback( -------- >>> import numpy as np >>> from pylops.basicoperators import Identity - >>> from pylops.optimization.solver import CG + >>> from pylops.optimization.cls_basic import CG >>> def callback(x): ... print(f"Running callback, current solution {x}") ... - >>> I = Identity(10) - >>> I + >>> IOp = Identity(10) + >>> IOp <10x10 Identity with dtype=float64> - >>> cgsolve = CG(I, np.arange(10)) + >>> cgsolve = CG(IOp) >>> cgsolve.callback = callback >>> x = np.ones(10) diff --git a/pylops/optimization/basic.py b/pylops/optimization/basic.py index 49f02f979..9291b5e79 100644 --- a/pylops/optimization/basic.py +++ b/pylops/optimization/basic.py @@ -4,7 +4,8 @@ "lsqr", ] -from typing import TYPE_CHECKING, Callable, Optional, Tuple +from collections.abc import Callable +from typing import TYPE_CHECKING from pylops.optimization.callback import CostToDataCallback, CostToInitialCallback from pylops.optimization.cls_basic import CG, CGLS, LSQR @@ -19,16 +20,16 @@ def cg( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, tol: float = 1e-4, rtol: float = 0.0, rtol1: float = 0.0, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, NDArray]: +) -> tuple[NDArray, int, NDArray]: r"""Conjugate gradient Solve a square system of equations given an operator ``Op`` and @@ -111,17 +112,17 @@ def cg( def cgls( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, damp: float = 0.0, tol: float = 1e-4, rtol: float = 0.0, rtol1: float = 0.0, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, int, float, float, NDArray]: +) -> tuple[NDArray, int, int, float, float, NDArray]: r"""Conjugate gradient least squares Solve an overdetermined system of equations given an operator ``Op`` and @@ -221,7 +222,7 @@ def cgls( def lsqr( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, damp: float = 0.0, atol: float = 1e-08, btol: float = 1e-08, @@ -229,10 +230,10 @@ def lsqr( niter: int = 10, calc_var: bool = True, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, int, float, float, float, float, float, float, float, NDArray]: +) -> tuple[NDArray, int, int, float, float, float, float, float, float, float, NDArray]: r"""LSQR Solve an overdetermined system of equations given an operator ``Op`` and diff --git a/pylops/optimization/callback.py b/pylops/optimization/callback.py index 93d86c0cf..440a15034 100644 --- a/pylops/optimization/callback.py +++ b/pylops/optimization/callback.py @@ -6,7 +6,8 @@ "MetricsCallback", ] -from typing import TYPE_CHECKING, Dict, List, Optional, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING, Optional import numpy as np @@ -248,7 +249,7 @@ def __init__( self.xtrue = xtrue self.Op = Op self.which = which - self.metrics: Dict[str, List] = {} + self.metrics: dict[str, list] = {} if "mae" in self.which: self.metrics["mae"] = [] if "mse" in self.which: diff --git a/pylops/optimization/cls_basic.py b/pylops/optimization/cls_basic.py index 92f1ab9ff..4f47565ff 100644 --- a/pylops/optimization/cls_basic.py +++ b/pylops/optimization/cls_basic.py @@ -5,7 +5,7 @@ ] import time -from typing import TYPE_CHECKING, List, Optional, Tuple, Union +from typing import TYPE_CHECKING import numpy as np @@ -17,7 +17,7 @@ to_numpy, to_numpy_conditional, ) -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tmemunit if TYPE_CHECKING: from pylops.linearoperator import LinearOperator @@ -97,7 +97,7 @@ def _print_step(self, x: NDArray) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -132,8 +132,8 @@ def memory_usage( def setup( self, y: NDArray, - x0: Optional[NDArray] = None, - niter: Optional[int] = None, + x0: NDArray | None = None, + niter: int | None = None, tol: float = 1e-4, preallocate: bool = False, show: bool = False, @@ -159,7 +159,6 @@ def setup( Pre-allocate all variables used by the solver. Note that if ``y`` is a JAX array, this option is ignored and variables are not pre-allocated since JAX does not support in-place operations. - show : :obj:`bool`, optional Display setup log @@ -196,7 +195,7 @@ def setup( self.c1 = self.ncp.empty_like(x) # create variables to track the residual norm and iterations - self.cost: List = [] + self.cost: list = [] self.cost.append(float(np.sqrt(self.kold))) self.iiter = 0 @@ -249,9 +248,9 @@ def step(self, x: NDArray, show: bool = False) -> NDArray: def run( self, x: NDArray, - niter: Optional[int] = None, + niter: int | None = None, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), ) -> NDArray: r"""Run solver @@ -277,7 +276,8 @@ def run( """ niter = self.niter if niter is None else niter if niter is None: - raise ValueError("niter must not be None") + msg = "`niter` must not be None" + raise ValueError(msg) while self.iiter < niter and self.kold > self.tol: showstep = ( True @@ -315,13 +315,13 @@ def finalize(self, show: bool = False) -> None: def solve( self, y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, tol: float = 1e-4, preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[NDArray, int, NDArray]: + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[NDArray, int, NDArray]: r"""Run entire solver Parameters @@ -463,7 +463,7 @@ def _print_step(self, x: NDArray) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -498,8 +498,8 @@ def memory_usage( def setup( self, y: NDArray, - x0: Optional[NDArray] = None, - niter: Optional[int] = None, + x0: NDArray | None = None, + niter: int | None = None, damp: float = 0.0, tol: float = 1e-4, preallocate: bool = False, @@ -649,9 +649,9 @@ def step(self, x: NDArray, show: bool = False) -> NDArray: def run( self, x: NDArray, - niter: Optional[int] = None, + niter: int | None = None, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), ) -> NDArray: r"""Run solver @@ -677,7 +677,8 @@ def run( """ self.niter = self.niter if niter is None else niter if self.niter is None: - raise ValueError("niter must not be None") + msg = "`niter` must not be None" + raise ValueError(msg) while self.iiter < self.niter and self.kold > self.tol: showstep = ( True @@ -724,14 +725,14 @@ def finalize(self, show: bool = False) -> None: def solve( self, y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, damp: float = 0.0, tol: float = 1e-4, preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[NDArray, int, int, float, float, NDArray]: + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[NDArray, int, int, float, float, NDArray]: r"""Run entire solver Parameters @@ -983,7 +984,7 @@ def _print_finalize(self) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -1018,7 +1019,7 @@ def memory_usage( def setup( self, y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, damp: float = 0.0, atol: float = 1e-08, btol: float = 1e-08, @@ -1321,9 +1322,9 @@ def step(self, x: NDArray, show: bool = False) -> NDArray: def run( self, x: NDArray, - niter: Optional[int] = None, + niter: int | None = None, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), ) -> NDArray: r"""Run solver @@ -1386,7 +1387,7 @@ def finalize(self, show: bool = False) -> None: def solve( self, y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, damp: float = 0.0, atol: float = 1e-08, btol: float = 1e-08, @@ -1395,8 +1396,8 @@ def solve( calc_var: bool = True, preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[ + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[ NDArray, int, int, @@ -1406,7 +1407,7 @@ def solve( float, float, float, - Union[None, NDArray], + None | NDArray, NDArray, ]: r"""Run entire solver diff --git a/pylops/optimization/cls_leastsquares.py b/pylops/optimization/cls_leastsquares.py index 8190235b5..636c33f40 100644 --- a/pylops/optimization/cls_leastsquares.py +++ b/pylops/optimization/cls_leastsquares.py @@ -5,7 +5,8 @@ "PreconditionedInversion", ] -from typing import TYPE_CHECKING, Optional, Sequence, Tuple +from collections.abc import Sequence +from typing import TYPE_CHECKING, Optional import numpy as np from scipy.sparse.linalg import cg as sp_cg @@ -15,7 +16,7 @@ from pylops.optimization.basesolver import Solver, _units from pylops.optimization.basic import cg, cgls from pylops.utils.backend import get_array_module -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tmemunit, Tsolverengine if TYPE_CHECKING: from pylops.linearoperator import LinearOperator @@ -23,15 +24,16 @@ def _check_regularization_dims( Regs: Sequence["LinearOperator"], - dataregs: Optional[Sequence[NDArray]] = None, - epsRs: Optional[Sequence[float]] = None, + dataregs: Sequence[NDArray] | None = None, + epsRs: Sequence[float] | None = None, ) -> None: """check Regs, dataregs, and epsRs have same dimensions""" nRegs = len(Regs) ndataregs = nRegs if dataregs is None else len(dataregs) nepsRs = nRegs if epsRs is None else len(epsRs) if not nRegs == ndataregs == nepsRs: - raise ValueError("Regs, dataregs, and epsRs must have the same size") + msg = "Regs, dataregs, and epsRs must have the same size" + raise ValueError(msg) class NormalEquationsInversion(Solver): @@ -102,9 +104,9 @@ def _print_finalize(self) -> None: def memory_usage( self, - nopRegs: Optional[Tuple[int]] = None, + nopRegs: tuple[int] | None = None, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -152,11 +154,11 @@ def setup( y: NDArray, Regs: Sequence["LinearOperator"], Weight: Optional["LinearOperator"] = None, - dataregs: Optional[Sequence[NDArray]] = None, + dataregs: Sequence[NDArray] | None = None, epsI: float = 0, - epsRs: Optional[Sequence[float]] = None, - NRegs: Optional[Sequence["LinearOperator"]] = None, - epsNRs: Optional[Sequence[float]] = None, + epsRs: Sequence[float] | None = None, + NRegs: Sequence["LinearOperator"] | None = None, + epsNRs: Sequence[float] | None = None, show: bool = False, ) -> None: r"""Setup solver @@ -234,12 +236,14 @@ def setup( and self.Regs is not None and self.dataregs is not None ): - for epsR, Reg, datareg in zip(self.epsRs, self.Regs, self.dataregs): + for epsR, Reg, datareg in zip( + self.epsRs, self.Regs, self.dataregs, strict=True + ): self.y_normal += epsR**2 * Reg.rmatvec(datareg) self.Op_normal += epsR**2 * Reg.H @ Reg if epsNRs is not None and NRegs is not None: - for epsNR, NReg in zip(epsNRs, NRegs): + for epsNR, NReg in zip(epsNRs, NRegs, strict=True): self.Op_normal += epsNR**2 * NReg # print setup @@ -247,19 +251,20 @@ def setup( self._print_setup() def step(self) -> None: - raise NotImplementedError( - "NormalEquationsInversion uses as default the" - " scipy.sparse.linalg.cg solver, therefore the " + msg = ( + "NormalEquationsInversion uses as default the " + "scipy.sparse.linalg.cg solver, therefore the " "step method is not implemented. Use directly run or solve." ) + raise NotImplementedError(msg) def run( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int]: + ) -> tuple[NDArray, int]: r"""Run solver Parameters @@ -310,24 +315,25 @@ def run( )[0] istop = None else: - raise NotImplementedError("Engine must be scipy or pylops") + msg = "`engine` must be scipy or pylops" + raise NotImplementedError(msg) return xinv, istop def solve( self, y: NDArray, Regs: Sequence["LinearOperator"], - x0: Optional[NDArray] = None, + x0: NDArray | None = None, Weight: Optional["LinearOperator"] = None, - dataregs: Optional[Sequence[NDArray]] = None, + dataregs: Sequence[NDArray] | None = None, epsI: float = 0, - epsRs: Optional[Sequence[float]] = None, - NRegs: Optional[Sequence["LinearOperator"]] = None, - epsNRs: Optional[Sequence[float]] = None, - engine: str = "scipy", + epsRs: Sequence[float] | None = None, + NRegs: Sequence["LinearOperator"] | None = None, + epsNRs: Sequence[float] | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int]: + ) -> tuple[NDArray, int]: r"""Run entire solver Parameters @@ -437,7 +443,8 @@ def RegularizedOperator( """ OpReg = VStack( - [Op] + [epsR * Reg for epsR, Reg in zip(epsRs, Regs)], dtype=Op.dtype + [Op] + [epsR * Reg for epsR, Reg in zip(epsRs, Regs, strict=True)], + dtype=Op.dtype, ) return OpReg @@ -519,9 +526,9 @@ def _print_finalize(self) -> None: def memory_usage( self, - nopRegs: Optional[Tuple[int]] = None, + nopRegs: tuple[int] | None = None, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -576,8 +583,8 @@ def setup( y: NDArray, Regs: Sequence["LinearOperator"], Weight: Optional["LinearOperator"] = None, - dataregs: Optional[Sequence[NDArray]] = None, - epsRs: Optional[Sequence[float]] = None, + dataregs: Sequence[NDArray] | None = None, + epsRs: Sequence[float] | None = None, show: bool = False, ) -> None: r"""Setup solver @@ -642,7 +649,7 @@ def setup( # augumented operator if self.epsRs is not None and self.dataregs is not None: - for epsR, datareg in zip(self.epsRs, self.dataregs): + for epsR, datareg in zip(self.epsRs, self.dataregs, strict=True): self.datatot = self.ncp.hstack((self.datatot, epsR * datareg)) # print setup @@ -650,19 +657,20 @@ def setup( self._print_setup() def step(self) -> None: - raise NotImplementedError( - "RegularizedInversion uses as default the" - " scipy.sparse.linalg.lsqr solver, therefore the " + msg = ( + "RegularizedInversion uses as default the " + "scipy.sparse.linalg.lsqr solver, therefore the " "step method is not implemented. Use directly run or solve." ) + raise NotImplementedError(msg) def run( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int, int, float, float]: + ) -> tuple[NDArray, int, int, float, float]: r"""Run solver Parameters @@ -719,21 +727,22 @@ def run( **kwargs_solver, )[0:5] else: - raise NotImplementedError("Engine must be scipy or pylops") + msg = "`engine` must be scipy or pylops" + raise NotImplementedError(msg) return xinv, istop, itn, r1norm, r2norm def solve( self, y: NDArray, Regs: Sequence["LinearOperator"], - x0: Optional[NDArray] = None, + x0: NDArray | None = None, Weight: Optional["LinearOperator"] = None, - dataregs: Optional[Sequence[NDArray]] = None, - epsRs: Optional[Sequence[float]] = None, - engine: str = "scipy", + dataregs: Sequence[NDArray] | None = None, + epsRs: Sequence[float] | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int, int, float, float]: + ) -> tuple[NDArray, int, int, float, float]: r"""Run entire solver Parameters @@ -848,7 +857,7 @@ def _print_finalize(self) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -921,19 +930,20 @@ def setup( self._print_setup() def step(self) -> None: - raise NotImplementedError( - "PreconditionedInversion uses as default the" - " scipy.sparse.linalg.lsqr solver, therefore the " + msg = ( + "PreconditionedInversion uses as default the " + "scipy.sparse.linalg.lsqr solver, therefore the " "step method is not implemented. Use directly run or solve." ) + raise NotImplementedError(msg) def run( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int, int, float, float]: + ) -> tuple[NDArray, int, int, float, float]: r"""Run solver Parameters @@ -995,7 +1005,8 @@ def run( # force it 1d as we decorate this method with disable_ndarray_multiplication pinv = pinv.ravel() else: - raise NotImplementedError("Engine must be scipy or pylops") + msg = "`engine` must be scipy or pylops" + raise NotImplementedError(msg) xinv = self.P.matvec(pinv) return xinv, istop, itn, r1norm, r2norm @@ -1003,11 +1014,11 @@ def solve( self, y: NDArray, P: "LinearOperator", - x0: Optional[NDArray] = None, - engine: str = "scipy", + x0: NDArray | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, - ) -> Tuple[NDArray, int, int, float, float]: + ) -> tuple[NDArray, int, int, float, float]: r"""Run entire solver Parameters diff --git a/pylops/optimization/cls_sparsity.py b/pylops/optimization/cls_sparsity.py index 42a8185e4..98028aa5b 100644 --- a/pylops/optimization/cls_sparsity.py +++ b/pylops/optimization/cls_sparsity.py @@ -9,8 +9,9 @@ import logging import time +from collections.abc import Callable, Sequence from math import sqrt -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple +from typing import Any, Optional import numpy as np from scipy.sparse.linalg import lsqr @@ -29,7 +30,15 @@ get_real_dtype, inplace_set, ) -from pylops.utils.typing import InputDimsLike, NDArray, SamplingLike +from pylops.utils.typing import ( + InputDimsLike, + NDArray, + SamplingLike, + Tirlskind, + Tmemunit, + Tsolverengine, + Tthreshkind, +) spgl1_message = deps.spgl1_import("the spgl1 solver") @@ -363,9 +372,9 @@ def _print_step(self, x: NDArray) -> None: def memory_usage( self, - kind: str = "data", + kind: Tirlskind = "data", show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -409,13 +418,13 @@ def memory_usage( def setup( self, y: NDArray, - nouter: Optional[int] = None, + nouter: int | None = None, threshR: bool = False, epsR: float = 1e-10, epsI: float = 1e-10, tolIRLS: float = 1e-10, warm: bool = False, - kind: str = "data", + kind: Tirlskind = "data", preallocate: bool = False, show: bool = False, ) -> None: @@ -479,7 +488,8 @@ def setup( self.epsI = 0.0 # as epsI is added to the augmented system already self.y = self.ncp.hstack([self.y, self.ncp.zeros(self.Op.shape[1])]) else: - raise NotImplementedError("kind must be model, data or datamodel") + msg = f"`kind` must be model, data or datamodel, got {kind}" + raise NotImplementedError(msg) if self.preallocate: self.r = self.ncp.empty_like(self.y) @@ -498,7 +508,9 @@ def setup( if show: self._print_setup() - def _step_data(self, x: NDArray, engine: str = "scipy", **kwargs_solver) -> NDArray: + def _step_data( + self, x: NDArray, engine: Tsolverengine = "scipy", **kwargs_solver + ) -> NDArray: r"""Run one step of solver with L1 data term""" # add preallocate to keywords of solver if self.preallocate and (engine == "pylops" or self.ncp != np): @@ -552,7 +564,7 @@ def _step_data(self, x: NDArray, engine: str = "scipy", **kwargs_solver) -> NDAr return x def _step_model( - self, x: NDArray, engine: str = "scipy", **kwargs_solver + self, x: NDArray, engine: Tsolverengine = "scipy", **kwargs_solver ) -> NDArray: r"""Run one step of solver with L1 model term""" # add preallocate to keywords of solver @@ -615,7 +627,7 @@ def _step_model( def step( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, ) -> NDArray: @@ -664,11 +676,11 @@ def step( def run( self, - x: Optional[NDArray], + x: NDArray | None, nouter: int = 10, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), **kwargs_solver, ) -> NDArray: r"""Run solver @@ -754,18 +766,18 @@ def finalize(self, show: bool = False) -> None: def solve( self, y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, nouter: int = 10, threshR: bool = False, epsR: float = 1e-10, epsI: float = 1e-10, tolIRLS: float = 1e-10, - kind: str = "data", + kind: Tirlskind = "data", warm: bool = False, - engine: str = "scipy", + engine: Tsolverengine = "scipy", preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), **kwargs_solver, ) -> NDArray: r"""Run entire solver @@ -969,7 +981,7 @@ def _print_step(self, x: NDArray) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -1085,7 +1097,7 @@ def step( self, x: NDArray, cols: InputDimsLike, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, ) -> NDArray: @@ -1208,10 +1220,10 @@ def run( self, x: NDArray, cols: InputDimsLike, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[NDArray, InputDimsLike]: + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[NDArray, InputDimsLike]: r"""Run solver Parameters @@ -1302,11 +1314,11 @@ def solve( normalizecols: bool = False, Opbasis: Optional["LinearOperator"] = None, optimal_coeff: bool = False, - engine: str = "scipy", + engine: Tsolverengine = "scipy", preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[NDArray, int, NDArray]: + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[NDArray, int, NDArray]: r"""Run entire solver Parameters @@ -1372,8 +1384,8 @@ def solve( preallocate=preallocate, show=show, ) - x: List[NDArray] = [] - cols: List[InputDimsLike] = [] + x: list[NDArray] = [] + cols: list[InputDimsLike] = [] x, cols = self.run(x, cols, engine=engine, show=show, itershow=itershow) x = self.finalize(x, cols, show) return x, self.nouter, self.cost @@ -1549,7 +1561,7 @@ def _print_step( def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -1584,16 +1596,16 @@ def memory_usage( def setup( self, y: NDArray, - x0: Optional[NDArray] = None, - niter: Optional[int] = None, - SOp: Optional[LinearOperator] = None, + x0: NDArray | None = None, + niter: int | None = None, + SOp: LinearOperator | None = None, eps: float = 0.1, - alpha: Optional[float] = None, - eigsdict: Optional[Dict[str, Any]] = None, + alpha: float | None = None, + eigsdict: dict[str, Any] | None = None, tol: float = 1e-10, - threshkind: str = "soft", - perc: Optional[float] = None, - decay: Optional[NDArray] = None, + threshkind: Tthreshkind = "soft", + perc: float | None = None, + decay: NDArray | None = None, monitorres: bool = False, preallocate: bool = False, show: bool = False, @@ -1689,19 +1701,21 @@ def setup( "soft-percentile", "half-percentile", ]: - raise NotImplementedError( - "threshkind should be hard, soft, half," + msg = ( + "`threshkind` must be hard, soft, half, " "hard-percentile, soft-percentile, " - "or half-percentile" + f"or half-percentile, got {threshkind}" ) + raise ValueError(msg) if ( threshkind in ["hard-percentile", "soft-percentile", "half-percentile"] and perc is None ): - raise ValueError( - "Provide a percentile when choosing hard-percentile," + msg = ( + "Provide a percentile when choosing hard-percentile, " "soft-percentile, or half-percentile thresholding" ) + raise ValueError(msg) self.threshf: Callable[[NDArray, float], NDArray] if threshkind == "soft": @@ -1760,10 +1774,12 @@ def setup( else: if y.ndim != x0.ndim: # error for wrong dimensions - raise ValueError("Number of columns of x0 and data are not the same") + msg = "Number of columns of x0 and data are not the same" + raise ValueError(msg) elif x0.shape[0] != self.Op.shape[1]: - # error for wrong dimensions - raise ValueError("Operator and input vector have different dimensions") + # error for wrong shapes + msg = "Operator and input vector have different shapes" + raise ValueError(msg) else: x = x0.copy() @@ -1786,7 +1802,7 @@ def setup( self.t = 1.0 # create variables to track the residual norm and iterations - self.cost: List[float] = [] + self.cost: list[float] = [] self.iiter = 0 # print setup @@ -1794,7 +1810,7 @@ def setup( self._print_setup() return x - def step(self, x: NDArray, show: bool = False) -> Tuple[NDArray, float]: + def step(self, x: NDArray, show: bool = False) -> tuple[NDArray, float]: r"""Run one step of solver Parameters @@ -1827,11 +1843,12 @@ def step(self, x: NDArray, show: bool = False) -> Tuple[NDArray, float]: if self.monitorres: self.normres = np.linalg.norm(self.res if self.preallocate else res) if self.normres > self.normresold: - raise ValueError( + msg = ( f"ISTA stopped at iteration {self.iiter} due to " "residual increasing, consider modifying " "eps and/or alpha..." ) + raise ValueError(msg) else: self.normresold = self.normres @@ -1907,9 +1924,9 @@ def step(self, x: NDArray, show: bool = False) -> Tuple[NDArray, float]: def run( self, x: NDArray, - niter: Optional[int] = None, + niter: int | None = None, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), ) -> NDArray: r"""Run solver @@ -1936,7 +1953,8 @@ def run( xupdate = np.inf niter = self.niter if niter is None else niter if niter is None: - raise ValueError("niter must not be None") + msg = "`niter` must not be None" + raise ValueError(msg) while self.iiter < niter and xupdate > self.tol: showstep = ( True @@ -1976,21 +1994,21 @@ def finalize(self, show: bool = False) -> None: def solve( self, y: NDArray, - x0: Optional[NDArray] = None, - niter: Optional[int] = None, - SOp: Optional[LinearOperator] = None, + x0: NDArray | None = None, + niter: int | None = None, + SOp: LinearOperator | None = None, eps: float = 0.1, - alpha: Optional[float] = None, - eigsdict: Optional[Dict[str, Any]] = None, + alpha: float | None = None, + eigsdict: dict[str, Any] | None = None, tol: float = 1e-10, - threshkind: str = "soft", - perc: Optional[float] = None, - decay: Optional[NDArray] = None, + threshkind: Tthreshkind = "soft", + perc: float | None = None, + decay: NDArray | None = None, monitorres: bool = False, preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - ) -> Tuple[NDArray, int, NDArray]: + itershow: tuple[int, int, int] = (10, 10, 10), + ) -> tuple[NDArray, int, NDArray]: r"""Run entire solver Parameters @@ -2085,7 +2103,6 @@ class FISTA(ISTA): Op : :obj:`pylops.LinearOperator` Operator to invert - Attributes ---------- ncp : :obj:`module` @@ -2189,7 +2206,7 @@ class FISTA(ISTA): def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -2258,11 +2275,12 @@ def step(self, x: NDArray, z: NDArray, show: bool = False) -> NDArray: if self.monitorres: self.normres = np.linalg.norm(self.res if self.preallocate else res) if self.normres > self.normresold: - raise ValueError( + msg = ( f"FISTA stopped at iteration {self.iiter} due to " "residual increasing, consider modifying " "eps and/or alpha..." ) + raise ValueError(msg) else: self.normresold = self.normres @@ -2347,9 +2365,9 @@ def step(self, x: NDArray, z: NDArray, show: bool = False) -> NDArray: def run( self, x: NDArray, - niter: Optional[int] = None, + niter: int | None = None, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), ) -> NDArray: r"""Run solver @@ -2377,7 +2395,8 @@ def run( xupdate = np.inf niter = self.niter if niter is None else niter if niter is None: - raise ValueError("niter must not be None") + msg = "`niter` must not be None" + raise ValueError(msg) while self.iiter < niter and xupdate > self.tol: showstep = ( True @@ -2396,9 +2415,7 @@ def run( if stop: break if xupdate <= self.tol: - logger.warning( - "Update smaller that tolerance for " "iteration %d", self.iiter - ) + logger.warning("Update smaller that tolerance for iteration %d", self.iiter) return x @@ -2473,14 +2490,14 @@ def _print_finalize(self) -> None: def memory_usage( self, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: pass def setup( self, y: NDArray, - SOp: Optional[LinearOperator] = None, + SOp: LinearOperator | None = None, tau: int = 0, sigma: int = 0, show: bool = False, @@ -2517,18 +2534,19 @@ def setup( self._print_setup() def step(self) -> None: - raise NotImplementedError( - "SPGL1 uses as default the" - "spgl1.spgl1 solver, therefore the " - "step method is not implemented. Use directly run or solve." + msg = ( + "SPGL1 uses as default the spgl1.spgl1" + "solver, therefore the step method is not " + " implemented. Use directly run or solve." ) + raise NotImplementedError(msg) def run( self, x: NDArray, show: bool = False, **kwargs_spgl1, - ) -> Tuple[NDArray, NDArray, Dict[str, Any]]: + ) -> tuple[NDArray, NDArray, dict[str, Any]]: r"""Run solver Parameters @@ -2607,13 +2625,13 @@ def run( def solve( self, y: NDArray, - x0: Optional[NDArray] = None, - SOp: Optional[LinearOperator] = None, + x0: NDArray | None = None, + SOp: LinearOperator | None = None, tau: float = 0.0, sigma: float = 0, show: bool = False, **kwargs_spgl1, - ) -> Tuple[NDArray, NDArray, Dict[str, Any]]: + ) -> tuple[NDArray, NDArray, dict[str, Any]]: r"""Run entire solver Parameters @@ -2817,10 +2835,10 @@ def _print_step(self, x: NDArray) -> None: def memory_usage( self, - nopRegsL1: Optional[Tuple[int]] = None, - nopRegsL2: Optional[Tuple[int]] = None, + nopRegsL1: tuple[int] | None = None, + nopRegsL2: tuple[int] | None = None, show: bool = False, - unit: str = "B", + unit: Tmemunit = "B", ) -> float: """Compute memory usage of the solver @@ -2872,15 +2890,15 @@ def memory_usage( def setup( self, y: NDArray, - RegsL1: List[LinearOperator], - x0: Optional[NDArray] = None, + RegsL1: list[LinearOperator], + x0: NDArray | None = None, niter_outer: int = 3, niter_inner: int = 5, - RegsL2: Optional[List[LinearOperator]] = None, - dataregsL2: Optional[Sequence[NDArray]] = None, + RegsL2: list[LinearOperator] | None = None, + dataregsL2: Sequence[NDArray] | None = None, mu: float = 1.0, - epsRL1s: Optional[SamplingLike] = None, - epsRL2s: Optional[SamplingLike] = None, + epsRL1s: SamplingLike | None = None, + epsRL2s: SamplingLike | None = None, tol: float = 1e-10, tau: float = 1.0, restart: bool = False, @@ -2984,7 +3002,7 @@ def setup( self.dataregsL2 = [] # Rescale dampings - self.epsRs: List[float] = [] + self.epsRs: list[float] = [] if epsRL2s is not None: self.epsRs += [ sqrt(epsRL2s[ireg] / 2) / sqrt(mu / 2) for ireg in range(self.nregsL2) @@ -2998,7 +3016,7 @@ def setup( x = self.ncp.zeros(self.Op.shape[1], dtype=self.Op.dtype) if x0 is None else x0 # create variables to track the residual norm and iterations - self.cost: List[float] = [] + self.cost: list[float] = [] self.iiter = 0 if show: @@ -3008,7 +3026,7 @@ def setup( def step( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, show_inner: bool = False, **kwargs_solver, @@ -3092,13 +3110,13 @@ def step( else [ epsRL2 * self.ncp.linalg.norm(dataregL2 - RegL2.matvec(x)) ** 2 for epsRL2, RegL2, dataregL2 in zip( - self.epsRL2s, self.RegsL2, self.dataregsL2 + self.epsRL2s, self.RegsL2, self.dataregsL2, strict=True ) ] ) self.costregL1 = [ self.ncp.linalg.norm(RegL1.matvec(x), ord=1) - for _, RegL1 in zip(self.epsRL1s, self.RegsL1) + for _, RegL1 in zip(self.epsRL1s, self.RegsL1, strict=True) ] self.costtot = ( self.costdata @@ -3116,9 +3134,9 @@ def step( def run( self, x: NDArray, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), show_inner: bool = False, **kwargs_lsqr, ) -> NDArray: @@ -3196,25 +3214,25 @@ def finalize(self, show: bool = False) -> NDArray: def solve( self, y: NDArray, - RegsL1: List[LinearOperator], - x0: Optional[NDArray] = None, + RegsL1: list[LinearOperator], + x0: NDArray | None = None, niter_outer: int = 3, niter_inner: int = 5, - RegsL2: Optional[List[LinearOperator]] = None, - dataregsL2: Optional[List[NDArray]] = None, + RegsL2: list[LinearOperator] | None = None, + dataregsL2: list[NDArray] | None = None, mu: float = 1.0, - epsRL1s: Optional[SamplingLike] = None, - epsRL2s: Optional[SamplingLike] = None, + epsRL1s: SamplingLike | None = None, + epsRL2s: SamplingLike | None = None, tol: float = 1e-10, tau: float = 1.0, restart: bool = False, - engine: str = "scipy", + engine: Tsolverengine = "scipy", preallocate: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), show_inner: bool = False, **kwargs_lsqr, - ) -> Tuple[NDArray, int, NDArray]: + ) -> tuple[NDArray, int, NDArray]: r"""Run entire solver Parameters diff --git a/pylops/optimization/eigs.py b/pylops/optimization/eigs.py index 10a81b64d..13e6412f8 100644 --- a/pylops/optimization/eigs.py +++ b/pylops/optimization/eigs.py @@ -1,12 +1,11 @@ __all__ = ["power_iteration"] -from typing import Tuple import numpy as np from pylops import LinearOperator from pylops.utils.backend import get_module -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tbackend def power_iteration( @@ -14,8 +13,8 @@ def power_iteration( niter: int = 10, tol: float = 1e-5, dtype: str = "float32", - backend: str = "numpy", -) -> Tuple[float, NDArray, int]: + backend: Tbackend = "numpy", +) -> tuple[float, NDArray, int]: """Power iteration algorithm. Power iteration algorithm, used to compute the largest eigenvector and @@ -63,9 +62,8 @@ def power_iteration( ).astype(dtype) b_k = b_k / ncp.linalg.norm(b_k) - niter = 10 if niter is None else niter maxeig_old = 0.0 - for iiter in range(niter): + for _iiter in range(niter): # compute largest eigenvector b1_k = Op.matvec(b_k) @@ -79,4 +77,4 @@ def power_iteration( break maxeig_old = maxeig - return maxeig, b_k, iiter + 1 + return maxeig, b_k, _iiter + 1 diff --git a/pylops/optimization/leastsquares.py b/pylops/optimization/leastsquares.py index 0e61b8a26..cdde2ad91 100644 --- a/pylops/optimization/leastsquares.py +++ b/pylops/optimization/leastsquares.py @@ -4,14 +4,15 @@ "preconditioned_inversion", ] -from typing import TYPE_CHECKING, List, Optional, Sequence, Tuple +from collections.abc import Sequence +from typing import TYPE_CHECKING, Optional from pylops.optimization.cls_leastsquares import ( NormalEquationsInversion, PreconditionedInversion, RegularizedInversion, ) -from pylops.utils.typing import NDArray, SamplingLike +from pylops.utils.typing import NDArray, SamplingLike, Tsolverengine if TYPE_CHECKING: from pylops.linearoperator import LinearOperator @@ -20,18 +21,18 @@ def normal_equations_inversion( Op: "LinearOperator", y: NDArray, - Regs: List["LinearOperator"], - x0: Optional[NDArray] = None, + Regs: list["LinearOperator"], + x0: NDArray | None = None, Weight: Optional["LinearOperator"] = None, - dataregs: Optional[List[NDArray]] = None, + dataregs: list[NDArray] | None = None, epsI: float = 0.0, - epsRs: Optional[SamplingLike] = None, - NRegs: Optional[Sequence["LinearOperator"]] = None, - epsNRs: Optional[SamplingLike] = None, - engine: str = "scipy", + epsRs: SamplingLike | None = None, + NRegs: Sequence["LinearOperator"] | None = None, + epsNRs: SamplingLike | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, -) -> Tuple[NDArray, int]: +) -> tuple[NDArray, int]: r"""Inversion of normal equations. Solve the regularized normal equations for a system of equations @@ -124,15 +125,15 @@ def normal_equations_inversion( def regularized_inversion( Op, y: NDArray, - Regs: List["LinearOperator"], - x0: Optional[NDArray] = None, + Regs: list["LinearOperator"], + x0: NDArray | None = None, Weight: Optional["LinearOperator"] = None, - dataregs: Optional[List[NDArray]] = None, - epsRs: Optional[SamplingLike] = None, - engine: str = "scipy", + dataregs: list[NDArray] | None = None, + epsRs: SamplingLike | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, -) -> Tuple[NDArray, int, int, float, float]: +) -> tuple[NDArray, int, int, float, float]: r"""Regularized inversion. Solve a system of regularized equations given the operator ``Op``, @@ -218,11 +219,11 @@ def preconditioned_inversion( Op: "LinearOperator", y: NDArray, P: "LinearOperator", - x0: Optional[NDArray] = None, - engine: str = "scipy", + x0: NDArray | None = None, + engine: Tsolverengine = "scipy", show: bool = False, **kwargs_solver, -) -> Tuple[NDArray, int, int, float, float]: +) -> tuple[NDArray, int, int, float, float]: r"""Preconditioned inversion. Solve a system of preconditioned equations given the operator diff --git a/pylops/optimization/sparsity.py b/pylops/optimization/sparsity.py index 70fb408e4..b05dec901 100644 --- a/pylops/optimization/sparsity.py +++ b/pylops/optimization/sparsity.py @@ -7,7 +7,8 @@ "splitbregman", ] -from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple +from collections.abc import Callable +from typing import TYPE_CHECKING, Any, Optional from pylops.optimization.callback import ( CostNanInfCallback, @@ -16,7 +17,13 @@ ) from pylops.optimization.cls_sparsity import FISTA, IRLS, ISTA, OMP, SPGL1, SplitBregman from pylops.utils.decorators import add_ndarray_support_to_solver -from pylops.utils.typing import NDArray, SamplingLike +from pylops.utils.typing import ( + NDArray, + SamplingLike, + Tirlskind, + Tsolverengine, + Tthreshkind, +) if TYPE_CHECKING: from pylops.linearoperator import LinearOperator @@ -25,21 +32,21 @@ def irls( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, nouter: int = 10, threshR: bool = False, epsR: float = 1e-10, epsI: float = 1e-10, tolIRLS: float = 1e-10, warm: bool = False, - kind: str = "data", - engine: str = "scipy", + kind: Tirlskind = "data", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, **kwargs_solver, -) -> Tuple[NDArray, int]: +) -> tuple[NDArray, int]: r"""Iteratively reweighted least squares. Solve an optimization problem with :math:`L_1` cost function (data IRLS) @@ -120,7 +127,10 @@ def irls( irlssolve = IRLS(Op) if callback is not None: irlssolve.callback = callback - x, nouter, = irlssolve.solve( + ( + x, + nouter, + ) = irlssolve.solve( y, x0=x0, nouter=nouter, @@ -150,12 +160,12 @@ def omp( normalizecols: bool = False, Opbasis: Optional["LinearOperator"] = None, optimal_coeff: bool = False, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, NDArray]: +) -> tuple[NDArray, int, NDArray]: r"""Orthogonal Matching Pursuit (OMP). Solve an optimization problem with :math:`L^0` regularization function given @@ -271,24 +281,24 @@ def omp( def ista( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, SOp: Optional["LinearOperator"] = None, eps: float = 0.1, - alpha: Optional[float] = None, - eigsdict: Optional[Dict[str, Any]] = None, + alpha: float | None = None, + eigsdict: dict[str, Any] | None = None, tol: float = 1e-10, rtol: float = 0.0, rtol1: float = 0.0, - threshkind: str = "soft", - perc: Optional[float] = None, - decay: Optional[NDArray] = None, + threshkind: Tthreshkind = "soft", + perc: float | None = None, + decay: NDArray | None = None, monitorres: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, NDArray]: +) -> tuple[NDArray, int, NDArray]: r"""Iterative Shrinkage-Thresholding Algorithm (ISTA). Solve an optimization problem with :math:`L^p, \; p=0, 0.5, 1` @@ -425,24 +435,24 @@ def ista( def fista( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, niter: int = 10, SOp: Optional["LinearOperator"] = None, eps: float = 0.1, - alpha: Optional[float] = None, - eigsdict: Optional[Dict[str, Any]] = None, + alpha: float | None = None, + eigsdict: dict[str, Any] | None = None, tol: float = 1e-10, rtol: float = 0.0, rtol1: float = 0.0, - threshkind: str = "soft", - perc: Optional[float] = None, - decay: Optional[NDArray] = None, + threshkind: Tthreshkind = "soft", + perc: float | None = None, + decay: NDArray | None = None, monitorres: bool = False, show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), - callback: Optional[Callable] = None, + itershow: tuple[int, int, int] = (10, 10, 10), + callback: Callable | None = None, preallocate: bool = False, -) -> Tuple[NDArray, int, NDArray]: +) -> tuple[NDArray, int, NDArray]: r"""Fast Iterative Shrinkage-Thresholding Algorithm (FISTA). Solve an optimization problem with :math:`L^p, \; p=0, 0.5, 1` @@ -578,13 +588,13 @@ def fista( def spgl1( Op: "LinearOperator", y: NDArray, - x0: Optional[NDArray] = None, + x0: NDArray | None = None, SOp: Optional["LinearOperator"] = None, tau: float = 0.0, sigma: float = 0.0, show: bool = False, **kwargs_spgl1, -) -> Tuple[NDArray, NDArray, Dict[str, Any]]: +) -> tuple[NDArray, NDArray, dict[str, Any]]: r"""Spectral Projected-Gradient for L1 norm. Solve a constrained system of equations given the operator ``Op`` @@ -694,28 +704,28 @@ def spgl1( def splitbregman( Op: "LinearOperator", y: NDArray, - RegsL1: List["LinearOperator"], - x0: Optional[NDArray] = None, + RegsL1: list["LinearOperator"], + x0: NDArray | None = None, niter_outer: int = 3, niter_inner: int = 5, - RegsL2: Optional[List["LinearOperator"]] = None, - dataregsL2: Optional[List[NDArray]] = None, + RegsL2: list["LinearOperator"] | None = None, + dataregsL2: list[NDArray] | None = None, mu: float = 1.0, - epsRL1s: Optional[SamplingLike] = None, - epsRL2s: Optional[SamplingLike] = None, + epsRL1s: SamplingLike | None = None, + epsRL2s: SamplingLike | None = None, tol: float = 1e-10, rtol: float = 0.0, rtol1: float = 0.0, tau: float = 1.0, restart: bool = False, - engine: str = "scipy", + engine: Tsolverengine = "scipy", show: bool = False, - itershow: Tuple[int, int, int] = (10, 10, 10), + itershow: tuple[int, int, int] = (10, 10, 10), show_inner: bool = False, - callback: Optional[Callable] = None, + callback: Callable | None = None, preallocate: bool = False, **kwargs_lsqr, -) -> Tuple[NDArray, int, NDArray]: +) -> tuple[NDArray, int, NDArray]: r"""Split Bregman for mixed L2-L1 norms. Solve an unconstrained system of equations with mixed :math:`L_2` and :math:`L_1` diff --git a/pylops/signalprocessing/__init__.py b/pylops/signalprocessing/__init__.py index fe45aa6a0..45aa283c6 100755 --- a/pylops/signalprocessing/__init__.py +++ b/pylops/signalprocessing/__init__.py @@ -16,6 +16,7 @@ NonStationaryFilters1D 1D nonstationary filter estimation operator. NonStationaryFilters2D 2D nonstationary filter estimation operator. Interp Interpolation operator. + InterpCubicSpline Cubic Spline Interpolation operator. Bilinear Bilinear interpolation operator. FFT One dimensional Fast-Fourier Transform. FFT2D Two dimensional Fast-Fourier Transform. @@ -55,6 +56,7 @@ from .nonstatconvolve3d import * from .shift import * from .interp import * +from .interpspline import * from .bilinear import * from .radon2d import * from .radon3d import * @@ -90,6 +92,7 @@ "NonStationaryFilters1D", "NonStationaryFilters2D", "Interp", + "InterpCubicSpline", "Bilinear", "Radon2D", "Radon3D", diff --git a/pylops/signalprocessing/_baseffts.py b/pylops/signalprocessing/_baseffts.py index 367174131..2806f6dbf 100644 --- a/pylops/signalprocessing/_baseffts.py +++ b/pylops/signalprocessing/_baseffts.py @@ -1,6 +1,6 @@ import warnings +from collections.abc import Sequence from enum import Enum, auto -from typing import Optional, Sequence, Union import numpy as np @@ -29,9 +29,9 @@ class _BaseFFT(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, norm: str = "ortho", real: bool = False, @@ -68,9 +68,10 @@ def __init__( warnings.warn( f"nfft={self.nfft} has been selected to be smaller than the size of " f"the original signal (dims[axis]={dims[axis]}).\n" - f"This is rarely intended behavior as the original signal will be " - f"truncated prior to applying FFT. " - f"If this is the required behaviour ignore this message." + "This is rarely intended behavior as the original signal will be " + "truncated prior to applying FFT. " + "If this is the required behaviour ignore this message.", + stacklevel=True, ) if norm == "ortho": @@ -80,15 +81,14 @@ def __init__( elif norm.lower() == "1/n": self.norm = _FFTNorms.ONE_OVER_N elif norm == "backward": - raise ValueError( - 'To use no scaling on the forward transform, use "none". Note that in this case, the adjoint transform will *not* have a 1/n scaling.' - ) + msg = 'To use no scaling on the forward transform, use "none". Note that in this case, the adjoint transform will *not* have a 1/n scaling.' + raise ValueError(msg) elif norm == "forward": - raise ValueError( - 'To use 1/n scaling on the forward transform, use "1/n". Note that in this case, the adjoint transform will *also* have a 1/n scaling.' - ) + msg = 'To use 1/n scaling on the forward transform, use "1/n". Note that in this case, the adjoint transform will *also* have a 1/n scaling.' + raise ValueError(msg) else: - raise ValueError(f"'{norm}' is not one of 'ortho', 'none' or '1/n'") + msg = f"`norm`={norm} is not one of 'ortho', 'none' or '1/n'" + raise ValueError(msg) self.real = real self.ifftshift_before = ifftshift_before @@ -102,7 +102,9 @@ def __init__( if self.fftshift_after: if self.real: warnings.warn( - "Using fftshift_after with real=True. fftshift should only be applied after a complex FFT. This is rarely intended behavior but if it is, ignore this message." + "Using fftshift_after with real=True. fftshift should only be applied after a complex FFT. " + "This is rarely intended behavior but if it is, ignore this message.", + stacklevel=2, ) self.f = np.fft.fftshift(self.f) @@ -120,14 +122,12 @@ def __init__( super().__init__(dtype=self.cdtype, dims=dims, dimsd=dimsd, clinear=clinear) def _matvec(self, x: NDArray) -> NDArray: - raise NotImplementedError( - "_BaseFFT does not provide _matvec. It must be implemented separately." - ) + msg = "_BaseFFT does not provide _matvec. It must be implemented separately." + raise NotImplementedError(msg) def _rmatvec(self, x: NDArray) -> NDArray: - raise NotImplementedError( - "_BaseFFT does not provide _rmatvec. It must be implemented separately." - ) + msg = "_BaseFFT does not provide _rmatvec. It must be implemented separately." + raise NotImplementedError(msg) class _BaseFFTND(LinearOperator): @@ -135,10 +135,10 @@ class _BaseFFTND(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], - axes: Optional[Union[int, InputDimsLike]] = None, - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, + dims: int | InputDimsLike, + axes: int | InputDimsLike | None = None, + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, norm: str = "ortho", real: bool = False, ifftshift_before: bool = False, @@ -156,13 +156,14 @@ def __init__( self.naxes = len(self.axes) if self.naxes != len(np.unique(self.axes)): warnings.warn( - "At least one direction is repeated. This may cause unexpected results." + "At least one direction is repeated. This may cause unexpected results.", + stacklevel=2, ) nffts = _value_or_sized_to_array(nffts, repeat=self.naxes) if len(nffts[np.equal(nffts, None)]) > 0: # Found None(s) in nffts nffts[np.equal(nffts, None)] = np.array( - [dims[d] for d, n in zip(axes, nffts) if n is None] + [dims[d] for d, n in zip(axes, nffts, strict=True) if n is None] ) nffts = nffts.astype(np.array(dims).dtype) _raise_on_wrong_dtype(nffts, np.integer, "nffts") @@ -192,25 +193,27 @@ def __init__( or self.naxes != len(self.ifftshift_before) or self.naxes != len(self.fftshift_after) ): - raise ValueError( - ( - "`axes`, `nffts`, `sampling`, `ifftshift_before` and " - "`fftshift_after` must the have same number of elements. Received " - f"{self.naxes}, {len(self.nffts)}, {len(self.sampling)}, " - f"{len(self.ifftshift_before)} and {len(self.fftshift_after)}, " - "respectively." - ) + msg = ( + "`axes`, `nffts`, `sampling`, `ifftshift_before` and " + "`fftshift_after` must the have same number of elements. Received " + f"{self.naxes}, {len(self.nffts)}, {len(self.sampling)}, " + f"{len(self.ifftshift_before)} and {len(self.fftshift_after)}, " + "respectively." ) + raise ValueError(msg) # Check if the user provided nfft smaller than n. See _BaseFFT for # details nfftshort = [ - nfft < dims[direction] for direction, nfft in zip(self.axes, self.nffts) + nfft < dims[direction] + for direction, nfft in zip(self.axes, self.nffts, strict=True) ] self.doifftpad = any(nfftshort) if self.doifftpad: self.ifftpad = [(0, 0)] * self.ndim - for idir, (direction, nfshort) in enumerate(zip(self.axes, nfftshort)): + for idir, (direction, nfshort) in enumerate( + zip(self.axes, nfftshort, strict=True) + ): if nfshort: self.ifftpad[direction] = ( 0, @@ -218,8 +221,9 @@ def __init__( ) warnings.warn( f"nffts in directions {np.where(nfftshort)[0]} have been selected to be smaller than the size of the original signal. " - f"This is rarely intended behavior as the original signal will be truncated prior to applying fft, " - f"if this is the required behaviour ignore this message." + "This is rarely intended behavior as the original signal will be truncated prior to applying fft, " + f"if this is the required behaviour ignore this message.", + stacklevel=2, ) if norm == "ortho": @@ -229,15 +233,14 @@ def __init__( elif norm.lower() == "1/n": self.norm = _FFTNorms.ONE_OVER_N elif norm == "backward": - raise ValueError( - 'To use no scaling on the forward transform, use "none". Note that in this case, the adjoint transform will *not* have a 1/n scaling.' - ) + msg = 'To use no scaling on the forward transform, use "none". Note that in this case, the adjoint transform will *not* have a 1/n scaling.' + raise ValueError(msg) elif norm == "forward": - raise ValueError( - 'To use 1/n scaling on the forward transform, use "1/n". Note that in this case, the adjoint transform will *also* have a 1/n scaling.' - ) + msg = 'To use 1/n scaling on the forward transform, use "1/n". Note that in this case, the adjoint transform will *also* have a 1/n scaling.' + raise ValueError(msg) else: - raise ValueError(f"'{norm}' is not one of 'ortho', 'none' or '1/n'") + msg = f"`norm`={norm} is not one of 'ortho', 'none' or '1/n'" + raise ValueError(msg) self.real = real @@ -245,20 +248,21 @@ def __init__( np.fft.fftshift(np.fft.fftfreq(n, d=s)) if fftshift else np.fft.fftfreq(n, d=s) - for n, s, fftshift in zip(self.nffts, self.sampling, self.fftshift_after) + for n, s, fftshift in zip( + self.nffts, self.sampling, self.fftshift_after, strict=True + ) ] if self.real: fs[-1] = np.fft.rfftfreq(self.nffts[-1], d=self.sampling[-1]) if self.fftshift_after[-1]: warnings.warn( - ( - "Using real=True and fftshift_after on the last direction. " - "fftshift should only be applied on directions with negative " - "and positive frequencies. When using FFTND with real=True, " - "are all directions except the last. If you wish to proceed " - "applying fftshift on a frequency axis with only positive " - "frequencies, ignore this message." - ) + "Using real=True and fftshift_after on the last direction. " + "fftshift should only be applied on directions with negative " + "and positive frequencies. When using FFTND with real=True, " + "are all directions except the last. If you wish to proceed " + "applying fftshift on a frequency axis with only positive " + "frequencies, ignore this message.", + stacklevel=2, ) fs[-1] = np.fft.fftshift(fs[-1]) self.fs = tuple(fs) @@ -278,11 +282,9 @@ def __init__( super().__init__(dtype=self.cdtype, dims=dims, dimsd=dimsd, clinear=clinear) def _matvec(self, x: NDArray) -> NDArray: - raise NotImplementedError( - "_BaseFFT does not provide _matvec. It must be implemented separately." - ) + msg = "_BaseFFT does not provide _matvec. It must be implemented separately." + raise NotImplementedError(msg) def _rmatvec(self, x: NDArray) -> NDArray: - raise NotImplementedError( - "_BaseFFT does not provide _rmatvec. It must be implemented separately." - ) + msg = "_BaseFFT does not provide _rmatvec. It must be implemented separately." + raise NotImplementedError(msg) diff --git a/pylops/signalprocessing/_interp_utils.py b/pylops/signalprocessing/_interp_utils.py new file mode 100644 index 000000000..ba464e2f1 --- /dev/null +++ b/pylops/signalprocessing/_interp_utils.py @@ -0,0 +1,57 @@ +import warnings + +import numpy as np + +from pylops.utils.typing import NDArray + + +def _ensure_iava_is_unique( + iava: NDArray, + axis: int | None = None, +) -> None: + """ + Ensures that all elements of ``iava`` are unique. + """ + + _, count = np.unique( + iava, + axis=axis, + return_counts=True, + ) + + if np.any(count > 1): + msg = "Found repeated/non-unique values in iava." + raise ValueError(msg) + + return + + +def _clip_iava_above_last_sample_index( + iava: NDArray, + sample_size: int, +) -> NDArray: + """ + Ensures that elements in ``iava`` do not exceed the last sample index. + Elements above the penultimate sample are clipped to the next closest float value + below the last sample index. When this happens, a warning is issued. + """ + + last_sample_index = sample_size - 1 + outside = iava >= last_sample_index + if np.any(outside): + warnings.warn( + "At least one value in iava is beyond the penultimate sample index " + f"{last_sample_index}. Out-of-bound-values are forced below penultimate " + "sample.", + stacklevel=2, + ) + + # NOTE: ``numpy.nextafter(x, -np.inf)`` gives the closest float-value that is + # less than ``x``, i.e., this logic clips ``iava`` to the highest possible + # value that is still below the last sample + iava = iava.copy() # to avoid silent input mutation + iava[np.where(outside)] = np.nextafter(last_sample_index, -np.inf) + + _ensure_iava_is_unique(iava=iava) + + return iava diff --git a/pylops/signalprocessing/_nonstatconvolve2d_cuda.py b/pylops/signalprocessing/_nonstatconvolve2d_cuda.py index feba8ed20..67788ad91 100644 --- a/pylops/signalprocessing/_nonstatconvolve2d_cuda.py +++ b/pylops/signalprocessing/_nonstatconvolve2d_cuda.py @@ -1,3 +1,5 @@ +# flake8: noqa: B905 + from math import floor from numba import cuda @@ -64,7 +66,8 @@ def _matvec_rmatvec(x, y, hs, hshape, xdims, ohx, ohz, dhx, dhz, nhx, nhz, rmatv ) # place filter in output for ixx, hxx in zip( - range(xextremes[0], xextremes[1]), range(hxextremes[0], hxextremes[1]) + range(xextremes[0], xextremes[1]), + range(hxextremes[0], hxextremes[1]), ): for izz, hzz in zip( range(zextremes[0], zextremes[1]), diff --git a/pylops/signalprocessing/_nonstatconvolve3d_cuda.py b/pylops/signalprocessing/_nonstatconvolve3d_cuda.py index 5b309050f..b3aed8c72 100644 --- a/pylops/signalprocessing/_nonstatconvolve3d_cuda.py +++ b/pylops/signalprocessing/_nonstatconvolve3d_cuda.py @@ -1,3 +1,5 @@ +# flake8: noqa: B905 + from math import floor from numba import cuda @@ -16,7 +18,6 @@ def _matvec_rmatvec( ix, iy, iz = cuda.grid(3) if ix < xdims[0] and iy < xdims[1] and iz < xdims[2]: - # find closest filters and interpolate h ihx_l = int(floor((ix - ohx) / dhx)) # id number of left for hs_arr ihy_b = int(floor((iy - ohy) / dhy)) # id number of back for hs_arr @@ -96,10 +97,12 @@ def _matvec_rmatvec( # place filter in output for ixx, hxx in zip( - range(xextremes[0], xextremes[1]), range(hxextremes[0], hxextremes[1]) + range(xextremes[0], xextremes[1]), + range(hxextremes[0], hxextremes[1]), ): for iyy, hyy in zip( - range(yextremes[0], yextremes[1]), range(hyextremes[0], hyextremes[1]) + range(yextremes[0], yextremes[1]), + range(hyextremes[0], hyextremes[1]), ): for izz, hzz in zip( range(zextremes[0], zextremes[1]), diff --git a/pylops/signalprocessing/bilinear.py b/pylops/signalprocessing/bilinear.py index 412083765..033d5cf1c 100644 --- a/pylops/signalprocessing/bilinear.py +++ b/pylops/signalprocessing/bilinear.py @@ -3,23 +3,16 @@ import logging import numpy as np -import numpy.typing as npt from pylops import LinearOperator +from pylops.signalprocessing._interp_utils import _ensure_iava_is_unique from pylops.utils.backend import get_add_at, get_array_module, to_numpy from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, IntNDArray, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, SamplingLike logger = logging.getLogger(__name__) -def _checkunique(iava: npt.ArrayLike) -> None: - """Check that vector as only unique values""" - _, count = np.unique(iava, axis=1, return_counts=True) - if np.any(count > 1): - raise ValueError("Repeated values in iava array") - - class Bilinear(LinearOperator): r"""Bilinear interpolation operator. @@ -111,9 +104,9 @@ class Bilinear(LinearOperator): def __init__( self, - iava: IntNDArray, + iava: SamplingLike, dims: InputDimsLike, - forceflat: bool = None, + forceflat: bool | None = None, dtype: DTypeLike = "float64", name: str = "B", ) -> None: @@ -139,16 +132,20 @@ def __init__( ) ncp = get_array_module(iava) + # check non-unique pairs (works only with numpy arrays) - _checkunique(to_numpy(iava)) + _ensure_iava_is_unique( + iava=to_numpy(iava), + axis=1, + ) # find indices and weights self.iava_t = ncp.floor(iava[0]).astype(int) self.iava_b = self.iava_t + 1 - self.weights_tb = iava[0] - self.iava_t + self.weights_tb = (iava[0] - self.iava_t).astype(self.dtype) self.iava_l = ncp.floor(iava[1]).astype(int) self.iava_r = self.iava_l + 1 - self.weights_lr = iava[1] - self.iava_l + self.weights_lr = (iava[1] - self.iava_l).astype(self.dtype) # expand dims to weights for nd-arrays if ndims > 2: diff --git a/pylops/signalprocessing/chirpradon3d.py b/pylops/signalprocessing/chirpradon3d.py index d64a4b7a4..955540497 100755 --- a/pylops/signalprocessing/chirpradon3d.py +++ b/pylops/signalprocessing/chirpradon3d.py @@ -1,5 +1,7 @@ __all__ = ["ChirpRadon3D"] +from typing import Literal + import numpy as np from pylops import LinearOperator @@ -76,6 +78,10 @@ class ChirpRadon3D(LinearOperator): shape : :obj:`tuple` Operator shape. + Raises + ------ + ValueError + If ``engine`` is neither ``numpy`` nor ``fftw`` Notes ----- @@ -92,7 +98,7 @@ def __init__( hyaxis: NDArray, hxaxis: NDArray, pmax: NDArray, - engine: str = "numpy", + engine: Literal["numpy", "fftw"] = "numpy", dtype: DTypeLike = "float64", name: str = "C", **kwargs_fftw, @@ -107,7 +113,8 @@ def __init__( self.pmax = pmax self.engine = engine if self.engine not in ["fftw", "numpy"]: - raise NotImplementedError("engine must be 'numpy' or 'fftw'") + msg = "`engine` must be numpy or fftw" + raise ValueError(msg) self.kwargs_fftw = kwargs_fftw @reshaped diff --git a/pylops/signalprocessing/convolve1d.py b/pylops/signalprocessing/convolve1d.py index 4346fc12f..86c5e87a4 100644 --- a/pylops/signalprocessing/convolve1d.py +++ b/pylops/signalprocessing/convolve1d.py @@ -1,10 +1,10 @@ __all__ = ["Convolve1D"] +from collections.abc import Callable from functools import partial -from typing import Callable, Tuple, Union +from typing import Literal import numpy as np -import numpy.typing as npt from pylops import LinearOperator from pylops.utils._internal import _value_or_sized_to_tuple @@ -20,11 +20,11 @@ def _choose_convfunc( - x: npt.ArrayLike, - method: Union[None, str], - dims: Union[int, InputDimsLike], + x: NDArray, + method: Literal["direct", "fft", "overlapadd"] | None, + dims: int | InputDimsLike, axis: int = -1, -) -> Tuple[Callable, str]: +) -> tuple[Callable, str]: """Choose convolution function Choose and return the function handle to be used for convolution @@ -33,7 +33,8 @@ def _choose_convfunc( if method is None: method = "direct" if method not in ("direct", "fft"): - raise NotImplementedError("method must be direct or fft") + msg = "`method` must be direct or fft" + raise ValueError(msg) convfunc = get_convolve(x) else: if method is None: @@ -43,7 +44,8 @@ def _choose_convfunc( elif method == "overlapadd": convfunc = partial(get_oaconvolve(x), axes=axis)(x) else: - raise NotImplementedError("method must be fft or overlapadd") + msg = "`method` must be fft or overlapadd" + raise ValueError(msg) return convfunc, method @@ -59,11 +61,11 @@ class _Convolve1Dshort(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, h: NDArray, offset: int = 0, axis: int = -1, - method: str = None, + method: Literal["direct", "fft", "overlapadd"] | None = None, dtype: DTypeLike = "float64", name: str = "C", ) -> None: @@ -73,7 +75,8 @@ def __init__( self.axis = axis self.nh = h.size if h.ndim == 1 else h.shape[axis] if offset > self.nh - 1: - raise ValueError("offset must be smaller than h.shape[axis] - 1") + msg = "`offset` must be smaller than h.shape[axis] - 1" + raise ValueError(msg) self.h = h self.offset = 2 * (self.nh // 2 - int(offset)) if self.nh % 2 == 0: @@ -120,11 +123,11 @@ class _Convolve1Dlong(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, h: NDArray, offset: int = 0, axis: int = -1, - method: str = None, + method: Literal["direct", "fft", "overlapadd"] | None = None, dtype: DTypeLike = "float64", name: str = "C", ) -> None: @@ -136,7 +139,8 @@ def __init__( # create filter self.axis = axis if offset > self.dims[self.axis] - 1: - raise ValueError("offset must be smaller than self.dims[self.axis] - 1") + msg = "`offset` must be smaller than dims[axis] - 1" + raise ValueError(msg) self.nh = h.size if h.ndim == 1 else h.shape[axis] self.h = h self.offset = 2 * (self.dims[self.axis] // 2 - int(offset)) @@ -228,7 +232,9 @@ class Convolve1D(LinearOperator): Method used to calculate the convolution (``direct``, ``fft``, or ``overlapadd``). Note that only ``direct`` and ``fft`` are allowed when ``dims=None``, whilst ``fft`` and ``overlapadd`` are allowed - when ``dims`` is provided. + when ``dims`` is provided. If ``None``, the method is chosen + automatically (``direct`` for 1-dimensional inputs and ``fft`` + for N-dimensional inputs) dtype : :obj:`str`, optional Type of elements in input array. name : :obj:`str`, optional @@ -258,7 +264,7 @@ class Convolve1D(LinearOperator): ------ ValueError If ``offset`` is bigger than ``len(h) - 1`` - NotImplementedError + ValueError If ``method`` provided is not allowed Notes @@ -303,11 +309,11 @@ class Convolve1D(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, h: NDArray, offset: int = 0, axis: int = -1, - method: str = None, + method: Literal["direct", "fft", "overlapadd"] | None = None, dtype: DTypeLike = "float64", name: str = "C", ) -> None: diff --git a/pylops/signalprocessing/convolve2d.py b/pylops/signalprocessing/convolve2d.py index 2ac7f13c3..8b6224121 100644 --- a/pylops/signalprocessing/convolve2d.py +++ b/pylops/signalprocessing/convolve2d.py @@ -1,6 +1,6 @@ __all__ = ["Convolve2D"] -from typing import Union +from typing import Literal from pylops.signalprocessing import ConvolveND from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray @@ -26,7 +26,8 @@ class Convolve2D(ConvolveND): Axes along which convolution is applied method : :obj:`str`, optional - Method used to calculate the convolution (``direct`` or ``fft``). + Method used to calculate the convolution (``auto``, ``direct`` or ``fft``) + - see :func:`scipy.signal.convolve` for details. dtype : :obj:`str`, optional Type of elements in input array. name : :obj:`str`, optional @@ -36,7 +37,7 @@ class Convolve2D(ConvolveND): Attributes ---------- - nh : :obj:`int` + nh : :obj:`tuple` Length of the filter convolve : :obj:`callable` Convolution function @@ -95,16 +96,17 @@ class Convolve2D(ConvolveND): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, h: NDArray, offset: InputDimsLike = (0, 0), axes: InputDimsLike = (-2, -1), - method: str = "fft", + method: Literal["auto", "direct", "fft"] | None = "fft", dtype: DTypeLike = "float64", name: str = "C", ): if h.ndim != 2: - raise ValueError("h must be 2-dimensional") + msg = "`h` must be 2-dimensional" + raise ValueError(msg) super().__init__( dims=dims, h=h, diff --git a/pylops/signalprocessing/convolvend.py b/pylops/signalprocessing/convolvend.py index 4bf4177f1..490d7f41f 100644 --- a/pylops/signalprocessing/convolvend.py +++ b/pylops/signalprocessing/convolvend.py @@ -1,6 +1,6 @@ __all__ = ["ConvolveND"] -from typing import Optional, Union +from typing import Literal import numpy as np @@ -36,7 +36,8 @@ class ConvolveND(LinearOperator): Axes along which convolution is applied method : :obj:`str`, optional - Method used to calculate the convolution (``direct`` or ``fft``). + Method used to calculate the convolution (``auto``, ``direct`` or ``fft``) + - see :func:`scipy.signal.convolve` for details. dtype : :obj:`str`, optional Type of elements in input array. name : :obj:`str`, optional @@ -46,7 +47,7 @@ class ConvolveND(LinearOperator): Attributes ---------- - nh : :obj:`int` + nh : :obj:`tuple` Length of the filter convolve : :obj:`callable` Convolution function @@ -74,11 +75,11 @@ class ConvolveND(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, h: NDArray, - offset: Optional[InputDimsLike] = None, + offset: InputDimsLike | None = None, axes: InputDimsLike = (-2, -1), - method: str = "fft", + method: Literal["auto", "direct", "fft"] | None = "fft", dtype: DTypeLike = "float64", name: str = "C", ): diff --git a/pylops/signalprocessing/dct.py b/pylops/signalprocessing/dct.py index fa36e96fc..688995dad 100644 --- a/pylops/signalprocessing/dct.py +++ b/pylops/signalprocessing/dct.py @@ -1,6 +1,6 @@ __all__ = ["DCT"] -from typing import List, Optional, Union +from typing import Literal import numpy as np from scipy import fft @@ -69,16 +69,16 @@ class DCT(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], - type: int = 2, - axes: Union[int, List[int]] = None, + dims: int | InputDimsLike, + type: Literal[1, 2, 3, 4] = 2, + axes: int | list[int] = None, dtype: DTypeLike = "float64", - workers: Optional[int] = None, + workers: int | None = None, name: str = "C", ) -> None: - if type > 4 or type < 1: - raise ValueError("wrong type value, it can only be 1, 2, 3 or 4") + msg = f"Wrong `type`, it can only be 1, 2, 3 or 4, got {type}" + raise ValueError(msg) self.type = type self.axes = axes self.workers = workers diff --git a/pylops/signalprocessing/dtcwt.py b/pylops/signalprocessing/dtcwt.py index 13f1d7298..6e9a24fa6 100644 --- a/pylops/signalprocessing/dtcwt.py +++ b/pylops/signalprocessing/dtcwt.py @@ -1,6 +1,6 @@ __all__ = ["DTCWT"] -from typing import Any, NewType, Union +from typing import Any, NewType import numpy as np @@ -97,7 +97,7 @@ class DTCWT(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, biort: str = "near_sym_a", qshift: str = "qshift_a", level: int = 3, @@ -152,7 +152,7 @@ def __init__( def _interpret_coeffs( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int, ) -> None: x = np.ones(dims[axis]) diff --git a/pylops/signalprocessing/dwt.py b/pylops/signalprocessing/dwt.py index 0448ae371..e92058614 100644 --- a/pylops/signalprocessing/dwt.py +++ b/pylops/signalprocessing/dwt.py @@ -1,7 +1,6 @@ __all__ = ["DWT"] from math import ceil, log -from typing import Union import numpy as np @@ -21,7 +20,8 @@ def _checkwavelet(wavelet: str) -> None: """Check that wavelet belongs to pywt.wavelist""" wavelist = pywt.wavelist(kind="discrete") if wavelet not in wavelist: - raise ValueError(f"'{wavelet}' not in family set = {wavelist}") + msg = f"'{wavelet}' not in family set = {wavelist}" + raise ValueError(msg) def _adjointwavelet(wavelet: str) -> str: @@ -55,8 +55,7 @@ class DWT(LinearOperator): Axis along which DWT is applied wavelet : :obj:`str`, optional Name of wavelet type. Use :func:`pywt.wavelist(kind='discrete')` for - a list of - available wavelets. + a list of available wavelets. level : :obj:`int`, optional Number of scaling levels (must be >=0). dtype : :obj:`str`, optional @@ -109,7 +108,7 @@ class DWT(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, wavelet: str = "haar", level: int = 1, diff --git a/pylops/signalprocessing/fft.py b/pylops/signalprocessing/fft.py index 42c362280..fb234dccf 100644 --- a/pylops/signalprocessing/fft.py +++ b/pylops/signalprocessing/fft.py @@ -2,10 +2,8 @@ import logging import warnings -from typing import Optional, Union import numpy as np -import numpy.typing as npt import scipy.fft from pylops import LinearOperator @@ -13,7 +11,13 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module, inplace_divide, inplace_multiply from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import ( + DTypeLike, + InputDimsLike, + NDArray, + Tfftengine_nfsm, + Tfftnorm, +) pyfftw_message = deps.pyfftw_import("the fft module") mkl_fft_message = deps.mkl_fft_import("the fft module") @@ -33,11 +37,11 @@ class _FFT_numpy(_BaseFFT): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, - norm: str = "ortho", + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -57,7 +61,9 @@ def __init__( ) if self.cdtype != np.complex128: warnings.warn( - f"numpy backend always returns complex128 dtype. To respect the passed dtype, data will be casted to {self.cdtype}." + "numpy backend always returns complex128 dtype. To respect the " + f"passed dtype, data will be casted to {self.cdtype}.", + stacklevel=2, ) self._kwargs_fft = kwargs_fft @@ -134,7 +140,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = y.astype(self.rdtype) return y - def __truediv__(self, y: npt.ArrayLike) -> npt.ArrayLike: + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) @@ -145,11 +151,11 @@ class _FFT_scipy(_BaseFFT): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, - norm: str = "ortho", + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -232,7 +238,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = scipy.fft.fftshift(y, axes=self.axis) return y - def __truediv__(self, y): + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) @@ -243,11 +249,11 @@ class _FFT_fftw(_BaseFFT): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, - norm: str = "ortho", + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -256,7 +262,8 @@ def __init__( ) -> None: if np.dtype(dtype) == np.float16: warnings.warn( - "fftw backend is unavailable with float16 dtype. Will use float32." + "fftw backend is unavailable with float16 dtype. Will use float32.", + stacklevel=2, ) dtype = np.float32 @@ -265,7 +272,8 @@ def __init__( if badop == "ortho" and norm == "ortho": continue warnings.warn( - f"FFTW option '{badop}' will be overwritten by norm={norm}" + f"FFTW option '{badop}' will be overwritten by norm={norm}", + stacklevel=2, ) del kwargs_fft[badop] @@ -282,7 +290,9 @@ def __init__( ) if self.cdtype != np.complex128: warnings.warn( - f"fftw backend returns complex128 dtype. To respect the passed dtype, data will be cast to {self.cdtype}." + "fftw backend returns complex128 dtype. To respect the " + f"passed dtype, data will be cast to {self.cdtype}.", + stacklevel=2, ) dims_t = list(self.dims) @@ -393,7 +403,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = np.real(y) return y - def __truediv__(self, y: npt.ArrayLike) -> npt.ArrayLike: + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is _FFTNorms.ORTHO: return self._rmatvec(y) return self._rmatvec(y) / self._scale @@ -404,11 +414,11 @@ class _FFT_mklfft(_BaseFFT): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, - norm: str = "ortho", + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -485,22 +495,22 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = scipy.fft.fftshift(y, axes=self.axis) return y - def __truediv__(self, y): + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) def FFT( - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, axis: int = -1, - nfft: Optional[int] = None, + nfft: int | None = None, sampling: float = 1.0, - norm: str = "ortho", + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, - engine: str = "numpy", + engine: Tfftengine_nfsm = "numpy", dtype: DTypeLike = "complex128", name: str = "F", **kwargs_fft, @@ -626,7 +636,7 @@ def FFT( ValueError - If ``dims`` is provided and ``axis`` is bigger than ``len(dims)``. - If ``norm`` is not one of "ortho", "none", or "1/n". - NotImplementedError + ValueError If ``engine`` is neither ``numpy``, ``fftw``, ``scipy`` nor ``mkl_fft``. See Also @@ -720,6 +730,7 @@ def FFT( **kwargs_fft, ) else: - raise NotImplementedError("engine must be numpy, scipy, fftw, or mkl_fft") + msg = "`engine` must be numpy, scipy, fftw, or mkl_fft" + raise ValueError(msg) f.name = name return f diff --git a/pylops/signalprocessing/fft2d.py b/pylops/signalprocessing/fft2d.py index cf5cc2b43..e05d6d213 100644 --- a/pylops/signalprocessing/fft2d.py +++ b/pylops/signalprocessing/fft2d.py @@ -1,7 +1,8 @@ __all__ = ["FFT2D"] import warnings -from typing import Dict, Optional, Sequence, Union +from collections.abc import Sequence +from typing import Literal import numpy as np import scipy.fft @@ -11,7 +12,7 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tfftnorm mkl_fft_message = deps.mkl_fft_import("the mkl fft module") @@ -27,9 +28,9 @@ def __init__( self, dims: InputDimsLike, axes: InputDimsLike = (-2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -49,20 +50,24 @@ def __init__( ) if self.cdtype != np.complex128: warnings.warn( - f"numpy backend always returns complex128 dtype. To respect the passed dtype, data will be casted to {self.cdtype}." + "numpy backend always returns complex128 dtype. To respect the " + f"passed dtype, data will be casted to {self.cdtype}.", + stacklevel=2, ) # checks if self.ndim < 2: - raise ValueError("FFT2D requires at least two input dimensions") + msg = "FFT2D requires at least two input dimensions" + raise ValueError(msg) if self.naxes != 2: - raise ValueError("FFT2D must be applied along exactly two dimensions") + msg = "FFT2D must be applied along exactly two dimensions" + raise ValueError(msg) self.f1, self.f2 = self.fs del self.fs self._kwargs_fft = kwargs_fft - self._norm_kwargs: Dict[str, Union[None, str]] = { + self._norm_kwargs: dict[str, None | str] = { "norm": None } # equivalent to "backward" in Numpy/Scipy if self.norm is _FFTNorms.ORTHO: @@ -131,7 +136,7 @@ def _rmatvec(self, x): y = ncp.fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y): + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) @@ -144,9 +149,9 @@ def __init__( self, dims: InputDimsLike, axes: InputDimsLike = (-2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -167,15 +172,17 @@ def __init__( # checks if self.ndim < 2: - raise ValueError("FFT2D requires at least two input dimensions") + msg = "FFT2D requires at least two input dimensions" + raise ValueError(msg) if self.naxes != 2: - raise ValueError("FFT2D must be applied along exactly two dimensions") + msg = "FFT2D must be applied along exactly two dimensions" + raise ValueError(msg) self.f1, self.f2 = self.fs del self.fs self._kwargs_fft = kwargs_fft - self._norm_kwargs: Dict[str, Union[None, str]] = { + self._norm_kwargs: dict[str, None | str] = { "norm": None } # equivalent to "backward" in Numpy/Scipy if self.norm is _FFTNorms.ORTHO: @@ -236,7 +243,7 @@ def _rmatvec(self, x): y = scipy.fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y): + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale / self._scale return self._rmatvec(y) @@ -249,9 +256,9 @@ def __init__( self, dims: InputDimsLike, axes: InputDimsLike = (-2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -272,15 +279,17 @@ def __init__( # checks if self.ndim < 2: - raise ValueError("FFT2D requires at least two input dimensions") + msg = "FFT2D requires at least two input dimensions" + raise ValueError(msg) if self.naxes != 2: - raise ValueError("FFT2D must be applied along exactly two dimensions") + msg = "FFT2D must be applied along exactly two dimensions" + raise ValueError(msg) self.f1, self.f2 = self.fs del self.fs self._kwargs_fft = kwargs_fft - self._norm_kwargs: Dict[str, Union[None, str]] = {"norm": None} + self._norm_kwargs: dict[str, None | str] = {"norm": None} if self.norm is _FFTNorms.ORTHO: self._norm_kwargs["norm"] = "ortho" self._scale = np.sqrt(1 / np.prod(np.sqrt(self.nffts))) @@ -348,7 +357,7 @@ def _rmatvec(self, x): y = scipy.fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y): + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale / self._scale return self._rmatvec(y) @@ -357,13 +366,13 @@ def __truediv__(self, y): def FFT2D( dims: InputDimsLike, axes: InputDimsLike = (-2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, - engine: str = "numpy", + engine: Literal["numpy", "scipy", "mkl_fft"] = "numpy", dtype: DTypeLike = "complex128", name: str = "F", **kwargs_fft, @@ -502,7 +511,7 @@ def FFT2D( - If ``nffts`` or ``sampling`` are not either a single value or a tuple with two elements. - If ``norm`` is not one of "ortho", "none", or "1/n". - NotImplementedError + ValueError If ``engine`` is neither ``numpy``, ``scipy`` nor ``mkl_fft``. See Also @@ -575,6 +584,7 @@ def FFT2D( **kwargs_fft, ) else: - raise NotImplementedError("engine must be numpy, scipy or mkl_fft") + msg = "`engine` must be numpy, scipy or mkl_fft" + raise ValueError(msg) f.name = name return f diff --git a/pylops/signalprocessing/fftnd.py b/pylops/signalprocessing/fftnd.py index 9707dfc62..980ffa116 100644 --- a/pylops/signalprocessing/fftnd.py +++ b/pylops/signalprocessing/fftnd.py @@ -1,10 +1,10 @@ __all__ = ["FFTND"] import warnings -from typing import Optional, Sequence, Union +from collections.abc import Sequence +from typing import Literal import numpy as np -import numpy.typing as npt import scipy.fft from pylops import LinearOperator @@ -12,7 +12,7 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module, get_sp_fft from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tfftnorm mkl_fft_message = deps.mkl_fft_import("the mkl fft module") @@ -26,11 +26,11 @@ class _FFTND_numpy(_BaseFFTND): def __init__( self, - dims: Union[int, InputDimsLike], - axes: Union[int, InputDimsLike] = (-3, -2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + dims: int | InputDimsLike, + axes: int | InputDimsLike = (-3, -2, -1), + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -50,7 +50,9 @@ def __init__( ) if self.cdtype != np.complex128: warnings.warn( - f"numpy backend always returns complex128 dtype. To respect the passed dtype, data will be cast to {self.cdtype}." + "numpy backend always returns complex128 dtype. " + "To respect the passed dtype, data will be cast to {self.cdtype}.", + stacklevel=2, ) self._kwargs_fft = kwargs_fft @@ -108,7 +110,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: ) if self.norm is _FFTNorms.NONE: y *= self._scale - for ax, nfft in zip(self.axes, self.nffts): + for ax, nfft in zip(self.axes, self.nffts, strict=True): if nfft > self.dims[ax]: y = ncp.take(y, np.arange(self.dims[ax]), axis=ax) if self.doifftpad: @@ -120,7 +122,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = ncp.fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y: npt.ArrayLike) -> npt.ArrayLike: + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) @@ -131,11 +133,11 @@ class _FFTND_scipy(_BaseFFTND): def __init__( self, - dims: Union[int, InputDimsLike], - axes: Union[int, InputDimsLike] = (-3, -2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + dims: int | InputDimsLike, + axes: int | InputDimsLike = (-3, -2, -1), + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -207,7 +209,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: ) if self.norm is _FFTNorms.NONE: y *= self._scale - for ax, nfft in zip(self.axes, self.nffts): + for ax, nfft in zip(self.axes, self.nffts, strict=True): if nfft > self.dims[ax]: y = np.take(y, range(self.dims[ax]), axis=ax) if self.doifftpad: @@ -218,7 +220,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = sp_fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y: npt.ArrayLike) -> npt.ArrayLike: + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) @@ -229,11 +231,11 @@ class _FFTND_mklfft(_BaseFFTND): def __init__( self, - dims: Union[int, InputDimsLike], - axes: Union[int, InputDimsLike] = (-3, -2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + dims: int | InputDimsLike, + axes: int | InputDimsLike = (-3, -2, -1), + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, @@ -307,7 +309,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: ) if self.norm is _FFTNorms.NONE: y *= self._scale - for ax, nfft in zip(self.axes, self.nffts): + for ax, nfft in zip(self.axes, self.nffts, strict=True): if nfft > self.dims[ax]: y = np.take(y, range(self.dims[ax]), axis=ax) if self.doifftpad: @@ -318,22 +320,22 @@ def _rmatvec(self, x: NDArray) -> NDArray: y = scipy.fft.fftshift(y, axes=self.axes[self.ifftshift_before]) return y - def __truediv__(self, y: npt.ArrayLike) -> npt.ArrayLike: + def __truediv__(self, y: NDArray) -> NDArray: if self.norm is not _FFTNorms.ORTHO: return self._rmatvec(y) / self._scale return self._rmatvec(y) def FFTND( - dims: Union[int, InputDimsLike], - axes: Union[int, InputDimsLike] = (-3, -2, -1), - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Union[float, Sequence[float]] = 1.0, - norm: str = "ortho", + dims: int | InputDimsLike, + axes: int | InputDimsLike = (-3, -2, -1), + nffts: int | InputDimsLike | None = None, + sampling: float | Sequence[float] = 1.0, + norm: Tfftnorm = "ortho", real: bool = False, ifftshift_before: bool = False, fftshift_after: bool = False, - engine: str = "scipy", + engine: Literal["numpy", "scipy", "mkl_fft"] = "scipy", dtype: DTypeLike = "complex128", name: str = "F", **kwargs_fft, @@ -479,7 +481,7 @@ def FFTND( - If ``nffts`` or ``sampling`` are not either a single value or tuple with the same dimension ``axes``. - If ``norm`` is not one of "ortho", "none", or "1/n". - NotImplementedError + ValueError If ``engine`` is neither ``numpy``, ``scipy`` nor ``mkl_fft``. Notes @@ -555,6 +557,7 @@ def FFTND( **kwargs_fft, ) else: - raise NotImplementedError("engine must be numpy, scipy or mkl_fft") + msg = "`engine` must be numpy, scipy or mkl_fft" + raise ValueError(msg) f.name = name return f diff --git a/pylops/signalprocessing/fourierradon2d.py b/pylops/signalprocessing/fourierradon2d.py index af8032f61..6ce538257 100755 --- a/pylops/signalprocessing/fourierradon2d.py +++ b/pylops/signalprocessing/fourierradon2d.py @@ -1,6 +1,6 @@ __all__ = ["FourierRadon2D"] -from typing import Optional, Tuple +from typing import Literal import numpy as np import scipy as sp @@ -9,7 +9,7 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module, get_complex_dtype from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tengine_nnc jit_message = deps.numba_import("the radon2d module") cupy_message = deps.cupy_import("the radon2d module") @@ -97,7 +97,7 @@ class FourierRadon2D(LinearOperator): Raises ------ - NotImplementedError + ValueError If ``engine`` is neither ``numpy``, ``numba``, nor ``cuda``. Notes @@ -145,16 +145,17 @@ def __init__( haxis: NDArray, pxaxis: NDArray, nfft: int, - flims: Optional[Tuple[int, int]] = None, - kind: str = "linear", - engine: str = "numpy", - num_threads_per_blocks: Tuple[int, int] = (32, 32), + flims: tuple[int, int] | None = None, + kind: Literal["linear", "parabolic"] = "linear", + engine: Tengine_nnc = "numpy", + num_threads_per_blocks: tuple[int, int] = (32, 32), dtype: DTypeLike = "float64", name: str = "R", ) -> None: # engine if engine not in ["numpy", "numba", "cuda"]: - raise NotImplementedError("engine must be numpy or numba or cuda") + msg = "`engine` must be numpy or numba or cuda" + raise ValueError(msg) if engine == "numba" and jit_message is not None: engine = "numpy" diff --git a/pylops/signalprocessing/fourierradon3d.py b/pylops/signalprocessing/fourierradon3d.py index 7f677c563..18453d7c2 100755 --- a/pylops/signalprocessing/fourierradon3d.py +++ b/pylops/signalprocessing/fourierradon3d.py @@ -1,6 +1,6 @@ __all__ = ["FourierRadon3D"] -from typing import Optional, Tuple +from typing import Literal import numpy as np import scipy as sp @@ -9,7 +9,7 @@ from pylops.utils import deps from pylops.utils.backend import get_array_module, get_complex_dtype from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tengine_nnc jit_message = deps.numba_import("the radon2d module") cupy_message = deps.cupy_import("the radon2d module") @@ -113,7 +113,7 @@ class FourierRadon3D(LinearOperator): Raises ------ - NotImplementedError + ValueError If ``engine`` is neither ``numpy``, ``numba``, nor ``cuda``. ValueError If ``kind`` is not a tuple of two elements. @@ -165,22 +165,27 @@ def __init__( pyaxis: NDArray, pxaxis: NDArray, nfft: int, - flims: Optional[Tuple[int, int]] = None, - kind: Tuple[str, str] = ("linear", "linear"), - engine: str = "numpy", - num_threads_per_blocks: Tuple[int, int, int] = (2, 16, 16), + flims: tuple[int, int] | None = None, + kind: tuple[Literal["linear", "parabolic"], Literal["linear", "parabolic"]] = ( + "linear", + "linear", + ), + engine: Tengine_nnc = "numpy", + num_threads_per_blocks: tuple[int, int, int] = (2, 16, 16), dtype: DTypeLike = "float64", name: str = "R", ) -> None: # engine if engine not in ["numpy", "numba", "cuda"]: - raise NotImplementedError("engine must be numpy or numba or cuda") + msg = "`engine` must be numpy or numba or cuda" + raise ValueError(msg) if engine == "numba" and jit_message is not None: engine = "numpy" # kind if len(kind) != 2: - raise ValueError("kind must be a tuple of two elements") + msg = "kind must be a tuple of two elements" + raise ValueError(msg) # dimensions and super dims = len(pyaxis), len(pxaxis), len(taxis) diff --git a/pylops/signalprocessing/interp.py b/pylops/signalprocessing/interp.py index 04c9c5f34..c8c517732 100644 --- a/pylops/signalprocessing/interp.py +++ b/pylops/signalprocessing/interp.py @@ -1,39 +1,36 @@ __all__ = ["Interp"] -import warnings -from typing import Tuple, Union +from typing import Literal import numpy as np -import numpy.typing as npt from pylops import LinearOperator, aslinearoperator from pylops.basicoperators import Diagonal, MatrixMult, Restriction, Transpose +from pylops.signalprocessing._interp_utils import ( + _clip_iava_above_last_sample_index, + _ensure_iava_is_unique, +) +from pylops.signalprocessing.interpspline import InterpCubicSpline from pylops.utils._internal import _value_or_sized_to_tuple from pylops.utils.backend import get_array_module -from pylops.utils.typing import DTypeLike, InputDimsLike, IntNDArray - - -def _checkunique(iava: npt.ArrayLike) -> None: - _, count = np.unique(iava, return_counts=True) - if np.any(count > 1): - raise ValueError("Repeated values in iava array") +from pylops.utils.typing import DTypeLike, InputDimsLike, IntNDArray, SamplingLike def _nearestinterp( - dims: Union[int, InputDimsLike], - iava: IntNDArray, + dims: int | InputDimsLike, + iava: SamplingLike, axis: int = -1, dtype: DTypeLike = "float64", ): """Nearest neighbour interpolation.""" iava = np.round(iava).astype(int) - _checkunique(iava) + _ensure_iava_is_unique(iava=iava) return Restriction(dims, iava, axis=axis, dtype=dtype), iava def _linearinterp( dims: InputDimsLike, - iava: IntNDArray, + iava: SamplingLike, axis: int = -1, dtype: DTypeLike = "float64", ): @@ -43,26 +40,22 @@ def _linearinterp( if np.issubdtype(iava.dtype, np.integer): iava = iava.astype(np.float64) - lastsample = dims[axis] + sample_size = dims[axis] dimsd = list(dims) dimsd[axis] = len(iava) dimsd = tuple(dimsd) # ensure that samples are not beyond the last sample, in that case set to # penultimate sample and raise a warning - outside = iava >= lastsample - 1 - if sum(outside) > 0: - warnings.warn( - "At least one value is beyond the penultimate sample, " - "forced to be at penultimate sample" - ) - iava[outside] = lastsample - 1 - 1e-10 - _checkunique(iava) + iava = _clip_iava_above_last_sample_index( # type: ignore + iava=iava, # type: ignore + sample_size=sample_size, + ) # find indices and weights iva_l = ncp.floor(iava).astype(int) iva_r = iva_l + 1 - weights = iava - iva_l + weights = (iava - iva_l).astype(dtype) # create operators Op = Diagonal(1 - weights, dims=dimsd, axis=axis, dtype=dtype) * Restriction( @@ -75,19 +68,20 @@ def _linearinterp( def _sincinterp( dims: InputDimsLike, - iava: IntNDArray, + iava: SamplingLike, axis: int = 0, dtype: DTypeLike = "float64", ): """Sinc interpolation.""" ncp = get_array_module(iava) - _checkunique(iava) + + _ensure_iava_is_unique(iava=iava) # create sinc interpolation matrix nreg = dims[axis] ireg = ncp.arange(nreg) sinc = ncp.tile(iava[:, np.newaxis], (1, nreg)) - ncp.tile(ireg, (len(iava), 1)) - sinc = ncp.sinc(sinc) + sinc = ncp.sinc(sinc).astype(dtype) # identify additional dimensions and create MatrixMult operator otherdims = np.array(dims) @@ -108,13 +102,13 @@ def _sincinterp( def Interp( - dims: Union[int, InputDimsLike], - iava: IntNDArray, + dims: int | InputDimsLike, + iava: SamplingLike, axis: int = -1, - kind: str = "linear", + kind: Literal["linear", "nearest", "sinc", "cubic_spline"] = "linear", dtype: DTypeLike = "float64", name: str = "I", -) -> Tuple[LinearOperator, IntNDArray]: +) -> tuple[LinearOperator, IntNDArray]: r"""Interpolation operator. Apply interpolation along ``axis`` from regularly sampled input @@ -136,11 +130,19 @@ def Interp( cost as it involves multiplying the input data by a matrix of size :math:`N \times M`. + - *Cubic Spline interpolation* relies on a cubic spline, i.e., a 2-times + continuously differentiable piecewise third order polynomial with equally spaced + knots. It is interpolated at the locations ``iava`` by evaluating the respective + polynomial fitted between ``np.floor(iava)`` and ``np.floor(iava) + 1``. + It offers an excellent tradeoff between accuracy and computational complexity + and its results oscillate less than those obtained from sinc interpolation. + It can also be accessed directly via :class:`pylops.signalprocessing.InterpCubicSpline`. + .. note:: The vector ``iava`` should contain unique values. If the same index is repeated twice an error will be raised. This also applies when values beyond the last element of the input array for - *linear interpolation* as those values are forced to be just before this - element. + *linear interpolation* and *cubic spline interpolation* as those values are forced + to be just before this element. Parameters ---------- @@ -153,8 +155,13 @@ def Interp( Axis along which interpolation is applied. kind : :obj:`str`, optional - Kind of interpolation (``nearest``, ``linear``, and ``sinc`` are - currently supported) + Kind of interpolation. + Currently, ``"nearest"``, ``"linear"``, ``"sinc"``, and ``"cubic_spline"`` are + available. + + .. versionadded:: 2.7.0 + + The ``"cubic_spline"``-interpolation was added. dtype : :obj:`str`, optional Type of elements in input array. name : :obj:`str`, optional @@ -165,7 +172,7 @@ def Interp( Returns ------- op : :obj:`pylops.LinearOperator` - Linear intepolation operator + Linear interpolation operator iava : :obj:`list` or :obj:`numpy.ndarray` Corrected indices of locations of available samples (samples at ``M-1`` or beyond are forced to be at ``M-1-eps``) @@ -175,7 +182,7 @@ def Interp( ValueError If the vector ``iava`` contains repeated values. NotImplementedError - If ``kind`` is not ``nearest``, ``linear`` or ``sinc`` + If ``kind`` is not ``nearest``, ``linear``, ``sinc``, or ``cubic_spline`` See Also -------- @@ -216,6 +223,12 @@ def Interp( :math:`i,j` possible combinations. """ + + kind = kind.lower() # type: ignore + if kind not in {"nearest", "linear", "sinc", "cubic_spline"}: + msg = f"{kind} interpolation could not be found." + raise NotImplementedError(msg) + dims = _value_or_sized_to_tuple(dims) if kind == "nearest": @@ -224,11 +237,19 @@ def Interp( interpop, iava, dims, dimsd = _linearinterp(dims, iava, axis=axis, dtype=dtype) elif kind == "sinc": interpop, dims, dimsd = _sincinterp(dims, iava, axis=axis, dtype=dtype) - else: - raise NotImplementedError("kind is not correct...") + elif kind == "cubic_spline": + interpop = InterpCubicSpline( + dims=dims, + iava=iava, + axis=axis, + dtype=dtype, + name=name, + ) + iava = interpop.iava + # add dims and dimsd to composite operators (not needed for neareast as # interpop is a Restriction operator already - if kind != "nearest": + if kind not in {"nearest", "cubic_spline"}: interpop = aslinearoperator(interpop) interpop.dims = dims interpop.dimsd = dimsd diff --git a/pylops/signalprocessing/interpspline.py b/pylops/signalprocessing/interpspline.py new file mode 100644 index 000000000..60a7c9c20 --- /dev/null +++ b/pylops/signalprocessing/interpspline.py @@ -0,0 +1,961 @@ +__all__ = [ + "InterpCubicSpline", +] + +from collections.abc import Callable +from dataclasses import dataclass +from functools import cached_property, partial +from typing import Final, Literal + +import numpy as np +from scipy.linalg import get_lapack_funcs +from scipy.sparse import csr_matrix + +from pylops import LinearOperator +from pylops.signalprocessing._interp_utils import _clip_iava_above_last_sample_index +from pylops.utils._internal import _value_or_sized_to_tuple +from pylops.utils.backend import get_normalize_axis_index +from pylops.utils.decorators import reshaped +from pylops.utils.typing import ( + DTypeLike, + FloatingNDArray, + InexactNDArray, + InputDimsLike, + IntNDArray, + SamplingLike, +) + +ONE_SIXTH: Final[float] = 1.0 / 6.0 +TWO_THIRDS: Final[float] = 2.0 / 3.0 + + +def _second_order_finite_differences_zero_padded( + x: InexactNDArray, + pad_width: tuple[tuple[int, int], ...], +) -> InexactNDArray: + """ + Computes the second order finite differences of ``x`` along axis 0 and pads the + result with ``pad_width[0][0]`` leading and `pad_width[0][1]`` trailing zeros + along the same axis. + + Parameters + ---------- + x : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The input array. + It is processed along axis 0. + pad_width : ((:obj:`int`, :obj:`int`), ...) of length ``x.ndim`` + The ``pad_width`` argument to pass to ``numpy.pad`` to achieve the subsequent + zero padding along axis 0. + + Returns + ------- + x_diffs : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The second order finite differences of ``x`` padded with leading and trailing + zeros along axis 0. + + """ + + return np.pad( + np.diff( + x, + n=2, + axis=0, + ), + pad_width=pad_width, + mode="constant", + constant_values=0.0, + ) + + +def _second_order_finite_differences_zero_padded_transposed( + x: InexactNDArray, + x_slice: slice, + pad_width: tuple[tuple[int, int], ...], +) -> InexactNDArray: + """ + Computes the transposed operation of the second order finite differences operator + with subsequent zero padding along axis 0, i.e., + + - ``x[0 : x_slices[axis].start,]`` and ``x[x_slices[axis].stop ::]`` are not + considered, + - ``x[x_slice]`` is padded with ``pad_width[0][0]`` leading and ``pad_width[0][1]`` + trailing zeros, + - the second order finite differences of the padded array are computed + + Parameters + ---------- + x : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The input array. + It is processed along axis 0. + x_slices : (:obj:`slice`, ...) of length ``x.ndim`` + The slices to extract from ``x`` along each dimension to ignore leading and + trailing elements along axis 0. + pad_width : ((:obj:`int`, :obj:`int`), ...) of length ``x.ndim`` + The ``pad_width`` argument to pass to ``numpy.pad`` to achieve the zero + padding along axis 0. + + Returns + ------- + x_diffs : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The result of the transposed second order finite differences operator with + subsequent zero padding along axis 0. + + """ + + return np.diff( + np.pad( + x[x_slice], + pad_width=pad_width, + mode="constant", + constant_values=0.0, + ), + n=2, + axis=0, + ) + + +@dataclass +class _TridiagonalMatrix: + """ + Represents a tridiagonal matrix with + + - the main diagonal ``.main_diagonal``, + - the super-diagonal ``.super_diagonal``, + - the sub-diagonal ``.sub_diagonal``. + + """ + + main_diagonal: InexactNDArray + super_diagonal: InexactNDArray + sub_diagonal: InexactNDArray + + def __post_init__(self) -> None: + """ + Validates the input. + + """ + + for which in ("main", "super", "sub"): + ndim = getattr(self, f"{which}_diagonal").ndim + if ndim != 1: + msg = ( + f"Expected {which} diagonal to be a 1-dimensional Array, " + f"but it is{ndim}-dimensional." + ) + raise ValueError(msg) + + main_diagonal_dtype = self.main_diagonal.dtype.type + main_diagonal_size = self.main_diagonal.size + for which in ("super", "sub"): + diag = getattr(self, f"{which}_diagonal") + dtype = diag.dtype.type + size = diag.size + + if dtype != main_diagonal_dtype: + msg = ( + f"Expected {which} diagonal to have the same dtype as the main " + f"diagonal, but its dtype is {repr(dtype)} and that of the main " + f"diagonal is {repr(main_diagonal_dtype)}." + ) + raise TypeError(msg) + + if size != main_diagonal_size - 1: + msg = ( + f"Expected {which} diagonal to have 1 entry less than the main " + f"diagonal, but it has {size} entries and the main diagonal has " + f"{main_diagonal_size} entries." + ) + raise ValueError(msg) + + return + + def __iter__(self): + """ + Returns an iterator over the sub-diagonal, main diagonal and super-diagonal + (in that order) as required for the LAPACK routines ``?gttrf``. + + """ + + yield self.sub_diagonal + yield self.main_diagonal + yield self.super_diagonal + + return + + def __len__(self) -> int: + """ + Returns the number of rows of the tridiagonal matrix. + + """ + + return self.main_diagonal.size + + @property + def dtype(self) -> DTypeLike: + return self.main_diagonal.dtype + + @property + def T(self) -> "_TridiagonalMatrix": + """ + Returns the transpose of the tridiagonal matrix. + + """ + + return _TridiagonalMatrix( + main_diagonal=self.main_diagonal, + super_diagonal=self.sub_diagonal, + sub_diagonal=self.super_diagonal, + ) + + +@dataclass +class _BandedLUDecomposition: + """ + Represents the LU decomposition of a general banded matrix as performed by the + LAPACK routines ``?gbtrf``. + This class was implemented for spline interpolations between only 2 data points + because the class :class:`_TridiagonalLUDecomposition` uses the LAPACK routines + ``?gttrf`` that cannot handle 2 x 2 tridiagonal matrices. + + """ + + lu_banded: InexactNDArray + pivot_indices: IntNDArray + num_sub: int + num_super: int + + @staticmethod + def from_tridiagonal_matrix( + matrix: _TridiagonalMatrix, + lapack_factorizer: Callable, + ) -> "_BandedLUDecomposition": + """ + Computes the LU decomposition of a tridiagonal matrix using the LAPACK routine + ``?gbtrf``. + + Parameters + ---------- + matrix : :obj:`_TridiagonalMatrix` + The tridiagonal matrix to decompose. + lapack_factorizer : callable + The LAPACK routine ``?gbtrf`` to use for the decomposition. + + Returns + ------- + lu_decomposition : :obj:`_BandedLUDecomposition` + The LU decomposition of the tridiagonal matrix. + + """ + + banded_representation = np.empty( + shape=(4, len(matrix)), + dtype=matrix.dtype, + ) + banded_representation[1, 1::] = matrix.super_diagonal + banded_representation[2, ::] = matrix.main_diagonal + banded_representation[3, 0:-1] = matrix.sub_diagonal + + ( + lu_banded, + pivot_indices, + info, + ) = lapack_factorizer( + ab=banded_representation, + kl=1, + ku=1, + ) + + if info == 0: + return _BandedLUDecomposition( + lu_banded=lu_banded, + pivot_indices=pivot_indices, + num_sub=1, + num_super=1, + ) + + msg = f"Could not LU-factorize tridiagonal matrix! Got {info=}." + raise np.linalg.LinAlgError(msg) + + def solve( + self, + rhs: InexactNDArray, + lapack_solver: Callable, + ) -> InexactNDArray: + """ + Solves the linear system of equations ``A @ x = rhs`` where ``A`` is the + tridiagonal matrix represented by the LU decomposition. For this, the LAPACK + routine ``?gbtrs`` is used. + + Parameters + ---------- + rhs : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The right-hand side(s) of the linear system of equations. + It is processed along axis 0, i.e., + + - a 1D-Array is treated as a single right hand side. + - each colum of a 2D-Array is treated as a single right hand side. + + lapack_solver : callable + The LAPACK routine ``?gbtrs`` to use for solving the system. + + Returns + ------- + x : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The solution of the linear system(s) of equations. + For 2D-Arrays, the ``j``-th column is the solution of the respective + ``rhs[::, j]``. + + """ + + x, info = lapack_solver( + self.lu_banded, + self.num_sub, + self.num_super, + rhs, + self.pivot_indices, + ) + + if info == 0: + return x + + msg = f"Could not solve LU-factorization of tridiagonal matrix! Got {info=}." + raise np.linalg.LinAlgError(msg) + + +@dataclass +class _TridiagonalLUDecomposition: + """ + Represents the LU decomposition of a tridiagonal matrix as performed by the LAPACK + routines ``?gttrf``. + + """ + + sub_diagonal_lu: InexactNDArray + main_diagonal_lu: InexactNDArray + super_diagonal_lu: InexactNDArray + super_two_diagonal_lu: InexactNDArray + pivot_indices: IntNDArray + + def __iter__(self): + """ + Returns an iterator over the sub-diagonal, main diagonal, super-diagonal, + the second super-diagonal (filled by pivoting) and the pivot indices + (in that order) as required for the LAPACK routines ``?gttrs``. + + """ + + yield self.sub_diagonal_lu + yield self.main_diagonal_lu + yield self.super_diagonal_lu + yield self.super_two_diagonal_lu + yield self.pivot_indices + + return + + @staticmethod + def from_tridiagonal_matrix( + matrix: _TridiagonalMatrix, + lapack_factorizer: Callable, + ) -> "_TridiagonalLUDecomposition": + """ + Computes the LU decomposition of a tridiagonal matrix using the LAPACK routine + ``?gttrf``. + + Parameters + ---------- + matrix : :obj:`_TridiagonalMatrix` + The tridiagonal matrix to decompose. + lapack_factorizer : callable + The LAPACK routine ``?gttrf`` to use for the decomposition. + + Returns + ------- + lu_decomposition : :obj:`_TridiagonalLUDecomposition` + The LU decomposition of the tridiagonal matrix. + + """ + + ( + sub_diagonal_lu, + main_diagonal_lu, + super_diagonal_lu, + super_two_diagonal_lu, + pivot_indices, + info, + ) = lapack_factorizer(*matrix) + + if info == 0: + return _TridiagonalLUDecomposition( + sub_diagonal_lu=sub_diagonal_lu, + main_diagonal_lu=main_diagonal_lu, + super_diagonal_lu=super_diagonal_lu, + super_two_diagonal_lu=super_two_diagonal_lu, + pivot_indices=pivot_indices, + ) + + msg = f"Could not LU-factorize tridiagonal matrix! Got {info=}." + raise np.linalg.LinAlgError(msg) + + def solve( + self, + rhs: InexactNDArray, + lapack_solver: Callable, + ) -> InexactNDArray: + """ + Solves the linear system of equations ``A @ x = rhs`` where ``A`` is the + tridiagonal matrix represented by the LU decomposition. For this, the LAPACK + routine ``?gttrs`` is used. + + Parameters + ---------- + rhs : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The right-hand side(s) of the linear system of equations. + It is processed along axis 0, i.e., + + - a 1D-Array is treated as a single right hand side. + - each colum of a 2D-Array is treated as a single right hand side. + + lapack_solver : callable + The LAPACK routine ``?gttrs`` to use for solving the system. + + Returns + ------- + x : :obj:`numpy.ndarray` of shape ``(n,)`` or shape ``(m, n)`` + The solution of the linear system(s) of equations. + For 2D-Arrays, the ``j``-th column is the solution of the respective + ``rhs[::, j]``. + + """ + + x, info = lapack_solver(*self, rhs) + + if info == 0: + return x + + msg = f"Could not solve LU-factorization of tridiagonal matrix! Got {info=}." + raise np.linalg.LinAlgError(msg) + + +def _make_cubic_spline_left_hand_side( + dims: int, +) -> _TridiagonalMatrix: + """ + Constructs the banded matrix ``A`` for the linear system of equations ``A @ m = b`` + where + + - ``A`` is a diagonally dominant tridiagonal matrix with the main diagonal + being ``[1, 2/3, 2/3, ..., 2/3, 2/3, 1]``, the super-diagonal being + ``[0, 1/6, 1/6, ..., 1/6, 1/6]`` and the sub-diagonal being + ``[1/6, 1/6, ..., 1/6, 1/6, 0]``, + - ``m`` is the unknown vector of spline coefficients, + - ``b`` is the second order finite differences of the ``y`` values for which the + spline should interpolate. + + Parameters + ---------- + dims : :obj:`int` + The number of points the spline should interpolate. + + Returns + ------- + matrix_a : :obj:`TridiagonalMatrix` + The tridiagonal matrix ``A``. + + """ + + main_diag = np.empty(shape=(dims,), dtype=np.float64) + super_diag = np.empty(shape=(dims - 1,), dtype=np.float64) + + main_diag[0] = 1.0 + main_diag[1 : dims - 1] = TWO_THIRDS + main_diag[dims - 1] = 1.0 + + super_diag[0] = 0.0 + super_diag[1 : dims - 1] = ONE_SIXTH + + return _TridiagonalMatrix( + main_diagonal=main_diag, + super_diagonal=super_diag, + sub_diagonal=np.flip(super_diag).copy(), # to avoid a view + ) + + +def _make_cubic_spline_x_csr( + dims: int, + iava: FloatingNDArray, + base_indices: IntNDArray, + iava_remainders: FloatingNDArray, +) -> csr_matrix: + """ + Constructs the specifications ``data``, ``indices``, and ``indptr`` for a + :obj:`scipy.sparse.csr_matrix` ``X`` that can be used to interpolate the + equally spaced ``y`` values with a cubic spline like ``X @ Q @ y`` where + + - ``X`` is the interpolation matrix to be constructed, + - ``Q`` is the linear operator that obtains the spline coefficients ``y`` + (a vertical concatenation of the ``y`` values and the spline coefficients + ``m``), + - ``y`` are the values to be interpolated. + + Parameters + ---------- + dims : :obj:`int` + The number of points the spline interpolation takes as input. + iava : :obj:`numpy.ndarray` of shape ``(n,)`` and dtype ``numpy.float64`` + Floating indices of the locations to which the spline should interpolate. + base_indices : :obj:`numpy.ndarray` of shape ``(n,)`` and dtype ``numpy.int64`` + The indices of the respective first data point in ``y`` for the intervals + in which the corresponding ``iava`` values lie. + iava_remainders : :obj:`numpy.ndarray` of shape ``(n,)`` and dtype ``numpy.float64`` + The remainders of the ``iava`` values after subtracting the respective + ``base_indices``. + + Returns + ------- + cubic_spline_interp_matrix : :obj:`scipy.sparse.csr_matrix` + The ``X`` is CSR-format. + + """ + + # some auxiliary variables are required + iava_remainders_cubic = ( # (x - x[i])³ + iava_remainders * iava_remainders * iava_remainders + ) + one_minus_iava_remainders = 1.0 - iava_remainders # (x[i + 1] - x) + one_minus_iava_remainders_cubic = ( # (x[i + 1] - x)³ + one_minus_iava_remainders + * one_minus_iava_remainders + * one_minus_iava_remainders + ) + + # for each data point, except for the first and the last one, we need 4 entries + # to multiply with ``y[i]``, ``y[i + 1]``, ``m[i]``, and ``m[i + 1]``; + + data = np.column_stack( + ( + one_minus_iava_remainders, + iava_remainders, + ONE_SIXTH * (one_minus_iava_remainders_cubic - one_minus_iava_remainders), + ONE_SIXTH * (iava_remainders_cubic - iava_remainders), + ) + ).ravel() + + indices = np.add.outer( + base_indices, + np.array([0, 1, dims, dims + 1], dtype=np.int64), + ).ravel() + + indptr = np.arange(0, 4 * (iava.size + 1), 4, dtype=np.int64) + + return csr_matrix( + ( + data, + indices, + indptr, + ), + shape=(iava.size, 2 * dims), + ) + + +class InterpCubicSpline(LinearOperator): + r""" + Cubic spline interpolation operator. + + Interpolate a regularly sampled input vector along ``axis`` at the fractional + positions ``iava`` using a cubic spline, i.e., a :math:`C^{2}`-continuous piecewise + third order polynomial. + + Currently, only cubic splines with natural boundary conditions are supported, i.e., + the second derivatives at the first and last sampling point are both zero. + + .. note:: The vector ``iava`` should contain unique values only. If the same + fractional index is present multiple times, an error will be raised. Elements that + exceed the last index ``dims[axis] - 1`` are clipped to the closest float value + right below ``dims[axis] - 1`` to avoid extrapolation. + + Parameters + ---------- + dims : :obj:`list` or :obj:`int` + Number of samples for each dimension. + A cubic spline requires ``dims[axis] > 2``. + iava : :obj:`list` or :obj:`numpy.ndarray` + Floating indices of the locations to which the spline should interpolate. + bc_type : :obj:`str`, optional + The type of boundary condition. + Currently, only ``"natural"`` is supported. + axis : :obj:`int`, optional + Axis along which interpolation is applied. + By default, the interpolation is carried out over the last axis. + dtype : ``numpy.dtype``-like, optional + The data type of the input and output arrays. + For complex input, both the real and the imaginary parts are interpolated + separately. + Only double precision versions of ``numpy.inexact`` are supported, i.e., either + ``"float64"`` (default) or ``"complex128"``. + Multiplication of the operator with data with less precise data types will + result in a type promotion. + name : :obj:`str`, optional + Name of operator (to be used by :func:`pylops.utils.describe.describe`). + + Attributes + ---------- + dims : :obj:`tuple` + Shape of the array after the adjoint, but before flattening. + For example, ``x_reshaped = (Op.H * y.ravel()).reshape(Op.dims)``. + dimsd : :obj:`tuple` + Shape of the array after the forward, but before flattening. + For example, ``y_reshaped = (Op * x.ravel()).reshape(Op.dimsd)``. + shape : :obj:`tuple` + Operator shape. + + Raises + ------ + ValueError + If ``dims[axis] < 2``. + ValueError + If the ``iava`` contains duplicate values. + NotImplementError + If ``bc_type != "natural"``. + TypeError + If ``dtype`` is neither ``numpy.float64`` nor ``numpy.complex128``. + + See Also + -------- + pylops.signalprocessing.Interp : General interpolation operator + :py:class:`scipy.interpolate.CubicSpline` : An equivalent implementation of the forward operator :math:`\mathbf{S}\mathbf{x}` + + References + ---------- + + .. [1] Wikipedia (German), Spline Interpolation + https://de.wikipedia.org/wiki/Spline-Interpolation#Kubisch_(Polynome_3._Grades) + + Notes + ----- + Cubic spline interpolation of an :math:`\left(N\times 1\right)`-vector + :math:`\mathbf{x}` at the :math:`L` fractional positions ``iava`` can be represented + as :math:`\mathbf{y}=\mathbf{S}\mathbf{x}` where :math:`\mathbf{S}` is the cubic + spline operator. + + The :math:`\left(N\times 1\right)`-grid-point vector at which :math:`\mathbf{x}` was + equidistantly sampled is denoted by the *"knot"* vector :math:`\mathbf{k}`, i.e., + :math:`\mathbf{x}_{j} = f\left(\mathbf{k}_{j}\right)`. Furthermore, the vector + ``iava`` is denoted by :math:`t` in the following mathematical expressions. + + When ``iava[i]`` (:math:`t_{i}`) is mapped to the :math:`j`-th knot-to-knot-interval + :math:`\mathbf{k}_{j}\le t_{i}\lt\mathbf{k}_{j + 1}`, the corresponding polynomial + :math:`s_{j}\left(t\right)` can be expressed as + + .. math:: + s_{j}\left(t\right) = p_{j,0}\left(t\right)\cdot\mathbf{x}_{j} + + p_{j,1}\left(t\right)\cdot\mathbf{x}_{j + 1} + + p_{j,2}\left(t\right)\cdot\mathbf{m}_{j} + + p_{j,3}\left(t\right)\cdot\mathbf{m}_{j + 1} + + where the :math:`\left(N\times 1\right)`-vector :math:`\mathbf{m}` holds, the second + order derivatives of the cubic spline at its knots and the base polynomials are + given by + + - :math:`p_{j,0}\left(t\right) = \mathbf{k}_{j + 1} - t` + - :math:`p_{j,1}\left(t\right) = t - \mathbf{k}_{j}` + - :math:`p_{j,2}\left(t\right) = \frac{1}{6}\cdot\left(\left(\mathbf{k}_{j + 1} - t\right)^{3} - \left(\mathbf{k}_{j + 1} - t\right)\right)` + - :math:`p_{j,3}\left(t\right) = \frac{1}{6}\cdot\left(\left(t - \mathbf{k}_{j}\right)^{3} - \left(t - \mathbf{k}_{j}\right)\right)` + + Applying this 4-term linear combination to all points in ``iava`` leads to the + matrix representation + + .. math:: + \mathbf{S}\mathbf{x} = \mathbf{P}\begin{bmatrix} + \mathbf{x} \\ + \mathbf{m} + \end{bmatrix} + + where each row of the very sparse + :math:`\left(L\times 2N\right)`-base-polynomial-matrix :math:`\mathbf{P}` has only + 4 non-zero entries: + + .. math:: + \mathbf{P}_{i} = \begin{bmatrix} + \dots & 0 & \dots & p_{j,0}\left(t_{i}\right) & p_{j,1}\left(t_{i}\right) & + \dots & 0 & \dots & p_{j,2}\left(t_{i}\right) & p_{j,3}\left(t_{i}\right) & + \dots & 0 & \dots + \end{bmatrix} + + at the indices :math:`j`, :math:`j + 1`, :math:`j + N`, and :math:`j + N + 1`, + respectively. + + :math:`\mathbf{P}` forms the first linear operator of :math:`\mathbf{S}` that + carries out the linear combination and requires the vectors :math:`\mathbf{x}` and + :math:`\mathbf{m}` as combination weights. Those need to be obtained from the second + linear operator :math:`\mathbf{F}` + + .. math:: + \mathbf{F}\mathbf{x} = \begin{bmatrix} + \mathbf{x} \\ + \mathbf{m} + \end{bmatrix} + + For cubic splines, :math:`\mathbf{F}` is given by + + .. math:: + \mathbf{F} = \begin{bmatrix} + \mathbf{I}_{N} \\ + \mathbf{B}^{-1}\mathbf{D}_{2} + \end{bmatrix} + + + :math:`\mathbf{I}_{N}` is the :math:`\left(N\times N\right)`-identity matrix. + The :math:`\left(N\times N\right)`-tridiagonal or -near-tridiagonal matrix + :math:`\mathbf{B}` and the :math:`\left(N\times N\right)`-second-order-finite- + difference matrix :math:`\mathbf{D}_{2}` originate from the linear system + + .. math:: + \mathbf{B}\mathbf{m}=\mathbf{D}_{2}\mathbf{x} + + that needs to be solved for :math:`\mathbf{m}`, the second order derivatives of the + cubic spline at its knots, by + + .. math:: + \mathbf{m}=\mathbf{B}^{-1}\mathbf{D}_{2}\mathbf{x} + + Assuming :math:`\mathbf{x}` was sampled at equidistant knots, :math:`\mathbf{B}` + simplifies to + + .. math:: + \mathbf{B} = \frac{1}{6}\cdot\begin{bmatrix} + \mu_{0} & \lambda_{0} & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & \theta_{0} \\ + 1 & 4 & 1 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 \\ + 0 & 1 & 4 & 1 & 0 & \dots & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 4 & 1 & \dots & 0 & 0 & 0 & 0 & 0 \\ + \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \vdots & \vdots \\ + 0 & 0 & 0 & 0 & 0 & \dots & 1 & 4 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & \dots & 0 & 1 & 4 & 1 & 0 \\ + 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 1 & 4 & 1 \\ + \theta_{N-1} & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & \lambda_{N-1} & \mu_{N-1} + \end{bmatrix} + + The special values :math:`\mu_{i}`, :math:`\lambda_{i}`, :math:`\theta_{i}` for the + first (:math:`i = 0`) and last row (:math:`i = N - 1`) are determined by the + boundary conditions, i.e., the behaviour prescribed at the first and last knot. See + below for different boundary conditions and their corresponding special values. + + Similarly, the second order finite difference matrix :math:`\mathbf{D}_{2}` can be + reduced to + + .. math:: + \mathbf{D}_{2} = \begin{bmatrix} + \ & \ & \ & \ & \ & \mathbf{d}_{0} & \ & \ & \ & \ \\ + 1 & -2 & 1 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 \\ + 0 & 1 & -2 & 1 & 0 & \dots & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & -2 & 1 & \dots & 0 & 0 & 0 & 0 & 0 \\ + \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \vdots & \vdots \\ + 0 & 0 & 0 & 0 & 0 & \dots & 1 & -2 & 1 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & \dots & 0 & 1 & -2 & 1 & 0 \\ + 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 1 & -2 & 1 \\ + \ & \ & \ & \ & \ & \mathbf{d}_{N-1} & \ & \ & \ & \ + \end{bmatrix} + + Again, the special rows :math:`\mathbf{d}_{i}` depend on the boundary conditions. + + For the "natural" boundary condition for which the second derivatives of the spline + are exactly zero at the boundaries, the special values and rows are + + - :math:`\mu_{0} = \mu_{N - 1} = 6` + - :math:`\lambda_{0} = \lambda_{N - 1} = 0` + - :math:`\theta_{0} = \theta_{N - 1} = 0` + - :math:`\mathbf{d}_{0} = \mathbf{d}_{N - 1}` are all zeroes + + and :math:`\mathbf{B}` is thus truly tridiagonal. + + In summary, the cubic spline interpolation can be decomposed as + + .. math:: + \mathbf{y}=\mathbf{S}\mathbf{x}=\mathbf{P}\mathbf{F}\mathbf{x} + + The adjoint operator :math:`\mathbf{S}^{H}` can be derived by rearranging the + involved operators. All of them are purely real and consequently, a transpose is + sufficient. This yields + + .. math:: + \mathbf{S}^{H}=\mathbf{S}^{T} = \mathbf{F}^{T}\mathbf{P}^{T} = \begin{bmatrix} + \mathbf{I}_{N} & {\mathbf{D}_{2}}^{T} \mathbf{B}^{-T} + \end{bmatrix} \mathbf{P}^{T} + + where :math:`\mathbf{B}^{-T} = \left(\mathbf{B}^{-1}\right)^{T} = \left(\mathbf{B}^{T}\right)^{-1}`. + + Computationally, + + - :math:`\mathbf{D}_{2}` and :math:`{\mathbf{D}_{2}}^{T}` can be computed + efficiently via finite differences with appropriate boundary handling + - :math:`\mathbf{B}` and :math:`\mathbf{B}^{T}` are individually factorized via + partially pivoted tridiagonal :math:`LU`-decompositions that are kept in memory + - :math:`\mathbf{B}^{-1}\mathbf{z}` and :math:`\mathbf{B}^{-T}\mathbf{z}` then + rely on highly optimized backward- and forward-substitutions with those + factorizations to solve the linear systems + - :math:`\mathbf{P}` is represented as a :py:class:`scipy.sparse.csr_matrix` which + involves a tiny bit of overhead during operator initialization, but allows for + a simple transpose. + + """ + + def __init__( + self, + dims: int | InputDimsLike, + iava: SamplingLike, + bc_type: Literal["natural"] = "natural", + axis: int = -1, + dtype: DTypeLike = "float64", + name: str = "S", + ) -> None: + # Input Validation and Standardization + + dims = _value_or_sized_to_tuple(dims) + axis = get_normalize_axis_index()(axis, len(dims)) + num_cols = dims[axis] + + if num_cols < 2: + msg = f"A cubic spline requires at least 2 data points to interpolate, but got {dims[axis]=}." + raise ValueError(msg) + + iava = np.asarray(iava, dtype=np.float64) + iava = _clip_iava_above_last_sample_index( # type: ignore + iava=iava, + sample_size=num_cols, + ) + + if isinstance(bc_type, str) and bc_type.lower() in {"natural"}: + self.bc_type = bc_type.lower() + + else: + msg = ( + "Cubic spline interpolation currently only supports 'natural' " + f"boundaries, but got {bc_type=}." + ) + raise NotImplementedError(msg) + + dtype = np.dtype(dtype) + if dtype.type not in {np.float64, np.complex128}: + msg = ( + "Expected dtype fo cubic spline interpolator to be either float64 or " + f"complex128 to achieve the required accuracy, but got {dtype}." + ) + raise TypeError(msg) + + # Operator Initialization + + dimsd = list(dims) + dimsd[axis] = len(iava) + dimsd = tuple(dimsd) + + self.dims: tuple = dims + self.dimsd: tuple = dimsd + self.iava: FloatingNDArray = iava + self.axis: int = axis + + super().__init__( + dtype=dtype, + dims=dims, + dimsd=dimsd, + name=name, + ) + + # Pre-computations of the Tridiagonal Systems + + # NOTE: the LU-factorization will always be performed on ``float64`` while + # the LU-solve type depends on the actual dtype, which might also be + # complex + if num_cols >= 3: + lapack_factorizer = ("gttrf",) + lapack_solver = ("gttrs",) + lu_format = _TridiagonalLUDecomposition + else: + lapack_factorizer = ("gbtrf",) + lapack_solver = ("gbtrs",) + lu_format = _BandedLUDecomposition + + self._tridiag_factorize = get_lapack_funcs( + lapack_factorizer, + dtype=self.iava.dtype, + )[0] + self._tridiag_lu_solve = get_lapack_funcs( + lapack_solver, + dtype=self.dtype, + )[0] + + lhs_matrix: _TridiagonalMatrix = _make_cubic_spline_left_hand_side( + dims=num_cols + ) + + self._lhs_B_matrix_lu = lu_format.from_tridiagonal_matrix( + matrix=lhs_matrix, + lapack_factorizer=self._tridiag_factorize, + ) + self._lhs_B_matrix_transposed_lu = lu_format.from_tridiagonal_matrix( + matrix=lhs_matrix.T, + lapack_factorizer=self._tridiag_factorize, + ) + + # Pre-computation of the Interpolator Matrices + + base_indices = np.clip( + self.iava.astype(np.int64), # already rounds down + a_min=0, + a_max=num_cols - 2, + ) + + self._P_matrix: csr_matrix = _make_cubic_spline_x_csr( + dims=num_cols, + iava=self.iava, + base_indices=base_indices, + iava_remainders=self.iava - base_indices, + ) + self._P_matrix_transposed: csr_matrix = self._P_matrix.transpose().tocsr() # type: ignore + + self._matmat_difference_method = partial( + _second_order_finite_differences_zero_padded, + pad_width=((1, 1), (0, 0)), + ) + self._rmatmat_difference_method = partial( + _second_order_finite_differences_zero_padded_transposed, + x_slice=slice(1, num_cols - 1), + pad_width=((2, 2), (0, 0)), + ) + + return + + @cached_property + def num_cols(self) -> int: + return self.dims[self.axis] + + @reshaped(swapaxis=True, axis=0) + def _matvec(self, x: InexactNDArray) -> InexactNDArray: + x_reshaped = x.reshape(x.shape[0], -1) + + m_coeffs = self._lhs_B_matrix_lu.solve( + rhs=self._matmat_difference_method(x_reshaped), + lapack_solver=self._tridiag_lu_solve, + ) + return ( + self._P_matrix + @ np.concatenate( + ( + x_reshaped, + m_coeffs, + ), + axis=0, + ) + ).reshape(-1, *x.shape[1:]) + + @reshaped(swapaxis=True, axis=0) + def _rmatvec(self, x: InexactNDArray) -> InexactNDArray: + x_mod = self._P_matrix_transposed @ x.reshape(x.shape[0], -1) + + return ( + x_mod[0 : self.num_cols] + + self._rmatmat_difference_method( + self._lhs_B_matrix_transposed_lu.solve( + rhs=x_mod[self.num_cols :], + lapack_solver=self._tridiag_lu_solve, + ) + ) + ).reshape(self.num_cols, *x.shape[1:]) diff --git a/pylops/signalprocessing/nonstatconvolve1d.py b/pylops/signalprocessing/nonstatconvolve1d.py index 89c5385f1..ba896d975 100644 --- a/pylops/signalprocessing/nonstatconvolve1d.py +++ b/pylops/signalprocessing/nonstatconvolve1d.py @@ -3,7 +3,6 @@ "NonStationaryFilters1D", ] -from typing import Union import numpy as np @@ -108,7 +107,7 @@ class NonStationaryConvolve1D(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, hs: NDArray, ih: InputDimsLike, axis: int = -1, @@ -116,16 +115,18 @@ def __init__( name: str = "C", ) -> None: if hs.shape[1] % 2 == 0: - raise ValueError("filters hs must have odd length") + msg = "The filters `hs` must have odd length" + raise ValueError(msg) if len(np.unique(np.diff(ih))) > 1: - raise ValueError( - "the indices of filters 'ih' are must be regularly sampled" - ) + msg = "The indices `ih` of the filters must be regularly sampled." + raise ValueError(msg) dims = _value_or_sized_to_tuple(dims) if min(ih) < 0 or max(ih) >= dims[axis]: - raise ValueError( - "the indices of filters 'ih' must be larger than 0 and smaller than `dims`" + msg = ( + "The indices `ih` of the filters " + "must be larger than 0 and smaller than `dims`." ) + raise ValueError(msg) self.hs = hs self.hsize = hs.shape[1] self.oh, self.dh, self.nh, self.eh = ih[0], ih[1] - ih[0], len(ih), ih[-1] @@ -327,15 +328,17 @@ def __init__( name: str = "C", ) -> None: if hsize % 2 == 0: - raise ValueError("filters hs must have odd length") + msg = "The filters `hs` must have odd length" + raise ValueError(msg) if len(np.unique(np.diff(ih))) > 1: - raise ValueError( - "the indices of filters 'ih' are must be regularly sampled" - ) + msg = "The indices `ih` of the filters must be regularly sampled." + raise ValueError(msg) if min(ih) < 0 or max(ih) >= inp.size: - raise ValueError( - "the indices of filters 'ih' must be larger than 0 and smaller than `dims`" + msg = ( + "The indices `ihx` and `ihz` of the filters " + "must be larger than 0 and smaller than `dims`." ) + raise ValueError(msg) self.inp = inp self.hsize = hsize self.oh, self.dh, self.nh, self.eh = ih[0], ih[1] - ih[0], len(ih), ih[-1] diff --git a/pylops/signalprocessing/nonstatconvolve2d.py b/pylops/signalprocessing/nonstatconvolve2d.py index 313abf1fb..0caeb932a 100644 --- a/pylops/signalprocessing/nonstatconvolve2d.py +++ b/pylops/signalprocessing/nonstatconvolve2d.py @@ -4,7 +4,6 @@ ] import os -from typing import Tuple, Union import numpy as np @@ -13,7 +12,7 @@ from pylops.utils._internal import _value_or_sized_to_tuple from pylops.utils.backend import get_array_module from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tengine_nnc jit_message = deps.numba_import("the nonstatconvolve2d module") @@ -149,27 +148,32 @@ class NonStationaryConvolve2D(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, hs: NDArray, ihx: InputDimsLike, ihz: InputDimsLike, - engine: str = "numpy", - num_threads_per_blocks: Tuple[int, int] = (32, 32), + engine: Tengine_nnc = "numpy", + num_threads_per_blocks: tuple[int, int] = (32, 32), dtype: DTypeLike = "float64", name: str = "C", ) -> None: if engine not in ["numpy", "numba", "cuda"]: - raise NotImplementedError("engine must be numpy or numba or cuda") + msg = "`engine` must be numpy or numba or cuda" + raise ValueError(msg) if hs.shape[2] % 2 == 0 or hs.shape[3] % 2 == 0: - raise ValueError("filters hs must have odd length") + msg = "The filters `hs` must have odd length" + raise ValueError(msg) if len(np.unique(np.diff(ihx))) > 1 or len(np.unique(np.diff(ihz))) > 1: - raise ValueError( - "the indices of filters 'ih' are must be regularly sampled" + msg = ( + "The indices `ihx` and `ihz` of the filters must be regularly sampled." ) + raise ValueError(msg) if min(ihx) < 0 or min(ihz) < 0 or max(ihx) >= dims[0] or max(ihz) >= dims[1]: - raise ValueError( - "the indices of filters 'ih' must be larger than 0 and smaller than `dims`" + msg = ( + "The indices `ihx` and `ihz` of the filters " + "must be larger than 0 and smaller than `dims`." ) + raise ValueError(msg) self.hs = hs self.hshape = hs.shape[2:] self.ohx, self.dhx, self.nhx = ihx[0], ihx[1] - ihx[0], len(ihx) @@ -207,8 +211,8 @@ def _matvec_rmatvec( x: NDArray, y: NDArray, hs: NDArray, - hshape: Tuple[int, int], - xdims: Tuple[int, int], + hshape: tuple[int, int], + xdims: tuple[int, int], ohx: float, ohz: float, dhx: float, @@ -305,7 +309,7 @@ def _matvec(self, x: NDArray) -> NDArray: self.nhx, self.nhz, rmatvec=False, - **self.kwargs_cuda + **self.kwargs_cuda, ) return y @@ -326,7 +330,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: self.nhx, self.nhz, rmatvec=True, - **self.kwargs_cuda + **self.kwargs_cuda, ) return y @@ -393,27 +397,32 @@ def __init__( ihx: InputDimsLike, ihz: InputDimsLike, engine: str = "numpy", - num_threads_per_blocks: Tuple[int, int] = (32, 32), + num_threads_per_blocks: tuple[int, int] = (32, 32), dtype: DTypeLike = "float64", name: str = "C", ) -> None: if engine not in ["numpy", "numba", "cuda"]: - raise NotImplementedError("engine must be numpy or numba or cuda") + msg = "`engine` must be numpy or numba or cuda" + raise ValueError(msg) if hshape[0] % 2 == 0 or hshape[1] % 2 == 0: - raise ValueError("filters hs must have odd length") + msg = "The filters `hs` must have odd length" + raise ValueError(msg) if len(np.unique(np.diff(ihx))) > 1 or len(np.unique(np.diff(ihz))) > 1: - raise ValueError( - "the indices of filters 'ih' are must be regularly sampled" + msg = ( + "The indices `ihx` and `ihz` of the filters must be regularly sampled." ) + raise ValueError(msg) if ( min(ihx) < 0 or min(ihz) < 0 or max(ihx) >= inp.shape[0] or max(ihz) >= inp.shape[1] ): - raise ValueError( - "the indices of filters 'ih' must be larger than 0 and smaller than `dims`" + msg = ( + "The indices `ihx` and `ihz` of the filters " + "must be larger than 0 and smaller than `dims`." ) + raise ValueError(msg) self.inp = inp self.inpdims = inp.shape self.hshape = hshape @@ -448,7 +457,8 @@ def _register_multiplications(self, engine: str) -> None: self._mv = jit(**numba_opts)(self.__matvec) self._rmv = jit(**numba_opts)(self.__rmatvec) elif engine == "cuda": - raise NotImplementedError("engine=cuda is currently not available") + msg = "`engine=cuda` is currently not available for NonStationaryFilters2D" + raise NotImplementedError(msg) else: self._mv = self.__matvec self._rmv = self.__rmatvec @@ -461,8 +471,8 @@ def __rmatvec( x: NDArray, y: NDArray, hs: NDArray, - hshape: Tuple[int, int], - xdims: Tuple[int, int], + hshape: tuple[int, int], + xdims: tuple[int, int], ohx: float, ohz: float, dhx: float, @@ -474,10 +484,9 @@ def __rmatvec( # the same loop (see https://numba.pydata.org/numba-doc/latest/user/parallel.html?highlight=njit). # Until atomic operations are provided we create a temporary filter array and store intermediate # results from each ix and reduce them at the end. - hstmp = np.zeros((xdims[0], *hs.shape)) + hstmp = np.zeros((xdims[0], *hs.shape), dtype=x.dtype) for ix in prange(xdims[0]): for iz in range(xdims[1]): - # find extremes of model where to apply h (in case h is going out of model) xextremes = ( max(0, ix - hshape[0] // 2), @@ -533,36 +542,28 @@ def __rmatvec( ihz_t, hxextremes[0] : hxextremes[1], hzextremes[0] : hzextremes[1], - ] += ( - dhz_t * dhx_l * htmp - ) + ] += dhz_t * dhx_l * htmp hstmp[ ix, ihx_l, ihz_b, hxextremes[0] : hxextremes[1], hzextremes[0] : hzextremes[1], - ] += ( - dhz_b * dhx_l * htmp - ) + ] += dhz_b * dhx_l * htmp hstmp[ ix, ihx_r, ihz_t, hxextremes[0] : hxextremes[1], hzextremes[0] : hzextremes[1], - ] += ( - dhz_t * dhx_r * htmp - ) + ] += dhz_t * dhx_r * htmp hstmp[ ix, ihx_r, ihz_b, hxextremes[0] : hxextremes[1], hzextremes[0] : hzextremes[1], - ] += ( - dhz_b * dhx_r * htmp - ) + ] += dhz_b * dhx_r * htmp hs = hstmp.sum(axis=0) return hs @@ -582,7 +583,7 @@ def _matvec(self, x: NDArray) -> NDArray: self.dhz, self.nhx, self.nhz, - **self.kwargs_cuda + **self.kwargs_cuda, ) return y @@ -602,6 +603,6 @@ def _rmatvec(self, x: NDArray) -> NDArray: self.dhz, self.nhx, self.nhz, - **self.kwargs_cuda + **self.kwargs_cuda, ) return hs diff --git a/pylops/signalprocessing/nonstatconvolve3d.py b/pylops/signalprocessing/nonstatconvolve3d.py index d1143492f..19722c1fa 100644 --- a/pylops/signalprocessing/nonstatconvolve3d.py +++ b/pylops/signalprocessing/nonstatconvolve3d.py @@ -1,7 +1,6 @@ __all__ = ["NonStationaryConvolve3D"] import os -from typing import Tuple, Union import numpy as np @@ -10,7 +9,7 @@ from pylops.utils._internal import _value_or_sized_to_tuple from pylops.utils.backend import get_array_module from pylops.utils.decorators import reshaped -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tengine_nnc jit_message = deps.numba_import("the nonstatconvolve3d module") @@ -126,29 +125,32 @@ class NonStationaryConvolve3D(LinearOperator): def __init__( self, - dims: Union[int, InputDimsLike], + dims: int | InputDimsLike, hs: NDArray, ihx: InputDimsLike, ihy: InputDimsLike, ihz: InputDimsLike, - engine: str = "numpy", - num_threads_per_blocks: Tuple[int, int, int] = (2, 16, 16), + engine: Tengine_nnc = "numpy", + num_threads_per_blocks: tuple[int, int, int] = (2, 16, 16), dtype: DTypeLike = "float64", name: str = "C", ) -> None: if engine not in ["numpy", "numba", "cuda"]: - raise NotImplementedError("engine must be numpy or numba or cuda") + msg = "`engine` must be numpy or numba or cuda" + raise ValueError(msg) if hs.shape[3] % 2 == 0 or hs.shape[4] % 2 == 0 or hs.shape[5] % 2 == 0: - raise ValueError("filters hs must have odd length") + msg = "The filters `hs` must have odd length" + raise ValueError(msg) if ( len(np.unique(np.diff(ihx))) > 1 or len(np.unique(np.diff(ihy))) > 1 or len(np.unique(np.diff(ihz))) > 1 ): - raise ValueError( - "the indices of filters 'ih' are must be regularly sampled" + msg = ( + "The indices `ihx`, `ihy`, and `ihz` of the filters " + "must be regularly sampled." ) - + raise ValueError(msg) if ( min(ihx) < 0 or min(ihy) < 0 @@ -157,9 +159,12 @@ def __init__( or max(ihy) >= dims[1] or max(ihz) >= dims[2] ): - raise ValueError( - "the indices of filters 'ih' must be larger than 0 and smaller than `dims`" + msg = ( + "The indices `ihx`, `ihy`, and `ihz` of the filters " + "must be larger than 0 and smaller than `dims`." ) + raise ValueError(msg) + self.hs = hs self.hshape = hs.shape[3:] self.ohx, self.dhx, self.nhx = ihx[0], ihx[1] - ihx[0], len(ihx) @@ -200,8 +205,8 @@ def _matvec_rmatvec( x: NDArray, y: NDArray, hs: NDArray, - hshape: Tuple[int, int, int], - xdims: Tuple[int, int, int], + hshape: tuple[int, int, int], + xdims: tuple[int, int, int], ohx: float, ohy: float, ohz: float, @@ -364,7 +369,7 @@ def _matvec(self, x: NDArray) -> NDArray: self.nhy, self.nhz, rmatvec=False, - **self.kwargs_cuda + **self.kwargs_cuda, ) return y @@ -388,6 +393,6 @@ def _rmatvec(self, x: NDArray) -> NDArray: self.nhy, self.nhz, rmatvec=True, - **self.kwargs_cuda + **self.kwargs_cuda, ) return y diff --git a/pylops/signalprocessing/patch2d.py b/pylops/signalprocessing/patch2d.py index 5360e5ca1..8f36769f9 100644 --- a/pylops/signalprocessing/patch2d.py +++ b/pylops/signalprocessing/patch2d.py @@ -4,7 +4,7 @@ ] import logging -from typing import Optional, Sequence, Tuple +from collections.abc import Sequence import numpy as np @@ -18,22 +18,22 @@ ) from pylops.utils.decorators import reshaped from pylops.utils.tapers import taper2d -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper logger = logging.getLogger(__name__) def patch2d_design( dimsd: InputDimsLike, - nwin: Tuple[int, int], - nover: Tuple[int, int], - nop: Tuple[int, int], + nwin: tuple[int, int], + nover: tuple[int, int], + nop: tuple[int, int], verb: bool = True, -) -> Tuple[ - Tuple[int, int], - Tuple[int, int], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], +) -> tuple[ + tuple[int, int], + tuple[int, int], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray]], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray]], ]: """Design Patch2D operator @@ -196,17 +196,16 @@ def __init__( Op: LinearOperator, dims: InputDimsLike, dimsd: InputDimsLike, - nwin: Tuple[int, int], - nover: Tuple[int, int], - nop: Tuple[int, int], - tapertype: str = "hanning", + nwin: tuple[int, int], + nover: tuple[int, int], + nop: tuple[int, int], + tapertype: Ttaper | None = "hanning", savetaper: bool = True, - scalings: Optional[Sequence[float]] = None, + scalings: Sequence[float] | None = None, name: str = "P", ) -> None: - - dims: Tuple[int, ...] = _value_or_sized_to_tuple(dims) - dimsd: Tuple[int, ...] = _value_or_sized_to_tuple(dimsd) + dims: tuple[int, ...] = _value_or_sized_to_tuple(dims) + dimsd: tuple[int, ...] = _value_or_sized_to_tuple(dimsd) # data windows dwin0_ins, dwin0_ends = _slidingsteps(dimsd[0], nwin[0], nover[0]) @@ -220,12 +219,12 @@ def __init__( # check patching if nwins0 * nop[0] != dims[0] or nwins1 * nop[1] != dims[1]: - raise ValueError( + msg = ( f"Model shape (dims={dims}) is not consistent with chosen " - f"number of windows. Run patch2d_design to identify the " - f"correct number of windows for the current " - "model size..." + "number of windows. Run patch2d_design to identify the correct " + "number of windows for the current model size..." ) + raise ValueError(msg) # create tapers self.tapertype = tapertype diff --git a/pylops/signalprocessing/patch3d.py b/pylops/signalprocessing/patch3d.py index 6e3fe9b2b..4bf27b109 100644 --- a/pylops/signalprocessing/patch3d.py +++ b/pylops/signalprocessing/patch3d.py @@ -4,7 +4,7 @@ ] import logging -from typing import Optional, Sequence, Tuple +from collections.abc import Sequence import numpy as np @@ -18,22 +18,22 @@ ) from pylops.utils.decorators import reshaped from pylops.utils.tapers import tapernd -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper logger = logging.getLogger(__name__) def patch3d_design( dimsd: InputDimsLike, - nwin: Tuple[int, int, int], - nover: Tuple[int, int, int], - nop: Tuple[int, int, int], + nwin: tuple[int, int, int], + nover: tuple[int, int, int], + nop: tuple[int, int, int], verb: bool = True, -) -> Tuple[ - Tuple[int, int, int], - Tuple[int, int, int], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], +) -> tuple[ + tuple[int, int, int], + tuple[int, int, int], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray], tuple[NDArray, NDArray]], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray], tuple[NDArray, NDArray]], ]: """Design Patch3D operator @@ -209,17 +209,16 @@ def __init__( Op: LinearOperator, dims: InputDimsLike, dimsd: InputDimsLike, - nwin: Tuple[int, int, int], - nover: Tuple[int, int, int], - nop: Tuple[int, int, int], - tapertype: str = "hanning", + nwin: tuple[int, int, int], + nover: tuple[int, int, int], + nop: tuple[int, int, int], + tapertype: Ttaper | None = "hanning", savetaper: bool = True, - scalings: Optional[Sequence[float]] = None, + scalings: Sequence[float] | None = None, name: str = "P", ) -> None: - - dims: Tuple[int, ...] = _value_or_sized_to_tuple(dims) - dimsd: Tuple[int, ...] = _value_or_sized_to_tuple(dimsd) + dims: tuple[int, ...] = _value_or_sized_to_tuple(dims) + dimsd: tuple[int, ...] = _value_or_sized_to_tuple(dimsd) # data windows dwin0_ins, dwin0_ends = _slidingsteps(dimsd[0], nwin[0], nover[0]) @@ -243,12 +242,12 @@ def __init__( or nwins1 * nop[1] != dims[1] or nwins2 * nop[2] != dims[2] ): - raise ValueError( + msg = ( f"Model shape (dims={dims}) is not consistent with chosen " - f"number of windows. Run patch3d_design to identify the " - f"correct number of windows for the current " - "model size..." + "number of windows. Run patch3d_design to identify the correct " + "number of windows for the current model size..." ) + raise ValueError(msg) # create tapers self.tapertype = tapertype @@ -441,9 +440,9 @@ def __init__( for itap in range(0, nwins1 * nwins2, nwins2): taps[(nwins0 - 1) * nwins1 * nwins2 + itap] = tapfrontbottom for itap in range(0, nwins1 * nwins2, nwins2): - taps[ - (nwins0 - 1) * nwins1 * nwins2 + nwins2 + itap - 1 - ] = tapbackbottom + taps[(nwins0 - 1) * nwins1 * nwins2 + nwins2 + itap - 1] = ( + tapbackbottom + ) for itap in range(0, nwins, nwins1 * nwins2): taps[itap] = tapleftfront for itap in range(0, nwins, nwins1 * nwins2): @@ -458,9 +457,9 @@ def __init__( taps[(nwins1 - 1) * nwins2 + nwins2 - 1] = taprighttopback taps[(nwins0 - 1) * nwins1 * nwins2] = tapleftbottomfront taps[(nwins0 - 1) * nwins1 * nwins2 + nwins2 - 1] = tapleftbottomback - taps[ - (nwins0 - 1) * nwins1 * nwins2 + (nwins1 - 1) * nwins2 - ] = taprightbottomfront + taps[(nwins0 - 1) * nwins1 * nwins2 + (nwins1 - 1) * nwins2] = ( + taprightbottomfront + ) taps[ (nwins0 - 1) * nwins1 * nwins2 + (nwins1 - 1) * nwins2 + nwins2 - 1 ] = taprightbottomback diff --git a/pylops/signalprocessing/pwd2d.py b/pylops/signalprocessing/pwd2d.py index 33885c7c9..5fb8bbffa 100644 --- a/pylops/signalprocessing/pwd2d.py +++ b/pylops/signalprocessing/pwd2d.py @@ -1,6 +1,5 @@ __all__ = ["PWSprayer2D", "PWSmoother2D"] -from typing import Tuple import numpy as np @@ -70,7 +69,7 @@ class PWSprayer2D(LinearOperator): def __init__( self, - dims: Tuple[int, int], + dims: tuple[int, int], sigma: NDArray, radius: int = 8, alpha: float = 0.9, @@ -78,7 +77,8 @@ def __init__( name: str = "P", ): if len(dims) != 2: - raise ValueError("dims must contain exactly two elements (nz, nx)") + msg = f"Wrong number of dimensions. Expected 2, but received {len(dims)}." + raise ValueError(msg) self._radius = int(radius) self._alpha = float(alpha) self._sigma = np.ascontiguousarray(sigma) @@ -162,7 +162,7 @@ class PWSmoother2D(LinearOperator): def __init__( self, - dims: Tuple[int, int], + dims: tuple[int, int], sigma: NDArray, radius: int = 8, alpha: float = 0.9, @@ -170,7 +170,8 @@ def __init__( name: str = "P", ): if len(dims) != 2: - raise ValueError("dims must contain exactly two elements (nz, nx)") + msg = f"Wrong number of dimensions. Expected 2, but received {len(dims)}." + raise ValueError(msg) self._sprayer = PWSprayer2D( dims=dims, sigma=sigma, radius=radius, alpha=alpha, dtype=dtype ) diff --git a/pylops/signalprocessing/radon2d.py b/pylops/signalprocessing/radon2d.py index 323f1cab7..77bd03136 100644 --- a/pylops/signalprocessing/radon2d.py +++ b/pylops/signalprocessing/radon2d.py @@ -1,12 +1,13 @@ __all__ = ["Radon2D"] -from typing import Callable, Optional, Tuple +from collections.abc import Callable +from typing import Literal import numpy as np from pylops.basicoperators import Spread from pylops.utils import deps -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tengine_nn jit_message = deps.numba_import("the radon2d module") @@ -53,7 +54,7 @@ def _indices_2d( t: int, nt: int, interp: bool = True, -) -> Tuple[NDArray, NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray, NDArray | None]: """Compute time and space indices of parametric line in ``f`` function Parameters @@ -101,7 +102,7 @@ def _indices_2d_onthefly( t: int, nt: int, interp: bool = True, -) -> Tuple[NDArray, NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray, NDArray | None]: """Wrapper around _indices_2d to allow on-the-fly computation of parametric curves""" tscan = np.full(len(x), np.nan, dtype=np.float32) @@ -122,7 +123,7 @@ def _create_table( npx: int, nx: int, interp: bool, -) -> Tuple[NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray | None]: """Create look up table""" table = np.full((npx, nt, nx), np.nan, dtype=np.float32) if interp: @@ -143,11 +144,11 @@ def Radon2D( taxis: NDArray, haxis: NDArray, pxaxis: NDArray, - kind: str = "linear", + kind: Literal["linear", "parabolic", "hyperbolic"] = "linear", centeredh: bool = True, interp: bool = True, onthefly: bool = False, - engine: str = "numpy", + engine: Tengine_nn = "numpy", dtype: DTypeLike = "float64", name: str = "R", ): @@ -201,7 +202,7 @@ def Radon2D( Raises ------ - KeyError + ValueError If ``engine`` is neither ``numpy`` nor ``numba`` NotImplementedError If ``kind`` is not ``linear``, ``parabolic``, or ``hyperbolic`` @@ -243,7 +244,8 @@ def Radon2D( """ # engine if engine not in ["numpy", "numba"]: - raise KeyError("engine must be numpy or numba") + msg = "`engine` must be numpy or numba" + raise ValueError(msg) if engine == "numba" and jit_message is not None: engine = "numpy" # axes @@ -257,7 +259,11 @@ def Radon2D( elif callable(kind): f = kind else: - raise NotImplementedError("kind must be linear, " "parabolic, or hyperbolic...") + msg = ( + "Wrong kind of basis function. Expected 'linear', 'parabolic', " + f"or 'hyperbolic', but received '{kind}'." + ) + raise NotImplementedError(msg) # make axes unitless dh, dt = np.abs(haxis[1] - haxis[0]), np.abs(taxis[1] - taxis[0]) dpx = dh / dt diff --git a/pylops/signalprocessing/radon3d.py b/pylops/signalprocessing/radon3d.py index 75dcf19ac..96eabd0f9 100644 --- a/pylops/signalprocessing/radon3d.py +++ b/pylops/signalprocessing/radon3d.py @@ -1,12 +1,13 @@ __all__ = ["Radon3D"] -from typing import Callable, Optional, Tuple +from collections.abc import Callable +from typing import Literal import numpy as np from pylops.basicoperators import Spread from pylops.utils import deps -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tengine_nn jit_message = deps.numba_import("the radon3d module") @@ -61,7 +62,7 @@ def _indices_3d( t: int, nt: int, interp: bool = True, -) -> Tuple[NDArray, NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray, NDArray | None]: """Compute time and space indices of parametric line in ``f`` function Parameters @@ -117,7 +118,7 @@ def _indices_3d_onthefly( it: int, nt: int, interp: bool = True, -) -> Tuple[NDArray, NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray, NDArray | None]: """Wrapper around _indices_3d to allow on-the-fly computation of parametric curves""" tscan = np.full(len(y), np.nan, dtype=np.float32) @@ -142,13 +143,13 @@ def _create_table( ny: int, nx: int, interp: bool, -) -> Tuple[NDArray, Optional[NDArray]]: +) -> tuple[NDArray, NDArray | None]: """Create look up table""" table = np.full((npx * npy, nt, ny * nx), np.nan, dtype=np.float32) if interp: dtable = np.full((npx * npy, nt, ny * nx), np.nan) - for ip, (py, px) in enumerate(zip(pyaxis, pxaxis)): + for ip, (py, px) in enumerate(zip(pyaxis, pxaxis, strict=True)): for it in range(nt): sscan, tscan, dtscan = _indices_3d(f, y, x, py, px, it, nt, interp=interp) table[ip, it, sscan] = tscan @@ -163,11 +164,11 @@ def Radon3D( hxaxis: NDArray, pyaxis: NDArray, pxaxis: NDArray, - kind: str = "linear", + kind: Literal["linear", "parabolic", "hyperbolic"] = "linear", centeredh: bool = True, interp: bool = True, onthefly: bool = False, - engine: str = "numpy", + engine: Tengine_nn = "numpy", dtype: DTypeLike = "float64", name: str = "R", ): @@ -224,10 +225,10 @@ def Radon3D( Raises ------ - KeyError - If ``engine`` is neither ``numpy`` nor ``numba`` NotImplementedError If ``kind`` is not ``linear``, ``parabolic``, or ``hyperbolic`` + ValueError + If ``engine`` is neither ``numpy`` nor ``numba`` See Also -------- @@ -267,7 +268,8 @@ def Radon3D( """ # engine if engine not in ["numpy", "numba"]: - raise KeyError("engine must be numpy or numba") + msg = "`engine` must be numpy or numba" + raise ValueError(msg) if engine == "numba" and jit_message is not None: engine = "numpy" @@ -281,7 +283,11 @@ def Radon3D( elif kind == "hyperbolic": f = _hyperbolic if engine == "numpy" else _hyperbolic_numba else: - raise NotImplementedError("kind must be linear, " "parabolic, or hyperbolic...") + msg = ( + "Wrong kind of basis function. Expected 'linear', 'parabolic', " + f"or 'hyperbolic', but received '{kind}'." + ) + raise NotImplementedError(msg) # make axes unitless dhy, dhx = np.abs(hyaxis[1] - hyaxis[0]), np.abs(hxaxis[1] - hxaxis[0]) dt = np.abs(taxis[1] - taxis[0]) diff --git a/pylops/signalprocessing/seislet.py b/pylops/signalprocessing/seislet.py index b0ff462c7..ba8e06f47 100644 --- a/pylops/signalprocessing/seislet.py +++ b/pylops/signalprocessing/seislet.py @@ -1,7 +1,8 @@ __all__ = ["Seislet"] +from collections.abc import Sequence from math import ceil, log -from typing import Optional, Sequence +from typing import Literal import numpy as np @@ -424,14 +425,15 @@ def __init__( self, slopes: NDArray, sampling: Sequence[float] = (1.0, 1.0), - level: Optional[int] = None, - kind: str = "haar", + level: int | None = None, + kind: Literal["haar", "linear"] = "haar", inv: bool = False, dtype: DTypeLike = "float64", name: str = "S", ) -> None: if len(sampling) != 2: - raise ValueError("provide two sampling steps") + msg = f"Wrong number of sampling steps. Expected 2, but received {len(sampling)}." + raise ValueError(msg) # define predict and update steps if kind == "haar": @@ -439,7 +441,8 @@ def __init__( elif kind == "linear": self.predict = _predict_lin else: - raise NotImplementedError("kind should be haar or linear") + msg = f"Wrong kind of basis function. Expected 'haar' or 'linear', but received '{kind}'." + raise NotImplementedError(msg) # define padding for length to be power of 2 dims = slopes.shape @@ -448,7 +451,7 @@ def __init__( super().__init__(dtype=np.dtype(dtype), dims=dims, dimsd=dimsd, name=name) pad = [(0, ndimpow2 - self.dims[0])] + [(0, 0)] * (len(self.dims) - 1) - self.pad = Pad(self.dims, pad) + self.pad = Pad(self.dims, pad, dtype=self.dtype) self.nx, self.nt = self.dimsd # define levels @@ -470,7 +473,9 @@ def __init__( def _matvec(self, x: NDArray) -> NDArray: x = self.pad.matvec(x) x = np.reshape(x, self.dimsd) - y = np.zeros((np.sum(self.levels_size) + self.levels_size[-1], self.nt)) + y = np.zeros( + (np.sum(self.levels_size) + self.levels_size[-1], self.nt), dtype=self.dtype + ) for ilevel in range(self.level): odd = x[1::2] even = x[::2] @@ -516,7 +521,7 @@ def _rmatvec(self, x: NDArray) -> NDArray: backward=False, adj=True, ) - y = np.zeros((2 * even.shape[0], self.nt)) + y = np.zeros((2 * even.shape[0], self.nt), dtype=self.dtype) y[1::2] = odd y[::2] = even y = self.pad.rmatvec(y.ravel()) @@ -539,7 +544,7 @@ def inverse(self, x: NDArray) -> NDArray: odd = res + self.predict( even, self.dt, self.dx, self.slopes, repeat=ilevel - 1, backward=False ) - y = np.zeros((2 * even.shape[0], self.nt)) + y = np.zeros((2 * even.shape[0], self.nt), dtype=self.dtype) y[1::2] = odd y[::2] = even y = self.pad.rmatvec(y.ravel()) diff --git a/pylops/signalprocessing/shift.py b/pylops/signalprocessing/shift.py index 3ff64864e..0eff929ff 100644 --- a/pylops/signalprocessing/shift.py +++ b/pylops/signalprocessing/shift.py @@ -1,6 +1,6 @@ __all__ = ["Shift"] -from typing import TYPE_CHECKING, Tuple, Union +from typing import TYPE_CHECKING import numpy as np @@ -8,20 +8,20 @@ from pylops.signalprocessing import FFT from pylops.utils._internal import _value_or_sized_to_array from pylops.utils.backend import get_normalize_axis_index -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tfftengine_nfsm if TYPE_CHECKING: from pylops.linearoperator import LinearOperator def Shift( - dims: Tuple, - shift: Union[float, NDArray], + dims: tuple, + shift: float | NDArray, axis: int = -1, nfft: int = None, sampling: float = 1.0, real: bool = False, - engine: str = "numpy", + engine: Tfftengine_nfsm = "numpy", dtype: DTypeLike = "complex128", name: str = "S", **kwargs_fft, diff --git a/pylops/signalprocessing/sliding1d.py b/pylops/signalprocessing/sliding1d.py index c2af1b1e4..aac6e04dd 100644 --- a/pylops/signalprocessing/sliding1d.py +++ b/pylops/signalprocessing/sliding1d.py @@ -4,7 +4,6 @@ ] import logging -from typing import Tuple, Union import numpy as np @@ -18,7 +17,7 @@ ) from pylops.utils.decorators import reshaped from pylops.utils.tapers import taper -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper logger = logging.getLogger(__name__) @@ -29,7 +28,7 @@ def sliding1d_design( nover: int, nop: int, verb: bool = True, -) -> Tuple[int, int, Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]]: +) -> tuple[int, int, tuple[NDArray, NDArray], tuple[NDArray, NDArray]]: """Design Sliding1D operator This routine can be used prior to creating the :class:`pylops.signalprocessing.Sliding1D` @@ -143,7 +142,7 @@ class Sliding1D(LinearOperator): Attributes ---------- - taps: :obj:`numpy.ndarray` + taps : :obj:`numpy.ndarray` Set of tapers applied to each window (only if ``tapertype`` is not ``None``) simOp : :obj:`bool` Operator ``Op`` is applied to all windows simultaneously (``True``) @@ -170,17 +169,16 @@ class Sliding1D(LinearOperator): def __init__( self, Op: LinearOperator, - dim: Union[int, InputDimsLike], - dimd: Union[int, InputDimsLike], + dim: int | InputDimsLike, + dimd: int | InputDimsLike, nwin: int, nover: int, - tapertype: str = "hanning", + tapertype: Ttaper | None = "hanning", savetaper: bool = True, name: str = "S", ) -> None: - - dim: Tuple[int, ...] = _value_or_sized_to_tuple(dim) - dimd: Tuple[int, ...] = _value_or_sized_to_tuple(dimd) + dim: tuple[int, ...] = _value_or_sized_to_tuple(dim) + dimd: tuple[int, ...] = _value_or_sized_to_tuple(dimd) # data windows dwin_ins, dwin_ends = _slidingsteps(dimd[0], nwin, nover) @@ -191,18 +189,17 @@ def __init__( # check windows if nwins * Op.shape[1] != dim[0] and Op.shape[1] != dim[0]: - raise ValueError( - f"Model shape (dim={dim}) is not consistent with chosen " - f"number of windows. Run sliding1d_design to identify the " - f"correct number of windows for the current " - "model size..." + msg = ( + f"Model shape (dim={dim}) is not consistent with chosen number of windows. " + "Run sliding1d_design to identify the correct number of windows for the current model size..." ) + raise ValueError(msg) # create tapers self.tapertype = tapertype self.savetaper = savetaper if self.tapertype is not None: - tap = taper(nwin, nover, tapertype=self.tapertype) + tap = taper(nwin, nover, tapertype=self.tapertype).astype(Op.dtype) tapin = tap.copy() tapin[:nover] = 1 tapend = tap.copy() @@ -250,7 +247,7 @@ def _matvec_savetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) if self.tapertype is not None: x = self.taps * x for iwin0 in range(self.dims[0]): @@ -273,7 +270,7 @@ def _rmatvec_savetaper(self, x: NDArray) -> NDArray: if self.tapertype is not None: ywins = ywins * self.taps if self.simOp: - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()).reshape(self.dims) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): @@ -287,7 +284,7 @@ def _matvec_nosavetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) for iwin0 in range(self.dims[0]): if self.simOp: xxwin = x[iwin0] @@ -314,7 +311,7 @@ def _rmatvec_nosavetaper(self, x: NDArray) -> NDArray: if self.tapertype is not None: for iwin0 in range(self.dims[0]): ywins = self._apply_taper(ywins, iwin0) - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): diff --git a/pylops/signalprocessing/sliding2d.py b/pylops/signalprocessing/sliding2d.py index bbf9f086a..25bfd7bac 100644 --- a/pylops/signalprocessing/sliding2d.py +++ b/pylops/signalprocessing/sliding2d.py @@ -4,7 +4,6 @@ ] import logging -from typing import Tuple import numpy as np @@ -17,7 +16,7 @@ ) from pylops.utils.decorators import reshaped from pylops.utils.tapers import taper2d -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper logger = logging.getLogger(__name__) @@ -26,7 +25,7 @@ def _slidingsteps( ntr: int, nwin: int, nover: int, -) -> Tuple[NDArray, NDArray]: +) -> tuple[NDArray, NDArray]: """Identify sliding window initial and end points given overall trace length, window length and overlap @@ -48,7 +47,8 @@ def _slidingsteps( """ if nwin > ntr: - raise ValueError(f"nwin={nwin} is bigger than ntr={ntr}...") + msg = f"nwin={nwin} is bigger than ntr={ntr}..." + raise ValueError(msg) step = nwin - nover starts = np.arange(0, ntr - nwin + 1, step, dtype=int) ends = starts + nwin @@ -56,12 +56,12 @@ def _slidingsteps( def sliding2d_design( - dimsd: Tuple[int, int], + dimsd: tuple[int, int], nwin: int, nover: int, - nop: Tuple[int, int], + nop: tuple[int, int], verb: bool = True, -) -> Tuple[int, Tuple[int, int], Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]]: +) -> tuple[int, tuple[int, int], tuple[NDArray, NDArray], tuple[NDArray, NDArray]]: """Design Sliding2D operator This routine can be used prior to creating the :class:`pylops.signalprocessing.Sliding2D` @@ -179,7 +179,7 @@ class Sliding2D(LinearOperator): Attributes ---------- - taps: :obj:`numpy.ndarray` + taps : :obj:`numpy.ndarray` Set of tapers applied to each window (only if ``tapertype`` is not ``None``) simOp : :obj:`bool` Operator ``Op`` is applied to all windows simultaneously (``True``) @@ -210,13 +210,12 @@ def __init__( dimsd: InputDimsLike, nwin: int, nover: int, - tapertype: str = "hanning", + tapertype: Ttaper | None = "hanning", savetaper: bool = True, name: str = "S", ) -> None: - - dims: Tuple[int, ...] = _value_or_sized_to_tuple(dims) - dimsd: Tuple[int, ...] = _value_or_sized_to_tuple(dimsd) + dims: tuple[int, ...] = _value_or_sized_to_tuple(dims) + dimsd: tuple[int, ...] = _value_or_sized_to_tuple(dimsd) # data windows dwin_ins, dwin_ends = _slidingsteps(dimsd[0], nwin, nover) @@ -227,18 +226,19 @@ def __init__( # check patching if nwins * Op.shape[1] // dims[1] != dims[0] and Op.shape[1] != np.prod(dims): - raise ValueError( - f"Model shape (dims={dims}) is not consistent with chosen " - f"number of windows. Run sliding2d_design to identify the " - f"correct number of windows for the current " - "model size..." + msg = ( + f"Model shape (dims={dims}) is not consistent with chosen number of windows. " + "Run sliding2d_design to identify the correct number of windows for the current model size..." ) + raise ValueError(msg) # create tapers self.tapertype = tapertype self.savetaper = savetaper if self.tapertype is not None: - tap = taper2d(dimsd[1], nwin, nover, tapertype=self.tapertype) + tap = taper2d(dimsd[1], nwin, nover, tapertype=self.tapertype).astype( + Op.dtype + ) tapin = tap.copy() tapin[:nover] = 1 tapend = tap.copy() @@ -288,7 +288,7 @@ def _matvec_savetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) for iwin0 in range(self.dims[0]): if self.simOp: xx = x[iwin0].reshape(self.nwin, self.dimsd[-1]) @@ -313,7 +313,7 @@ def _rmatvec_savetaper(self, x: NDArray) -> NDArray: if self.tapertype is not None: ywins = ywins * self.taps if self.simOp: - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()).reshape(self.dims) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): @@ -329,7 +329,7 @@ def _matvec_nosavetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) for iwin0 in range(self.dims[0]): if self.simOp: xxwin = x[iwin0].reshape(self.nwin, self.dimsd[-1]) @@ -362,7 +362,7 @@ def _rmatvec_nosavetaper(self, x: NDArray) -> NDArray: if self.tapertype is not None: for iwin0 in range(self.dims[0]): ywins = self._apply_taper(ywins, iwin0) - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()).reshape(self.dims) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): diff --git a/pylops/signalprocessing/sliding3d.py b/pylops/signalprocessing/sliding3d.py index 0d5f34253..b62d1a8ef 100644 --- a/pylops/signalprocessing/sliding3d.py +++ b/pylops/signalprocessing/sliding3d.py @@ -4,7 +4,6 @@ ] import logging -from typing import Tuple import numpy as np @@ -18,22 +17,22 @@ ) from pylops.utils.decorators import reshaped from pylops.utils.tapers import taper3d -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper logger = logging.getLogger(__name__) def sliding3d_design( - dimsd: Tuple[int, int, int], - nwin: Tuple[int, int], - nover: Tuple[int, int], - nop: Tuple[int, int, int], + dimsd: tuple[int, int, int], + nwin: tuple[int, int], + nover: tuple[int, int], + nop: tuple[int, int, int], verb: bool = True, -) -> Tuple[ - Tuple[int, int], - Tuple[int, int, int], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], - Tuple[Tuple[NDArray, NDArray], Tuple[NDArray, NDArray]], +) -> tuple[ + tuple[int, int], + tuple[int, int, int], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray]], + tuple[tuple[NDArray, NDArray], tuple[NDArray, NDArray]], ]: """Design Sliding3D operator @@ -168,7 +167,7 @@ class Sliding3D(LinearOperator): Attributes ---------- - taps: :obj:`numpy.ndarray` + taps : :obj:`numpy.ndarray` Set of tapers applied to each window (only if ``tapertype`` is not ``None``) simOp : :obj:`bool` Operator ``Op`` is applied to all windows simultaneously (``True``) @@ -197,17 +196,16 @@ def __init__( Op: LinearOperator, dims: InputDimsLike, dimsd: InputDimsLike, - nwin: Tuple[int, int], - nover: Tuple[int, int], - nop: Tuple[int, int, int], - tapertype: str = "hanning", + nwin: tuple[int, int], + nover: tuple[int, int], + nop: tuple[int, int, int], + tapertype: Ttaper | None = "hanning", savetaper: bool = True, nproc: int = 1, name: str = "P", ) -> None: - - dims: Tuple[int, ...] = _value_or_sized_to_tuple(dims) - dimsd: Tuple[int, ...] = _value_or_sized_to_tuple(dimsd) + dims: tuple[int, ...] = _value_or_sized_to_tuple(dims) + dimsd: tuple[int, ...] = _value_or_sized_to_tuple(dimsd) # data windows dwin0_ins, dwin0_ends = _slidingsteps(dimsd[0], nwin[0], nover[0]) @@ -228,12 +226,11 @@ def __init__( if nwins * Op.shape[1] // dims[2] != dims[0] * dims[1] and Op.shape[ 1 ] != np.prod(dims): - raise ValueError( - f"Model shape (dims={dims}) is not consistent with chosen " - f"number of windows. Run sliding3d_design to identify the " - f"correct number of windows for the current " - "model size..." + msg = ( + f"Model shape (dims={dims}) is not consistent with chosen number of windows. " + "Run sliding3d_design to identify the correct number of windows for the current model size..." ) + raise ValueError(msg) # create tapers self.tapertype = tapertype @@ -352,7 +349,7 @@ def _matvec_savetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) for iwin0 in range(self.dims[0]): for iwin1 in range(self.dims[1]): if self.simOp: @@ -385,7 +382,7 @@ def _rmatvec_savetaper(self, x: NDArray) -> NDArray: if self.tapertype is not None: ywins = ywins * self.taps if self.simOp: - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()).reshape(self.dims) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): @@ -402,7 +399,7 @@ def _matvec_nosavetaper(self, x: NDArray) -> NDArray: self.taps = to_cupy_conditional(x, self.taps) y = ncp.zeros(self.dimsd, dtype=self.dtype) if self.simOp: - x = self.Op @ x + x = self.Op.matvec(x.ravel()).reshape(self.Op.dimsd) for iwin0 in range(self.dims[0]): for iwin1 in range(self.dims[1]): if self.simOp: @@ -456,7 +453,7 @@ def _rmatvec_nosavetaper(self, x: NDArray) -> NDArray: for iwin0 in range(self.dims[0]): for iwin1 in range(self.dims[1]): ywins = self._apply_taper(ywins, iwin0, iwin1) - y = self.Op.H @ ywins + y = self.Op.rmatvec(ywins.ravel()).reshape(self.dims) else: y = ncp.zeros(self.dims, dtype=self.dtype) for iwin0 in range(self.dims[0]): diff --git a/pylops/torchoperator.py b/pylops/torchoperator.py index 487cb8cb6..7a6ad02e6 100644 --- a/pylops/torchoperator.py +++ b/pylops/torchoperator.py @@ -2,7 +2,6 @@ "TorchOperator", ] -from typing import Optional import numpy as np @@ -62,7 +61,7 @@ def __init__( self, Op: LinearOperator, batch: bool = False, - flatten: Optional[bool] = True, + flatten: bool | None = True, device: str = "cpu", devicetorch: str = "cpu", ) -> None: diff --git a/pylops/utils/_internal.py b/pylops/utils/_internal.py index e6f250fe1..2bac2d5ee 100644 --- a/pylops/utils/_internal.py +++ b/pylops/utils/_internal.py @@ -1,9 +1,8 @@ -from typing import Sized, Tuple +from collections.abc import Sized import numpy as np -import numpy.typing as npt -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import ArrayLike, DTypeLike, NDArray def _value_or_sized_to_array(value_or_sized, repeat: int = 1) -> NDArray: @@ -31,7 +30,7 @@ def _value_or_sized_to_array(value_or_sized, repeat: int = 1) -> NDArray: ) -def _value_or_sized_to_tuple(value_or_sized, repeat: int = 1) -> Tuple: +def _value_or_sized_to_tuple(value_or_sized, repeat: int = 1) -> tuple: """Convert an object which is either single value or a list-like to a tuple. Parameters @@ -52,7 +51,7 @@ def _value_or_sized_to_tuple(value_or_sized, repeat: int = 1) -> Tuple: return tuple(_value_or_sized_to_array(value_or_sized, repeat=repeat)) -def _raise_on_wrong_dtype(arr: npt.ArrayLike, dtype: DTypeLike, name: str) -> None: +def _raise_on_wrong_dtype(arr: ArrayLike, dtype: DTypeLike, name: str) -> None: """Raises an error if dtype of `arr` is not a subdtype of `dtype`. Parameters @@ -71,9 +70,5 @@ def _raise_on_wrong_dtype(arr: npt.ArrayLike, dtype: DTypeLike, name: str) -> No """ if not np.issubdtype(arr.dtype, dtype): - raise TypeError( - ( - f"Wrong input type for `{name}`. " - f'Must be "{dtype}", but received to "{arr.dtype}".' - ) - ) + msg = f"Wrong input type for `{name}`. Must be {dtype}, but received to {arr.dtype}." + raise TypeError(msg) diff --git a/pylops/utils/_pwd2d.py b/pylops/utils/_pwd2d.py index f72270f6e..1eda91926 100644 --- a/pylops/utils/_pwd2d.py +++ b/pylops/utils/_pwd2d.py @@ -1,9 +1,8 @@ -import warnings -from typing import Tuple +import logging import numpy as np -from pylops.basicoperators import Smoothing2D +from pylops.basicoperators import Smoothing2D, SmoothingND from pylops.utils import deps from pylops.utils.typing import NDArray @@ -14,19 +13,37 @@ else: _conv_allpass_numba = None +logger = logging.getLogger(__name__) + def _conv_allpass_python( din: NDArray, dip: NDArray, order: int, u1: NDArray, u2: NDArray ) -> None: - """Pure-Python fallback for PWD all-pass filtering used in - :func:`pylops.utils.signalprocessing.pwd_slope_estimate`.""" - n1, n2 = din.shape + """All-pass convolution. + + Pure-Python fallback for PWD all-pass filtering used in + :func:`pylops.utils.signalprocessing.pwd_slope_estimate`. + + Parameters + ---------- + din : :obj:`numpy.ndarray` + Input data array. + dip : :obj:`numpy.ndarray` + Dip array. + order : :obj:`int` + Order of the all-pass filters: ``1`` (3-tap) or ``2`` (5-tap). + u1 : :obj:`numpy.ndarray` + Output array for first derivative over the first axis. + u2 : :obj:`numpy.ndarray` + Output array for first derivative over the second axis. + + """ + n1, n2 = din.shape[:2] nw = 1 if order == 1 else 2 - for j in range(n1): - for i in range(n2): - u1[j, i] = 0.0 - u2[j, i] = 0.0 + # Clear derivative arrays + u1[:] = 0.0 + u2[:] = 0.0 def b3(sig: float): b0 = (1.0 - sig) * (2.0 - sig) / 12.0 @@ -126,24 +143,62 @@ def b5d(sig: float): def _conv_allpass( din: NDArray, dip: NDArray, order: int, u1: NDArray, u2: NDArray ) -> None: - """Dispatch to numba kernel when available, otherwise use Python fallback.""" + """All-pass convolution dispatcher. + + Perform All-pass convolution. Dispatch to numba kernel when + available, otherwise use Python fallback. + + Parameters + ---------- + din : :obj:`numpy.ndarray` + Input data array. + dip : :obj:`numpy.ndarray` + Dip array. + order : :obj:`int` + Order of the all-pass filters: ``1`` (3-tap) or ``2`` (5-tap). + u1 : :obj:`numpy.ndarray` + Output array for first derivative over the first axis. + u2 : :obj:`numpy.ndarray` + Output array for first derivative over the second axis. + + """ if _conv_allpass_numba is not None: _conv_allpass_numba(din, dip, order, u1, u2) else: - warnings.warn(jit_message) + logger.warning(jit_message) _conv_allpass_python(din, dip, order, u1, u2) def _triangular_smoothing_from_boxcars( - nsmooth: Tuple[int, int], - dims: Tuple[int, int], + nsmooth: tuple[int, ...], + dims: tuple[int, ...], dtype: str | np.dtype = "float64", ): - """Build a triangular smoother as the composition of two boxcar passes.""" - - ny, nx = nsmooth - ly = (ny + 1) // 2 - lx = (nx + 1) // 2 - - box = Smoothing2D(nsmooth=(ly, lx), dims=dims, dtype=dtype) - return box @ box + """Triangular smoother + + Build a triangular smoother as the composition of two + boxcar passes. + + Parameters + ---------- + nsmooth : :obj:`tuple` of :obj:`int` + Length of smoothing operator in the chosen dimensions + (must be odd, if even it will be increased by 1). + dims : :obj:`tuple` of :obj:`int` + Number of samples for each dimension. + dtype : :obj:`str` or :obj:`numpy.dtype`, optional + Type of elements in input array. + + Returns + ------- + Box2 : :obj:`pylops.LinearOperator` + Triangular smoothing operator. + + """ + + nsmooth2 = [(nsm + 1) // 2 for nsm in nsmooth] + smoothcls = Smoothing2D if dims == 2 else SmoothingND + + Box = smoothcls(nsmooth=nsmooth2, dims=dims, dtype=dtype) + Box2 = Box @ Box + return Box2 diff --git a/pylops/utils/_pwd2d_numba.py b/pylops/utils/_pwd2d_numba.py index 4e72e6ff8..b6694a164 100644 --- a/pylops/utils/_pwd2d_numba.py +++ b/pylops/utils/_pwd2d_numba.py @@ -1,5 +1,3 @@ -from typing import Tuple - from pylops.utils.typing import NDArray # Remap numba njit to no-ops and prange to range @@ -19,7 +17,7 @@ def prange(*args, **kwargs): # type: ignore @njit(fastmath=True, cache=True) -def _B3(sigma: float) -> Tuple[float, float, float]: +def _B3(sigma: float) -> tuple[float, float, float]: """Quadratic B-spline coefficients (3 taps).""" b0 = (1.0 - sigma) * (2.0 - sigma) / 12.0 b1 = (2.0 + sigma) * (2.0 - sigma) / 6.0 @@ -28,7 +26,7 @@ def _B3(sigma: float) -> Tuple[float, float, float]: @njit(fastmath=True, cache=True) -def _B3d(sigma: float) -> Tuple[float, float, float]: +def _B3d(sigma: float) -> tuple[float, float, float]: """Derivatives of quadratic B-spline coefficients.""" b0 = -(2.0 - sigma) / 12.0 - (1.0 - sigma) / 12.0 b1 = (2.0 - sigma) / 6.0 - (2.0 + sigma) / 6.0 @@ -37,7 +35,7 @@ def _B3d(sigma: float) -> Tuple[float, float, float]: @njit(fastmath=True, cache=True) -def _B5(sigma: float) -> Tuple[float, float, float, float, float]: +def _B5(sigma: float) -> tuple[float, float, float, float, float]: """Quartic B-spline coefficients (5 taps).""" s = sigma b0 = (1 - s) * (2 - s) * (3 - s) * (4 - s) / 1680.0 @@ -49,7 +47,7 @@ def _B5(sigma: float) -> Tuple[float, float, float, float, float]: @njit(fastmath=True, cache=True) -def _B5d(sigma: float) -> Tuple[float, float, float, float, float]: +def _B5d(sigma: float) -> tuple[float, float, float, float, float]: """Derivatives of quartic B-spline coefficients.""" s = sigma b0 = ( @@ -100,13 +98,12 @@ def _conv_allpass_numba( ) -> None: """Numba kernel for PWD all-pass filtering used in :func:`pylops.utils.signalprocessing.pwd_slope_estimate`.""" - n1, n2 = din.shape + n1, n2 = din.shape[:2] nw = 1 if order == 1 else 2 - for j in prange(n1): - for i in range(n2): - u1[j, i] = 0.0 - u2[j, i] = 0.0 + # Clear derivative arrays + u1[:] = 0.0 + u2[:] = 0.0 for i1 in prange(nw, n1 - nw): for i2 in range(0, n2 - 1): diff --git a/pylops/utils/backend.py b/pylops/utils/backend.py index 5b3130bf5..91493ff38 100644 --- a/pylops/utils/backend.py +++ b/pylops/utils/backend.py @@ -28,8 +28,8 @@ "randn", ] +from collections.abc import Callable from types import ModuleType -from typing import Callable import numpy as np import scipy.fft as sp_fft @@ -38,7 +38,7 @@ from scipy.sparse import csc_matrix, eye from pylops.utils import deps -from pylops.utils.typing import DTypeLike, NDArray, ArrayLike +from pylops.utils.typing import ArrayLike, DTypeLike, NDArray, Tfftengine_ncj if deps.cupy_enabled: import cupy as cp @@ -70,7 +70,7 @@ from numpy.core.multiarray import normalize_axis_index -def get_module(backend: str = "numpy") -> ModuleType: +def get_module(backend: Tfftengine_ncj = "numpy") -> ModuleType: """Returns correct numerical module based on backend string Parameters @@ -92,7 +92,8 @@ def get_module(backend: str = "numpy") -> ModuleType: elif backend == "jax": ncp = jnp else: - raise ValueError("backend must be numpy, cupy, or jax") + msg = f"The provided backend must be numpy, cupy, or jax, got {backend}" + raise ValueError(msg) return ncp @@ -118,7 +119,8 @@ def get_module_name(mod: ModuleType) -> str: elif deps.jax_enabled and mod == jnp: backend = "jax" else: - raise ValueError("module must be numpy, cupy, or jax") + msg = f"The provided module must be numpy, cupy, or jax, got {mod}" + raise ValueError(msg) return backend @@ -226,11 +228,8 @@ def get_oaconvolve(x: ArrayLike) -> Callable: """ if deps.cupy_enabled or deps.jax_enabled: if deps.jax_enabled and isinstance(x, jnp.ndarray): - raise NotImplementedError( - "oaconvolve not implemented in " - "jax. Consider using a different" - "option..." - ) + msg = "oaconvolve not implemented in jax. Consider using a different option..." + raise NotImplementedError(msg) elif deps.cupy_enabled and cp.get_array_module(x) == cp: return cp_oaconvolve else: @@ -680,7 +679,7 @@ def inplace_divide(x: ArrayLike, y: ArrayLike, idx: list) -> NDArray: return y -def randn(*n: int, backend: str = "numpy") -> NDArray: +def randn(*n: int, backend: Tfftengine_ncj = "numpy") -> NDArray: """Returns randomly generated number Parameters @@ -704,5 +703,6 @@ def randn(*n: int, backend: str = "numpy") -> NDArray: elif backend == "jax": x = jnp.array(np.random.randn(*n)) else: - raise ValueError("backend must be numpy, cupy, or jax") + msg = f"backend must be numpy, cupy, or jax, got {backend}" + raise ValueError(msg) return x diff --git a/pylops/utils/decorators.py b/pylops/utils/decorators.py index 887d2d534..4c61f14e0 100644 --- a/pylops/utils/decorators.py +++ b/pylops/utils/decorators.py @@ -5,8 +5,8 @@ "count", ] +from collections.abc import Callable from functools import wraps -from typing import Callable, Optional from pylops.config import disabled_ndarray_multiplication @@ -71,9 +71,10 @@ def wrapper(A, b, *args, **kwargs): # SciPy-type signature def reshaped( - func: Optional[Callable] = None, - forward: Optional[bool] = None, + func: Callable | None = None, + forward: bool | None = None, swapaxis: bool = False, + axis: int = -1, ) -> Callable: """Decorator for the common reshape/flatten pattern used in many operators. @@ -87,8 +88,10 @@ def reshaped( with 'rmat' as substring or whose name is 'div' or '__truediv__' will reshape to ``dimsd``. swapaxis : :obj:`bool`, optional - If True, swaps the last axis of the input array of the decorated function with + If True, swaps the ``axis`` of the input array of the decorated function with ``self.axis``. Only use if the decorated LinearOperator has ``axis`` attribute. + axis : :obj:`int`, optional + Axis to be swapped when ``swapaxis`` is True. Notes ----- @@ -108,7 +111,7 @@ def _matvec(self, x): .. code-block:: python - @reshaped(swapaxis=True) + @reshaped(swapaxis=True, axis=-1) def _matvec(self, x): y = do_things_to_reshaped_swapped(y) return y @@ -139,10 +142,10 @@ def decorator(f): def wrapper(self, x): x = x.reshape(getattr(self, inp_dims)) if swapaxis: - x = x.swapaxes(self.axis, -1) + x = x.swapaxes(self.axis, axis) y = f(self, x) if swapaxis: - y = y.swapaxes(self.axis, -1) + y = y.swapaxes(self.axis, axis) y = y.ravel() return y @@ -154,8 +157,8 @@ def wrapper(self, x): def count( - func: Optional[Callable] = None, - forward: Optional[bool] = None, + func: Callable | None = None, + forward: bool | None = None, matmat: bool = False, ) -> Callable: """Decorator used to count the number of forward and adjoint performed by an operator. diff --git a/pylops/utils/deps.py b/pylops/utils/deps.py index b2920caff..c97c966db 100644 --- a/pylops/utils/deps.py +++ b/pylops/utils/deps.py @@ -17,11 +17,10 @@ import os from importlib import import_module, util -from typing import Optional # error message at import of available package -def cupy_import(message: Optional[str] = None) -> str | None: +def cupy_import(message: str | None = None) -> str | None: # detect if cupy is available and the user is expecting to be used cupy_test = ( util.find_spec("cupy") is not None and int(os.getenv("CUPY_PYLOPS", 1)) == 1 @@ -55,7 +54,7 @@ def cupy_import(message: Optional[str] = None) -> str | None: return cupy_message -def jax_import(message: Optional[str] = None) -> str | None: +def jax_import(message: str | None = None) -> str | None: jax_test = ( util.find_spec("jax") is not None and int(os.getenv("JAX_PYLOPS", 1)) == 1 ) @@ -83,7 +82,7 @@ def jax_import(message: Optional[str] = None) -> str | None: return jax_message -def astra_import(message: Optional[str] = None) -> str | None: +def astra_import(message: str | None = None) -> str | None: if astra_enabled: try: import_module("astra") # noqa: F401 @@ -101,7 +100,7 @@ def astra_import(message: Optional[str] = None) -> str | None: return astra_message -def devito_import(message: Optional[str] = None) -> str | None: +def devito_import(message: str | None = None) -> str | None: if devito_enabled: try: import_module("devito") # noqa: F401 @@ -118,7 +117,7 @@ def devito_import(message: Optional[str] = None) -> str | None: return devito_message -def dtcwt_import(message: Optional[str] = None) -> str | None: +def dtcwt_import(message: str | None = None) -> str | None: if dtcwt_enabled: try: import_module("dtcwt") # noqa: F401 @@ -135,7 +134,7 @@ def dtcwt_import(message: Optional[str] = None) -> str | None: return dtcwt_message -def numba_import(message: Optional[str] = None) -> str | None: +def numba_import(message: str | None = None) -> str | None: if numba_enabled: try: import_module("numba") # noqa: F401 @@ -154,7 +153,7 @@ def numba_import(message: Optional[str] = None) -> str | None: return numba_message -def pyfftw_import(message: Optional[str] = None) -> str | None: +def pyfftw_import(message: str | None = None) -> str | None: if pyfftw_enabled: try: import_module("pyfftw") # noqa: F401 @@ -173,7 +172,7 @@ def pyfftw_import(message: Optional[str] = None) -> str | None: return pyfftw_message -def pywt_import(message: Optional[str] = None) -> str | None: +def pywt_import(message: str | None = None) -> str | None: if pywt_enabled: try: import_module("pywt") # noqa: F401 @@ -192,7 +191,7 @@ def pywt_import(message: Optional[str] = None) -> str | None: return pywt_message -def skfmm_import(message: Optional[str] = None) -> str | None: +def skfmm_import(message: str | None = None) -> str | None: if skfmm_enabled: try: import_module("skfmm") # noqa: F401 @@ -210,7 +209,7 @@ def skfmm_import(message: Optional[str] = None) -> str | None: return skfmm_message -def spgl1_import(message: Optional[str] = None) -> str | None: +def spgl1_import(message: str | None = None) -> str | None: if spgl1_enabled: try: import_module("spgl1") # noqa: F401 @@ -227,7 +226,7 @@ def spgl1_import(message: Optional[str] = None) -> str | None: return spgl1_message -def sympy_import(message: Optional[str] = None) -> str | None: +def sympy_import(message: str | None = None) -> str | None: if sympy_enabled: try: import_module("sympy") # noqa: F401 @@ -244,7 +243,7 @@ def sympy_import(message: Optional[str] = None) -> str | None: return sympy_message -def pytensor_import(message: Optional[str] = None) -> str | None: +def pytensor_import(message: str | None = None) -> str | None: if pytensor_enabled: try: import_module("pytensor") # noqa: F401 @@ -261,7 +260,7 @@ def pytensor_import(message: Optional[str] = None) -> str | None: return pytensor_message -def mkl_fft_import(message: Optional[str]) -> str | None: +def mkl_fft_import(message: str | None) -> str | None: if mkl_fft_enabled: try: import_module("mkl_fft") # noqa: F401 diff --git a/pylops/utils/describe.py b/pylops/utils/describe.py index f1a68f413..3619f3523 100644 --- a/pylops/utils/describe.py +++ b/pylops/utils/describe.py @@ -3,7 +3,6 @@ import logging import random import string -from typing import List, Set, Union from pylops import LinearOperator from pylops.basicoperators import BlockDiag, HStack, VStack @@ -51,7 +50,7 @@ def _in_notebook() -> bool: return True -def _assign_name(Op, Ops, names: List[str]) -> str: +def _assign_name(Op, Ops, names: list[str]) -> str: """Assign name to an operator as provided by the user (or randomly select one when not provided by the user) @@ -102,7 +101,7 @@ def _assign_name(Op, Ops, names: List[str]) -> str: return name -def _describeop(Op, Ops, names: List[str]): +def _describeop(Op, Ops, names: list[str]): """Core steps to describe a single operator Parameters @@ -150,7 +149,7 @@ def _describeop(Op, Ops, names: List[str]): def _describe( Op, Ops, - names: Union[List[str], Set[str]], + names: list[str] | set[str], ): """Core steps to describe a composite operator. This is done recursively. diff --git a/pylops/utils/dottest.py b/pylops/utils/dottest.py index c48dc11ee..8bdbb2cd1 100644 --- a/pylops/utils/dottest.py +++ b/pylops/utils/dottest.py @@ -1,22 +1,22 @@ __all__ = ["dottest"] -from typing import Optional import numpy as np from pylops.utils.backend import get_module, randn, to_numpy +from pylops.utils.typing import Tbackend def dottest( Op, - nr: Optional[int] = None, - nc: Optional[int] = None, + nr: int | None = None, + nc: int | None = None, rtol: float = 1e-6, atol: float = 1e-21, complexflag: int = 0, raiseerror: bool = True, verb: bool = False, - backend: str = "numpy", + backend: Tbackend = "numpy", ) -> bool: r"""Dot test. @@ -88,7 +88,8 @@ def dottest( nc = Op.shape[1] if (nr, nc) != Op.shape: - raise AssertionError("Provided nr and nc do not match Operator shape.") + msg = f"Provided nr and nc do not match the operator shape {Op.shape}." + raise AssertionError(msg) # make u and v vectors rdtype = np.ones(1, Op.dtype).real.dtype diff --git a/pylops/utils/estimators.py b/pylops/utils/estimators.py index 5e73f6866..94798ab24 100644 --- a/pylops/utils/estimators.py +++ b/pylops/utils/estimators.py @@ -6,23 +6,22 @@ from itertools import chain from types import ModuleType -from typing import Optional, Tuple import numpy -import numpy.typing as npt from pylops.utils.backend import get_module +from pylops.utils.typing import NDArray, Tbackend, Tsampler, Tsampler2 def _sampler_gaussian( m: float, batch_size: int, backend_module: ModuleType = numpy -) -> Tuple[float, npt.ArrayLike]: +) -> tuple[float, NDArray]: return backend_module.random.randn(m, batch_size) def _sampler_rayleigh( m: float, batch_size: int, backend_module: ModuleType = numpy -) -> npt.ArrayLike: +) -> NDArray: z = backend_module.random.randn(m, batch_size) for i in range(batch_size): z[:, i] *= m / backend_module.dot(z[:, i].T, z[:, i]) @@ -31,7 +30,7 @@ def _sampler_rayleigh( def _sampler_rademacher( m: float, batch_size: int, backend_module: ModuleType = numpy -) -> npt.ArrayLike: +) -> NDArray: return 2 * backend_module.random.binomial(1, 0.5, size=(m, batch_size)) - 1 @@ -44,10 +43,10 @@ def _sampler_rademacher( def trace_hutchinson( Op, - neval: Optional[int] = None, - batch_size: Optional[int] = None, - sampler: str = "rademacher", - backend: str = "numpy", + neval: int | None = None, + batch_size: int | None = None, + sampler: Tsampler = "rademacher", + backend: Tbackend = "numpy", ) -> float: r"""Trace of linear operator using the Hutchinson method. @@ -142,27 +141,28 @@ def trace_hutchinson( for i, idx in enumerate(z_idx): z[idx, i] = 1.0 remaining_vectors.remove(idx) - trace += ncp.trace((z.T @ (Op @ z))) + trace += ncp.trace(z.T @ (Op @ z)) n_total += batch trace *= m / n_total return trace[0] if sampler not in _SAMPLERS: - raise NotImplementedError(f"sampler {sampler} not available.") + msg = f"sampler {sampler} not available." + raise NotImplementedError(msg) sampler_fun = _SAMPLERS[sampler] for batch in batch_range: z = sampler_fun(m, batch, backend_module=ncp).astype(Op.dtype) - trace += ncp.trace((z.T @ (Op @ z))) + trace += ncp.trace(z.T @ (Op @ z)) trace /= neval return trace[0] def trace_hutchpp( Op, - neval: Optional[int] = None, - sampler: str = "rademacher", - backend: str = "numpy", + neval: int | None = None, + sampler: Tsampler2 = "rademacher", + backend: Tbackend = "numpy", ) -> float: r"""Trace of linear operator using the Hutch++ method. @@ -229,14 +229,14 @@ def trace_hutchpp( neval = int(numpy.round(m * 0.1)) if neval is None else neval if sampler not in _SAMPLERS: - raise NotImplementedError(f"sampler {sampler} not available.") + msg = f"sampler {sampler} not available." + raise NotImplementedError(msg) sampler_fun = _SAMPLERS[sampler] batch = neval // 3 if batch <= 0: - msg = f"Sampler '{sampler}' not supported with {neval} samples." - msg += " Try increasing it." + msg = f"Sampler '{sampler}' not supported with {neval} samples. Try increasing it." raise ValueError(msg) S = sampler_fun(m, batch, backend_module=ncp).astype(Op.dtype) @@ -253,11 +253,11 @@ def trace_hutchpp( def trace_nahutchpp( Op, - neval: Optional[int] = None, - sampler: str = "rademacher", + neval: int | None = None, + sampler: Tsampler2 = "rademacher", c1: float = 1.0 / 6.0, c2: float = 1.0 / 3.0, - backend: str = "numpy", + backend: Tbackend = "numpy", ) -> float: r"""Trace of linear operator using the NA-Hutch++ method. @@ -336,7 +336,8 @@ def trace_nahutchpp( neval = int(numpy.round(m * 0.1)) if neval is None else neval if sampler not in _SAMPLERS: - raise NotImplementedError(f"sampler {sampler} not available.") + msg = f"sampler {sampler} not available." + raise NotImplementedError(msg) sampler_fun = _SAMPLERS[sampler] diff --git a/pylops/utils/metrics.py b/pylops/utils/metrics.py index 6393dec29..8adc2d9f2 100644 --- a/pylops/utils/metrics.py +++ b/pylops/utils/metrics.py @@ -5,13 +5,13 @@ "psnr", ] -from typing import Optional import numpy as np -import numpy.typing as npt +from pylops.utils.typing import ArrayLike -def mae(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: + +def mae(xref: ArrayLike, xcmp: ArrayLike) -> float: """Mean Absolute Error (MAE) Compute Mean Absolute Error between two vectors @@ -33,7 +33,7 @@ def mae(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: return mae -def mse(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: +def mse(xref: ArrayLike, xcmp: ArrayLike) -> float: """Mean Square Error (MSE) Compute Mean Square Error between two vectors @@ -55,7 +55,7 @@ def mse(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: return mse -def snr(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: +def snr(xref: ArrayLike, xcmp: ArrayLike) -> float: """Signal to Noise Ratio (SNR) Compute Signal to Noise Ratio between two vectors @@ -79,10 +79,10 @@ def snr(xref: npt.ArrayLike, xcmp: npt.ArrayLike) -> float: def psnr( - xref: npt.ArrayLike, - xcmp: npt.ArrayLike, - xmax: Optional[float] = None, - xmin: Optional[float] = 0.0, + xref: ArrayLike, + xcmp: ArrayLike, + xmax: float | None = None, + xmin: float | None = 0.0, ) -> float: """Peak Signal to Noise Ratio (PSNR) diff --git a/pylops/utils/multiproc.py b/pylops/utils/multiproc.py index e12c88855..74866b960 100644 --- a/pylops/utils/multiproc.py +++ b/pylops/utils/multiproc.py @@ -2,7 +2,6 @@ import logging import time -from typing import List, Optional, Tuple import numpy.typing as npt @@ -12,10 +11,10 @@ def scalability_test( Op, x: npt.ArrayLike, - workers: Optional[List[int]] = None, + workers: list[int] | None = None, forward: bool = True, ntimes: int = 1, -) -> Tuple[List[float], List[float]]: +) -> tuple[list[float], list[float]]: r"""Scalability test. Small auxiliary routine to test the performance of operators using diff --git a/pylops/utils/seismicevents.py b/pylops/utils/seismicevents.py index b061734ec..ed04f04b2 100755 --- a/pylops/utils/seismicevents.py +++ b/pylops/utils/seismicevents.py @@ -8,18 +8,18 @@ "hyperbolic3d", ] -from typing import Dict, Tuple, Union import numpy as np import numpy.typing as npt import scipy.signal as filt from pylops.utils._internal import _value_or_sized_to_array +from pylops.utils.typing import NDArray def _filterdata( - d: npt.NDArray, nt: int, wav: npt.ArrayLike, wcenter: int -) -> Tuple[npt.ArrayLike, npt.ArrayLike]: + d: NDArray, nt: int, wav: npt.ArrayLike, wcenter: int +) -> tuple[npt.ArrayLike, npt.ArrayLike]: r"""Apply filtering to data with wavelet wav""" dwav = filt.lfilter(wav, 1, d, axis=-1) dwav = dwav[..., wcenter:] @@ -27,7 +27,7 @@ def _filterdata( return d, dwav -def makeaxis(par: Dict) -> Tuple[npt.NDArray, npt.NDArray, npt.NDArray, npt.NDArray]: +def makeaxis(par: dict) -> tuple[NDArray, NDArray, NDArray, NDArray]: r"""Create axes t, x, and y axes Create space and time axes from dictionary containing initial values ``ot``, ``ox``, ``oy``, @@ -70,14 +70,14 @@ def makeaxis(par: Dict) -> Tuple[npt.NDArray, npt.NDArray, npt.NDArray, npt.NDAr def linear2d( - x: npt.NDArray, - t: npt.NDArray, + x: NDArray, + t: NDArray, v: float, - t0: Union[float, Tuple[float]], - theta: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, -) -> Tuple[npt.NDArray, npt.NDArray]: + t0: float | tuple[float], + theta: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, +) -> tuple[NDArray, NDArray]: r"""Linear 2D events Create 2d linear events given propagation velocity, intercept time, angle, @@ -149,14 +149,14 @@ def linear2d( def parabolic2d( - x: npt.NDArray, - t: npt.NDArray, - t0: Union[float, Tuple[float]], - px: Union[float, Tuple[float]], - pxx: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, -) -> Tuple[npt.NDArray, npt.NDArray]: + x: NDArray, + t: NDArray, + t0: float | tuple[float], + px: float | tuple[float], + pxx: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, +) -> tuple[NDArray, NDArray]: r"""Parabolic 2D events Create 2d parabolic events given intercept time, @@ -226,13 +226,13 @@ def parabolic2d( def hyperbolic2d( - x: npt.NDArray, - t: npt.NDArray, - t0: Union[float, Tuple[float]], - vrms: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, -) -> Tuple[npt.NDArray, npt.NDArray]: + x: NDArray, + t: NDArray, + t0: float | tuple[float], + vrms: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, +) -> tuple[NDArray, NDArray]: r"""Hyperbolic 2D events Create 2d hyperbolic events given intercept time, root-mean-square @@ -297,16 +297,16 @@ def hyperbolic2d( def linear3d( - x: npt.NDArray, - y: npt.NDArray, - t: npt.NDArray, - v: Union[float, Tuple[float]], - t0: Union[float, Tuple[float]], - theta: Union[float, Tuple[float]], - phi: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, -) -> Tuple[npt.NDArray, npt.NDArray]: + x: NDArray, + y: NDArray, + t: NDArray, + v: float | tuple[float], + t0: float | tuple[float], + theta: float | tuple[float], + phi: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, +) -> tuple[NDArray, NDArray]: r"""Linear 3D events Create 3d linear events given propagation velocity, intercept time, angles, @@ -387,17 +387,17 @@ def linear3d( def parabolic3d( - x: npt.NDArray, - y: npt.NDArray, - t: npt.NDArray, - t0: Union[float, Tuple[float]], - px: Union[float, Tuple[float]], - py: Union[float, Tuple[float]], - pxx: Union[float, Tuple[float]], - pyy: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, -) -> Tuple[npt.NDArray, npt.NDArray]: + x: NDArray, + y: NDArray, + t: NDArray, + t0: float | tuple[float], + px: float | tuple[float], + py: float | tuple[float], + pxx: float | tuple[float], + pyy: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, +) -> tuple[NDArray, NDArray]: r"""Parabolic 3D events Create 3d parabolic events given intercept time, @@ -481,14 +481,14 @@ def parabolic3d( def hyperbolic3d( - x: npt.NDArray, - y: npt.NDArray, - t: npt.NDArray, - t0: Union[float, Tuple[float]], - vrms_x: Union[float, Tuple[float]], - vrms_y: Union[float, Tuple[float]], - amp: Union[float, Tuple[float]], - wav: npt.NDArray, + x: NDArray, + y: NDArray, + t: NDArray, + t0: float | tuple[float], + vrms_x: float | tuple[float], + vrms_y: float | tuple[float], + amp: float | tuple[float], + wav: NDArray, ): r"""Hyperbolic 3D events diff --git a/pylops/utils/signalprocessing.py b/pylops/utils/signalprocessing.py index c954ff135..2c615a1c0 100644 --- a/pylops/utils/signalprocessing.py +++ b/pylops/utils/signalprocessing.py @@ -7,16 +7,21 @@ ] import warnings -from typing import Tuple +from collections.abc import Sequence import numpy as np from scipy.ndimage import gaussian_filter -from pylops.basicoperators import Diagonal, Smoothing2D +from pylops.basicoperators import Diagonal, Smoothing2D, SmoothingND from pylops.optimization.leastsquares import preconditioned_inversion +from pylops.utils._internal import _value_or_sized_to_tuple from pylops.utils._pwd2d import _conv_allpass, _triangular_smoothing_from_boxcars -from pylops.utils.backend import get_array_module, get_toeplitz -from pylops.utils.typing import NDArray +from pylops.utils.backend import ( + get_array_module, + get_normalize_axis_index, + get_toeplitz, +) +from pylops.utils.typing import NDArray, Tpwdsmoothing def convmtx(h: NDArray, n: int, offset: int = 0) -> NDArray: @@ -53,6 +58,7 @@ def convmtx(h: NDArray, n: int, offset: int = 0) -> NDArray: "with the documentation. Users are highly encouraged " "to modify their codes accordingly.", FutureWarning, + stacklevel=2, ) ncp = get_array_module(h) @@ -69,7 +75,7 @@ def nonstationary_convmtx( H: NDArray, n: int, hc: int = 0, - pad: Tuple[int] = (0, 0), + pad: tuple[int] = (0, 0), ) -> NDArray: r"""Convolution matrix from a bank of filters @@ -113,7 +119,7 @@ def slope_estimate( smooth: float = 5.0, eps: float = 0.0, dips: bool = False, -) -> Tuple[NDArray, NDArray]: +) -> tuple[NDArray, NDArray]: r"""Local slope estimation Local slopes are estimated using the *Structure Tensor* algorithm [1]_. @@ -264,7 +270,7 @@ def dip_estimate( dx: float = 1.0, smooth: int = 5, eps: float = 0.0, -) -> Tuple[NDArray, NDArray]: +) -> tuple[NDArray, NDArray]: r"""Local dip estimation Local dips are estimated using the *Structure Tensor* algorithm [1]_. @@ -316,9 +322,10 @@ def pwd_slope_estimate( niter: int = 5, liter: int = 20, order: int = 2, - smoothing: str = "triangle", - nsmooth: Tuple[int, int] = (10, 10), + smoothing: Tpwdsmoothing = "triangle", + nsmooth: int | Sequence[int] = 10, damp: float = 0.0, + axis: int = -1, ) -> NDArray: r"""Plane-Wave Destruction (PWD) local slope estimation. @@ -334,34 +341,39 @@ def pwd_slope_estimate( Parameters ---------- d : :obj:`numpy.ndarray` - Input 2D array of shape ``(nz, nx)``. + Input array of shape of size + :math:`[n_z \times n_x\,(\times n_y)]` niter : :obj:`int`, optional Number of outer PWD iterations. Default is ``5``. liter : :obj:`int`, optional Maximum number of inner least-squares iterations. Default is ``20``. order : :obj:`int`, optional - Accuracy order of the all-pass filters. Use ``1`` (3-tap) or ``2`` (5-tap). + Order of the all-pass filters: ``1`` (3-tap) or ``2`` (5-tap). Default is ``2``. smoothing : :obj:`str`, optional Preconditioning choice: ``"triangle"`` (default) that applies a triangular smoother (two boxcar passes), or ``"boxcar"`` that applies a single-pass boxcar. - nsmooth : :obj:`tuple` of :obj:`int`, optional - Smoothing lengths ``(ny, nx)`` for the preconditioner. Default ``(10, 10)``. + nsmooth : :obj:`tuple` or :obj:`list` or :obj:`int` + Smoothing lengths for the preconditioner. If a single scalar is provided, + the same value is used across all axes. Default ``10``. damp : :obj:`float`, optional Damping factor for the least-squares solve. Default ``0.0``. + axis : :obj:`int`, optional + Spatial axis over which slopes are computed (only for 3D case) Returns ------- sigma : :obj:`numpy.ndarray` - Estimated slope field of shape ``(nz, nx)`` in samples per trace - (:math:`\Delta z / \Delta x`). + Estimated slope field of size + :math:`[n_z \times n_x\,(\times n_y)]` in samples per trace + (:math:`\Delta z / \Delta x/y`). Raises ------ ValueError If ``order`` is not ``1`` or ``2``. ValueError - If input array ``d`` is not 2-D. + If input array ``d`` is not 2D or 3D. .. [1] Claerbout, J., and Brown, M., "Two-dimensional textures and prediction-error filters", EAGE Annual Meeting, Expanded Abstracts. 1999. @@ -370,26 +382,41 @@ def pwd_slope_estimate( """ if order not in (1, 2): - raise ValueError("order must be 1 (B3) or 2 (B5)") - if d.ndim != 2: - raise ValueError("input data must be 2-D") - + msg = f"order must be 1 (B3) or 2 (B5), got {order}" + raise ValueError(msg) + if d.ndim not in (2, 3): + msg = f"input array must be 2D or 3D, got {d.ndim}D" + raise ValueError(msg) + + # Re-arrange dimensions to work on first two axes + nsmooth = _value_or_sized_to_tuple(nsmooth, d.ndim) + axis = get_normalize_axis_index()(axis, d.ndim) + if axis == 2: + d = d.swapaxes(1, 2) + nsmooth = (nsmooth[0], nsmooth[2], nsmooth[1]) + dims = d.shape + smoothcls = Smoothing2D if dims == 2 else SmoothingND + smoothaxes = (-2, -1) if dims == 2 else (-3, -2, -1) dtype = d.dtype - nz, nx = d.shape + + # Initialize array sigma = np.zeros_like(d) delta_sigma = np.zeros_like(sigma) u1 = np.zeros_like(sigma) u2 = np.zeros_like(sigma) + # Define smoother if smoothing == "triangle": Sop = _triangular_smoothing_from_boxcars( - nsmooth=nsmooth, dims=(nz, nx), dtype=dtype + nsmooth=nsmooth, dims=dims, dtype=dtype ) elif smoothing == "boxcar": - Sop = Smoothing2D(nsmooth=nsmooth, dims=(nz, nx), dtype=dtype) + Sop = smoothcls(nsmooth=nsmooth, dims=dims, axes=smoothaxes, dtype=dtype) else: - raise ValueError("smoothing must be either 'triangle' or 'boxcar'") + msg = f"smoothing must be either 'triangle' or 'boxcar', got {smoothing}" + raise ValueError(msg) + # Estimate slopes for _ in range(niter): _conv_allpass(d, sigma, order, u1, u2) @@ -401,8 +428,12 @@ def pwd_slope_estimate( damp=damp, iter_lim=liter, show=False, - )[0].reshape(nz, nx) + )[0].reshape(dims) sigma += delta_sigma + # Re-arrange back dimensions + if axis == 2: + sigma = sigma.swapaxes(1, 2) + return sigma diff --git a/pylops/utils/tapers.py b/pylops/utils/tapers.py index a15a4f325..07e9856f3 100644 --- a/pylops/utils/tapers.py +++ b/pylops/utils/tapers.py @@ -7,12 +7,11 @@ "tapernd", ] -from typing import Optional, Tuple, Union import numpy as np import numpy.typing as npt -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Ttaper def hanningtaper( @@ -40,11 +39,10 @@ def hanningtaper( if ntap > 0: if (nmask // ntap) < 2: ntap_min = nmask // 2 if nmask % 2 == 0 else (nmask - 1) // 2 - raise ValueError(f"ntap={ntap} must be smaller or equal than {ntap_min}") + msg = f"ntap={ntap} must be smaller or equal than {ntap_min}" + raise ValueError(msg) han_win = np.hanning(ntap * 2 - 1) - st_tpr = han_win[ - :ntap, - ] + st_tpr = han_win[:ntap,] mid_tpr = np.ones( [ nmask - (2 * ntap), @@ -59,7 +57,7 @@ def cosinetaper( nmask: int, ntap: int, square: bool = False, - exponent: Optional[float] = None, + exponent: float | None = None, ) -> npt.ArrayLike: r"""1D Cosine or Cosine square taper @@ -99,9 +97,7 @@ def cosinetaper( + 1.0 ) ) ** exponent - st_tpr = cos_win[ - :ntap, - ] + st_tpr = cos_win[:ntap,] mid_tpr = np.ones( [ nmask - (2 * ntap), @@ -115,7 +111,7 @@ def cosinetaper( def taper( nmask: int, ntap: int, - tapertype: str, + tapertype: Ttaper | None, ) -> NDArray: r"""1D taper @@ -154,8 +150,8 @@ def taper( def taper2d( nt: int, nmask: int, - ntap: Union[int, Tuple[int, int]], - tapertype: str = "hanning", + ntap: int | tuple[int, int], + tapertype: Ttaper | None = "hanning", ) -> NDArray: r"""2D taper @@ -204,9 +200,9 @@ def taper2d( def taper3d( nt: int, - nmask: Tuple[int, int], - ntap: Tuple[int, int], - tapertype: str = "hanning", + nmask: tuple[int, int], + ntap: tuple[int, int], + tapertype: Ttaper | None = "hanning", ) -> NDArray: r"""3D taper @@ -263,7 +259,7 @@ def taper3d( def tapernd( nmask: InputDimsLike, ntap: InputDimsLike, - tapertype: str = "hanning", + tapertype: Ttaper | None = "hanning", ) -> NDArray: r"""ND taper @@ -289,13 +285,15 @@ def tapernd( """ # create 1d window if tapertype == "hanning": - tpr = [hanningtaper(nm, nt) for nm, nt in zip(nmask, ntap)] + tpr = [hanningtaper(nm, nt) for nm, nt in zip(nmask, ntap, strict=True)] elif tapertype == "cosine": - tpr = [cosinetaper(nm, nt, False) for nm, nt in zip(nmask, ntap)] + tpr = [cosinetaper(nm, nt, False) for nm, nt in zip(nmask, ntap, strict=True)] elif tapertype == "cosinesquare": - tpr = [cosinetaper(nm, nt, True) for nm, nt in zip(nmask, ntap)] + tpr = [cosinetaper(nm, nt, True) for nm, nt in zip(nmask, ntap, strict=True)] elif tapertype == "cosinesqrt": - tpr = [cosinetaper(nm, nt, False, 0.5) for nm, nt in zip(nmask, ntap)] + tpr = [ + cosinetaper(nm, nt, False, 0.5) for nm, nt in zip(nmask, ntap, strict=True) + ] else: tpr = [np.ones(nm) for nm in nmask] diff --git a/pylops/utils/typing.py b/pylops/utils/typing.py index c0d193b1c..b7f85436f 100644 --- a/pylops/utils/typing.py +++ b/pylops/utils/typing.py @@ -9,7 +9,8 @@ "TensorTypeLike", ] -from typing import Sequence, Tuple, Union +from collections.abc import Sequence +from typing import Literal import numpy as np import numpy.typing as npt @@ -19,16 +20,58 @@ if torch_enabled: import torch -IntNDArray = npt.NDArray[np.int_] -NDArray = npt.NDArray +# numpy generic types +NDArray = npt.NDArray[np.number] ArrayLike = npt.ArrayLike +IntNDArray = npt.NDArray[np.integer] +FloatingNDArray = npt.NDArray[np.floating] +InexactNDArray = npt.NDArray[np.inexact] # float or complex -InputDimsLike = Union[Sequence[int], IntNDArray] -SamplingLike = Union[Sequence[float], NDArray] -ShapeLike = Tuple[int, ...] +InputDimsLike = Sequence[int] | IntNDArray +SamplingLike = Sequence[float] | FloatingNDArray +ShapeLike = tuple[int, ...] DTypeLike = npt.DTypeLike +# torch generic types if torch_enabled: TensorTypeLike = torch.Tensor else: TensorTypeLike = None + +# pylops specific types +Tctengine = Literal["cpu", "cuda"] +Tengine_nn = Literal["numpy", "numba"] +Tengine_nnc = Literal["numpy", "numba", "cuda"] +Tfftengine_ncj = Literal["numpy", "cupy", "jax"] +Tfftengine_ns = Literal["numpy", "scipy"] +Tfftengine_nsf = Literal["numpy", "scipy", "fftw"] +Tfftengine_nsm = Literal["numpy", "scipy", "mkl_fft"] +Tfftengine_nfsm = Literal["numpy", "fftw", "scipy", "mkl_fft"] +Tinoutengine = tuple[Tfftengine_ncj, Tfftengine_ncj] +Tmriengine = Literal["numpy", "jax"] + +Tavolinearization = Literal["akirich", "fatti", "PS"] +Tctprojgeom = Literal["parallel", "fanflat"] +Tctprojectortype = Literal["strip", "line", "linear", "cuda"] +Tderivkind = Literal["forward", "centered", "backward"] +Tfftnorm = Literal["ortho", "none", "1/n"] +Tmrimask = Literal["vertical-reg", "vertical-uni", "radial-reg", "radial-uni"] +Tparallel_kind = Literal["multiproc", "multithread"] +Ttaper = Literal["hanning", "cosine", "cosine_square"] + +Tbackend = Literal["numpy", "cupy"] +Tirlskind = Literal["data", "model", "datamodel"] +Tmemunit = Literal["B", "KB", "MB", "GB"] +Tsolverengine = Literal["scipy", "pylops"] +Tthreshkind = Literal[ + "hard", + "soft", + "half", + "hard-percentile", + "soft-percentile", + "half-percentile", +] + +Tpwdsmoothing = Literal["triangle", "boxcar"] +Tsampler = Literal["gaussian", "rayleigh", "rademacher", "unitvector"] +Tsampler2 = Literal["gaussian", "rayleigh", "rademacher"] diff --git a/pylops/utils/utils.py b/pylops/utils/utils.py index 1f621c6f3..b198a054a 100644 --- a/pylops/utils/utils.py +++ b/pylops/utils/utils.py @@ -1,7 +1,6 @@ __all__ = ["Report"] # scooby is a soft dependency for pylops -from typing import Optional try: from scooby import Report as ScoobyReport @@ -67,7 +66,7 @@ class Report(ScoobyReport): def __init__( self, - add_pckg: Optional[list] = None, + add_pckg: list | None = None, ncol: int = 3, text_width: int = 80, sort: bool = False, diff --git a/pylops/utils/wavelets.py b/pylops/utils/wavelets.py index 6377ae7fd..e50bd3a3d 100644 --- a/pylops/utils/wavelets.py +++ b/pylops/utils/wavelets.py @@ -6,7 +6,7 @@ ] import warnings -from typing import Callable, Optional, Sequence, Tuple +from collections.abc import Callable, Sequence import numpy as np import numpy.typing as npt @@ -18,14 +18,14 @@ def _tcrop(t: npt.ArrayLike) -> npt.ArrayLike: """Crop time axis with even number of samples""" if len(t) % 2 == 0: t = t[:-1] - warnings.warn("One sample removed from time axis...") + warnings.warn("One sample removed from time axis...", stacklevel=2) return t def gaussian( t: npt.ArrayLike, std: float = 1.0, -) -> Tuple[npt.ArrayLike, npt.ArrayLike, int]: +) -> tuple[npt.ArrayLike, npt.ArrayLike, int]: r"""Gaussian wavelet Create a Gaussian wavelet given time axis ``t`` @@ -61,8 +61,8 @@ def gaussian( def klauder( t: npt.ArrayLike, f: Sequence[float] = (5.0, 20.0), - taper: Optional[Callable] = None, -) -> Tuple[npt.ArrayLike, npt.ArrayLike, int]: + taper: Callable | None = None, +) -> tuple[npt.ArrayLike, npt.ArrayLike, int]: r"""Klauder wavelet Create a Klauder wavelet given time axis ``t`` @@ -109,8 +109,8 @@ def klauder( def ormsby( t: npt.ArrayLike, f: Sequence[float] = (5.0, 10.0, 45.0, 50.0), - taper: Optional[Callable] = None, -) -> Tuple[npt.ArrayLike, npt.ArrayLike, int]: + taper: Callable | None = None, +) -> tuple[npt.ArrayLike, npt.ArrayLike, int]: r"""Ormsby wavelet Create a Ormsby wavelet given time axis ``t`` and frequency range @@ -167,8 +167,8 @@ def numerator(f, t): def ricker( t: npt.ArrayLike, f0: float = 10, - taper: Optional[Callable] = None, -) -> Tuple[npt.ArrayLike, npt.ArrayLike, int]: + taper: Callable | None = None, +) -> tuple[npt.ArrayLike, npt.ArrayLike, int]: r"""Ricker wavelet Create a Ricker wavelet given time axis ``t`` and central frequency ``f_0`` diff --git a/pylops/waveeqprocessing/blending.py b/pylops/waveeqprocessing/blending.py index ad96b7329..d9c171eae 100644 --- a/pylops/waveeqprocessing/blending.py +++ b/pylops/waveeqprocessing/blending.py @@ -4,7 +4,6 @@ "BlendingHalf", ] -from typing import Optional import numpy as np @@ -95,7 +94,7 @@ def __init__( dt: float, times: NDArray, shiftall: bool = False, - nttot: Optional[int] = None, + nttot: int | None = None, dtype: DTypeLike = "float64", name: str = "B", **kwargs_fft, @@ -326,7 +325,8 @@ def BlendingGroup( """ if times.shape[0] != group_size: - raise ValueError("The first dimension of times must equal group_size") + msg = f"The first dimension of times must equal group_size, got {times.shape[0]} / {group_size}" + raise ValueError(msg) Bop = [] for i in range(n_groups): Hop = [] @@ -428,7 +428,8 @@ def BlendingHalf( """ if times.shape[0] != group_size: - raise ValueError("The first dimension of times must equal group_size") + msg = f"The first dimension of times must equal group_size, got {times.shape[0]} / {group_size}" + raise ValueError(msg) Bop = [] for j in range(group_size): diff --git a/pylops/waveeqprocessing/kirchhoff.py b/pylops/waveeqprocessing/kirchhoff.py index f5cc74b91..11106520a 100644 --- a/pylops/waveeqprocessing/kirchhoff.py +++ b/pylops/waveeqprocessing/kirchhoff.py @@ -4,7 +4,7 @@ import logging import os import warnings -from typing import Optional, Tuple, Union +from typing import Literal import numpy as np @@ -15,7 +15,7 @@ from pylops.utils.backend import get_array_module from pylops.utils.decorators import reshaped from pylops.utils.tapers import taper -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tengine_nnc skfmm_message = deps.skfmm_import("the kirchhoff module") jit_message = deps.numba_import("the kirchhoff module") @@ -202,11 +202,10 @@ class Kirchhoff(LinearOperator): Raises ------ - NotImplementedError - If ``mode`` is neither ``analytic``, ``eikonal``, or ``byot``. - NotImplementedError If ``engine="cuda"`` and ``trav`` is provided as a single table + ValueError + If ``mode`` is neither ``analytic``, ``eikonal``, or ``byot``. Notes ----- @@ -314,16 +313,16 @@ def __init__( vel: NDArray, wav: NDArray, wavcenter: int, - y: Optional[NDArray] = None, - mode: str = "eikonal", + y: NDArray | None = None, + mode: Literal["analytic", "eikonal", "byot"] = "eikonal", wavfilter: bool = False, dynamic: bool = False, - trav: Optional[Union[NDArray, Tuple[NDArray, NDArray]]] = None, - amp: Optional[Union[NDArray, Tuple[NDArray, NDArray]]] = None, - aperture: Optional[Tuple[float, float]] = None, - angleaperture: Union[float, Tuple[float, float]] = 90.0, - snell: Optional[Tuple[float, float]] = None, - engine: str = "numpy", + trav: NDArray | tuple[NDArray, NDArray] | None = None, + amp: NDArray | tuple[NDArray, NDArray] | None = None, + aperture: tuple[float, float] | None = None, + angleaperture: float | tuple[float, float] = 90.0, + snell: tuple[float, float] | None = None, + engine: Tengine_nnc = "numpy", dtype: DTypeLike = "float64", name: str = "K", ) -> None: @@ -331,12 +330,13 @@ def __init__( "A new implementation of Kirchhoff is provided in v2.1.0. " "This currently affects only the inner working of the " "operator, end-users can continue using the operator in " - "the same way. Nevertheless, it is now recommended to provide" + "the same way. Nevertheless, it is now recommended to provide " "the variables trav (and amp) as a tuples containing the " "traveltime (and amplitude) tables for sources and receivers " "separately. This behaviour will eventually become default in " "version v3.0.0.", FutureWarning, + stacklevel=2, ) # identify geometry ( @@ -394,13 +394,15 @@ def __init__( epsdist = 1e-2 self.maxdist = epsdist * (np.max(dist_srcs) + np.max(dist_recs)) if self.ndims == 2: - self.amp_srcs, self.amp_recs = 1.0 / np.sqrt( - dist_srcs + self.maxdist - ), 1.0 / np.sqrt(dist_recs + self.maxdist) + self.amp_srcs, self.amp_recs = ( + 1.0 / np.sqrt(dist_srcs + self.maxdist), + 1.0 / np.sqrt(dist_recs + self.maxdist), + ) else: - self.amp_srcs, self.amp_recs = 1.0 / ( - dist_srcs + self.maxdist - ), 1.0 / (dist_recs + self.maxdist) + self.amp_srcs, self.amp_recs = ( + 1.0 / (dist_srcs + self.maxdist), + 1.0 / (dist_recs + self.maxdist), + ) else: if isinstance(trav, tuple): self.trav_srcs, self.trav_recs = trav @@ -409,17 +411,14 @@ def __init__( self.trav = trav if self.dynamic and not self.travsrcrec: - raise NotImplementedError( - "separate traveltime tables must be provided " - "when selecting mode=dynamic" - ) + msg = "separate traveltime tables for sources and receivers must be provided when selecting mode='dynamic'" + raise NotImplementedError(msg) if self.dynamic: if isinstance(amp, tuple): self.amp_srcs, self.amp_recs = amp else: - raise NotImplementedError( - "separate amplitude tables must be provided " - ) + msg = "amp must be provided as a tuple of source and receiver amplitude tables when selecting mode='dynamic'" + raise NotImplementedError(msg) if self.travsrcrec: # compute traveltime gradients at image points @@ -432,7 +431,8 @@ def __init__( axis=np.arange(self.ndims), ) else: - raise NotImplementedError("method must be analytic, eikonal or byot") + msg = f"mode must be either 'analytic', 'eikonal' or 'byot', got {mode}" + raise ValueError(msg) # compute angles with vertical if self.dynamic: @@ -453,15 +453,13 @@ def __init__( self.angle_srcs = ( np.sign(trav_srcs_grad[1]) * np.arccos( - trav_srcs_grad[-1] - / np.sqrt(np.sum(trav_srcs_grad**2, axis=0)) + trav_srcs_grad[-1] / np.sqrt(np.sum(trav_srcs_grad**2, axis=0)) ) ).reshape(np.prod(dims), ns) self.angle_recs = ( np.sign(trav_recs_grad[1]) * np.arccos( - trav_recs_grad[-1] - / np.sqrt(np.sum(trav_recs_grad**2, axis=0)) + trav_recs_grad[-1] / np.sqrt(np.sum(trav_recs_grad**2, axis=0)) ) ).reshape(np.prod(dims), nr) @@ -490,12 +488,14 @@ def __init__( if aperture is not None and self.ndims == 3: aperture = None warnings.warn( - "Aperture is forced to None as currently not implemented in 3D" + "Aperture is forced to None as currently not implemented in 3D", + stacklevel=2, ) if aperture is not None: warnings.warn( "Aperture is currently defined as ratio of offset over depth, " - "and may be not ideal for highly heterogeneous media" + "and may be not ideal for highly heterogeneous media", + stacklevel=2, ) self.aperture = ( (self.nx + 1,) if aperture is None else _value_or_sized_to_array(aperture) @@ -533,8 +533,8 @@ def _identify_geometry( x: NDArray, srcs: NDArray, recs: NDArray, - y: Optional[NDArray] = None, - ) -> Tuple[ + y: NDArray | None = None, + ) -> tuple[ int, int, NDArray, @@ -578,10 +578,10 @@ def _traveltime_table( x: NDArray, srcs: NDArray, recs: NDArray, - vel: Union[float, NDArray], - y: Optional[NDArray] = None, - mode: str = "eikonal", - ) -> Tuple[NDArray, NDArray, NDArray, NDArray, NDArray, NDArray]: + vel: float | NDArray, + y: NDArray | None = None, + mode: Literal["analytic", "eikonal"] = "eikonal", + ) -> tuple[NDArray, NDArray, NDArray, NDArray, NDArray, NDArray]: r"""Traveltime table Compute traveltimes along the source-subsurface-receivers triplet @@ -648,7 +648,8 @@ def _traveltime_table( # compute traveltimes if mode == "analytic": if not isinstance(vel, (float, int)): - raise ValueError("vel must be scalar for mode=analytical") + msg = "vel must be scalar for mode='analytic'" + raise ValueError(msg) # compute grid if ndims == 2: @@ -710,7 +711,8 @@ def _traveltime_table( else: raise NotImplementedError(skfmm_message) else: - raise NotImplementedError("method must be analytic or eikonal") + msg = f"mode must be either 'analytic' or 'eikonal', got {mode}" + raise ValueError(msg) # compute traveltime gradients at image points trav_srcs_grad = np.gradient( @@ -746,7 +748,8 @@ def _wavelet_reshaping( Wfilt = W * np.sqrt(1j * 2 * np.pi * f) elif (dimsrc == 2 or dimrec == 2) and dimv == 3: # 2.5D - raise NotImplementedError("2.D wavelet currently not available") + msg = "2.5D wavelet reshaping currently not implemented" + raise NotImplementedError(msg) elif dimsrc == 3 and dimrec == 3 and dimv == 3: # 3D Wfilt = W * (-1j * 2 * np.pi * f) @@ -1073,9 +1076,10 @@ def _ampsrcrec_kirch_rmatvec( ) return y - def _register_multiplications(self, engine: str) -> None: + def _register_multiplications(self, engine: Tengine_nnc) -> None: if engine not in ["numpy", "numba", "cuda"]: - raise KeyError("engine must be numpy or numba or cuda") + msg = f"engine must be numpy or numba or cuda, got {engine}" + raise ValueError(msg) if engine == "numba" and jit_message is None: numba_opts = dict( nopython=True, nogil=True, parallel=parallel @@ -1099,10 +1103,8 @@ def _register_multiplications(self, engine: str) -> None: self.ns, self.nr, self.nt, self.ni, False ) elif not self.travsrcrec: - raise NotImplementedError( - "engine='cuda' not implemented for traveltimes " - "provided in one table" - ) + msg = "`engine=cuda` not implemented for traveltimes provided in one table" + raise NotImplementedError(msg) self._kirch_matvec = self.cuda_helper._matvec_cuda self._kirch_rmatvec = self.cuda_helper._rmatvec_cuda else: diff --git a/pylops/waveeqprocessing/lsm.py b/pylops/waveeqprocessing/lsm.py index e9eac7e73..ac1945be9 100644 --- a/pylops/waveeqprocessing/lsm.py +++ b/pylops/waveeqprocessing/lsm.py @@ -1,6 +1,7 @@ __all__ = ["LSM"] -from typing import Callable, Optional +from collections.abc import Callable +from typing import Literal from scipy.sparse.linalg import lsqr @@ -103,8 +104,8 @@ def __init__( vel: NDArray, wav: NDArray, wavcenter: int, - y: Optional[NDArray] = None, - kind: str = "kirchhoff", + y: NDArray | None = None, + kind: Literal["kirchhoff", "twowayac"] = "kirchhoff", dottest: bool = False, **kwargs_mod, ) -> None: @@ -133,7 +134,8 @@ def __init__( ) else: - raise NotImplementedError("kind must be kirchhoff or twowayac") + msg = f"kind must be either 'kirchhoff' or 'twowayac', got {kind}" + raise ValueError(msg) if dottest: Dottest( diff --git a/pylops/waveeqprocessing/marchenko.py b/pylops/waveeqprocessing/marchenko.py index 775f3b899..5e7cdf680 100644 --- a/pylops/waveeqprocessing/marchenko.py +++ b/pylops/waveeqprocessing/marchenko.py @@ -1,7 +1,7 @@ __all__ = ["Marchenko"] import logging -from typing import Any, Dict, Optional, Tuple, Union +from typing import Any, Literal import numpy as np from scipy.signal import filtfilt @@ -12,7 +12,7 @@ from pylops.optimization.basic import cgls from pylops.utils import dottest as Dottest from pylops.utils.backend import get_array_module, get_module_name, to_cupy_conditional -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tfftengine_nsf from pylops.waveeqprocessing.mdd import MDC logger = logging.getLogger(__name__) @@ -23,9 +23,9 @@ def directwave( trav: NDArray, nt: int, dt: float, - nfft: Optional[int] = None, - dist: Optional[NDArray] = None, - kind: str = "2d", + nfft: int | None = None, + dist: NDArray | None = None, + kind: Literal["2d", "3d"] = "2d", derivative: bool = True, ) -> NDArray: r"""Analytical direct wave in acoustic media @@ -90,9 +90,9 @@ def directwave( nr = len(trav) nfft = nt if nfft is None or nfft < nt else nfft W = np.abs(np.fft.rfft(wav, nfft)) * dt - F: NDArray = 2 * np.pi * ncp.arange(nfft) / (dt * nfft) + F: NDArray = 2 * np.pi * ncp.arange(nfft // 2 + 1) / (dt * nfft) direct = ncp.zeros((nfft // 2 + 1, nr), dtype=np.complex128) - for iw, (w, f) in enumerate(zip(W, F)): + for iw, (w, f) in enumerate(zip(W, F, strict=True)): if kind == "2d": # direct[iw] = ( # w @@ -254,17 +254,17 @@ def __init__( self, R: NDArray, dt: float = 0.004, - nt: Optional[int] = None, + nt: int | None = None, dr: float = 1.0, - nfmax: Optional[int] = None, - wav: Optional[NDArray] = None, + nfmax: int | None = None, + wav: NDArray | None = None, toff: float = 0.0, nsmooth: int = 10, saveRt: bool = True, prescaled: bool = False, - fftengine: str = "numpy", + fftengine: Tfftengine_nsf = "numpy", dtype: DTypeLike = "float64", - kwargs_fft: Optional[Dict[str, Any]] = None, + kwargs_fft: dict[str, Any] | None = None, ) -> None: # Save inputs into class self.dt = dt @@ -286,7 +286,8 @@ def __init__( self.nfmax = nfmax else: if nt is None: - raise ValueError("nt must be provided as R is in frequency") + msg = "nt must be provided as R is in frequency" + raise ValueError(msg) self.ns, self.nr, self.nfmax = R.shape self.nt = nt @@ -306,7 +307,7 @@ def __init__( ) Rtwosided_fft = np.fft.rfft(Rtwosided, self.nt2, axis=-1) / np.sqrt( self.nt2 - ) + ).astype(dtype) self.Rtwosided_fft = Rtwosided_fft[..., :nfmax] else: self.Rtwosided_fft = R @@ -316,19 +317,19 @@ def __init__( def apply_onepoint( self, trav: NDArray, - G0: Optional[NDArray] = None, - nfft: Optional[int] = None, + G0: NDArray | None = None, + nfft: int | None = None, rtm: bool = False, greens: bool = False, dottest: bool = False, usematmul: bool = False, **kwargs_solver, - ) -> Union[ - Tuple[NDArray, NDArray, NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray], - ]: + ) -> ( + tuple[NDArray, NDArray, NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray] + ): r"""Marchenko redatuming for one point Solve the Marchenko redatuming inverse problem for a single point @@ -426,13 +427,12 @@ def apply_onepoint( shift=-1, dtype=self.dtype, ) - Wop = Diagonal(w.T.ravel()) - Iop = Identity(self.nr * self.nt2) + Wop = Diagonal(w.T.ravel(), dtype=self.dtype) + Iop = Identity(self.nr * self.nt2, dtype=self.dtype) Mop = Block( - [[Iop, -1 * Wop * Rop], [-1 * Wop * Rollop * R1op, Iop]] - ) * BlockDiag([Wop, Wop]) - Gop = Block([[Iop, -1 * Rop], [-1 * Rollop * R1op, Iop]]) - + [[Iop, -1 * Wop * Rop], [-1 * Wop * Rollop * R1op, Iop]], dtype=self.dtype + ) * BlockDiag([Wop, Wop], dtype=self.dtype) + Gop = Block([[Iop, -1 * Rop], [-1 * Rollop * R1op, Iop]], dtype=self.dtype) if dottest: Dottest( Gop, @@ -442,7 +442,6 @@ def apply_onepoint( verb=True, backend=get_module_name(self.ncp), ) - if dottest: Dottest( Mop, 2 * self.ns * self.nt2, @@ -456,16 +455,18 @@ def apply_onepoint( if G0 is None: if self.wav is not None and nfft is not None: G0 = ( - directwave( - self.wav, trav, self.nt, self.dt, nfft=nfft, derivative=True + ( + directwave( + self.wav, trav, self.nt, self.dt, nfft=nfft, derivative=True + ) ) - ).T + .astype(self.dtype) + .T + ) G0 = to_cupy_conditional(self.Rtwosided_fft, G0) else: - raise ValueError( - "wav and/or nfft are not provided. " - "Provide either G0 or wav and nfft..." - ) + msg = "wav and/or nfft are not provided. Provide either G0 or wav and nfft..." + raise ValueError(msg) fd_plus = np.concatenate( (np.fliplr(G0).T, self.ncp.zeros((self.nt - 1, self.nr), dtype=self.dtype)) ) @@ -521,19 +522,19 @@ def apply_onepoint( def apply_multiplepoints( self, trav: NDArray, - G0: Optional[NDArray] = None, - nfft: Optional[int] = None, + G0: NDArray | None = None, + nfft: int | None = None, rtm: bool = False, greens: bool = False, dottest: bool = False, usematmul: bool = False, **kwargs_solver, - ) -> Union[ - Tuple[NDArray, NDArray, NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray], - ]: + ) -> ( + tuple[NDArray, NDArray, NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray] + ): r"""Marchenko redatuming for multiple points Solve the Marchenko redatuming inverse problem for multiple @@ -635,12 +636,12 @@ def apply_multiplepoints( shift=-1, dtype=self.dtype, ) - Wop = Diagonal(w.transpose(2, 0, 1).ravel()) + Wop = Diagonal(w.transpose(2, 0, 1).ravel(), dtype=self.dtype) Iop = Identity(self.nr * nvs * self.nt2) Mop = Block( - [[Iop, -1 * Wop * Rop], [-1 * Wop * Rollop * R1op, Iop]] - ) * BlockDiag([Wop, Wop]) - Gop = Block([[Iop, -1 * Rop], [-1 * Rollop * R1op, Iop]]) + [[Iop, -1 * Wop * Rop], [-1 * Wop * Rollop * R1op, Iop]], dtype=self.dtype + ) * BlockDiag([Wop, Wop], dtype=self.dtype) + Gop = Block([[Iop, -1 * Rop], [-1 * Rollop * R1op, Iop]], dtype=self.dtype) if dottest: Dottest( @@ -651,7 +652,6 @@ def apply_multiplepoints( verb=True, backend=get_module_name(self.ncp), ) - if dottest: Dottest( Mop, 2 * self.ns * nvs * self.nt2, @@ -667,21 +667,23 @@ def apply_multiplepoints( G0 = np.zeros((self.nr, nvs, self.nt), dtype=self.dtype) for ivs in range(nvs): G0[:, ivs] = ( - directwave( - self.wav, - trav[:, ivs], - self.nt, - self.dt, - nfft=nfft, - derivative=True, + ( + directwave( + self.wav, + trav[:, ivs], + self.nt, + self.dt, + nfft=nfft, + derivative=True, + ) ) - ).T + .astype(self.dtype) + .T + ) G0 = to_cupy_conditional(self.Rtwosided_fft, G0) else: - raise ValueError( - "wav and/or nfft are not provided. " - "Provide either G0 or wav and nfft..." - ) + msg = "wav and/or nfft are not provided. Provide either G0 or wav and nfft..." + raise ValueError(msg) fd_plus = np.concatenate( ( np.flip(G0, axis=-1).transpose(2, 0, 1), diff --git a/pylops/waveeqprocessing/mdd.py b/pylops/waveeqprocessing/mdd.py index 3a8541a0d..0540960fd 100644 --- a/pylops/waveeqprocessing/mdd.py +++ b/pylops/waveeqprocessing/mdd.py @@ -4,7 +4,6 @@ ] import logging -from typing import Optional, Tuple, Union import numpy as np from scipy.signal import filtfilt @@ -21,7 +20,7 @@ get_module_name, to_cupy_conditional, ) -from pylops.utils.typing import NDArray +from pylops.utils.typing import NDArray, Tfftengine_nsf logger = logging.getLogger(__name__) @@ -40,11 +39,11 @@ def _MDC( _Transpose=Transpose, _FFT=FFT, _Fredholm1=Fredholm1, - args_Identity: Optional[dict] = None, - args_FFT: Optional[dict] = None, - args_Identity1: Optional[dict] = None, - args_FFT1: Optional[dict] = None, - args_Fredholm1: Optional[dict] = None, + args_Identity: dict | None = None, + args_FFT: dict | None = None, + args_Identity1: dict | None = None, + args_FFT1: dict | None = None, + args_Fredholm1: dict | None = None, ) -> LinearOperator: r"""Multi-dimensional convolution. @@ -67,7 +66,8 @@ def _MDC( args_Fredholm1 = {} if twosided and nt % 2 == 0: - raise ValueError("nt must be odd number") + msg = f"nt must be a odd number when twosided=True, got nt={nt}" + raise ValueError(msg) # find out dtype of G dtype = G[0, 0, 0].dtype @@ -134,7 +134,7 @@ def MDC( dt: float = 1.0, dr: float = 1.0, twosided: bool = True, - fftengine: str = "numpy", + fftengine: Tfftengine_nsf = "numpy", saveGt: bool = True, conj: bool = False, usematmul: bool = False, @@ -266,8 +266,8 @@ def MDD( d: NDArray, dt: float = 0.004, dr: float = 1.0, - nfmax: Optional[int] = None, - wav: Optional[NDArray] = None, + nfmax: int | None = None, + wav: NDArray | None = None, twosided: bool = True, causality_precond: bool = False, adjoint: bool = False, @@ -276,13 +276,13 @@ def MDD( saveGt: bool = True, add_negative: bool = True, smooth_precond: int = 0, - fftengine: str = "numpy", + fftengine: Tfftengine_nsf = "numpy", **kwargs_solver, -) -> Union[ - Tuple[NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray], - Tuple[NDArray, NDArray, NDArray, NDArray], -]: +) -> ( + tuple[NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray] + | tuple[NDArray, NDArray, NDArray, NDArray] +): r"""Multi-dimensional deconvolution. Solve multi-dimensional deconvolution problem using diff --git a/pylops/waveeqprocessing/oneway.py b/pylops/waveeqprocessing/oneway.py index de119846d..f3622e03e 100644 --- a/pylops/waveeqprocessing/oneway.py +++ b/pylops/waveeqprocessing/oneway.py @@ -3,7 +3,7 @@ "Deghosting", ] -from typing import Callable, Optional, Sequence, Tuple, Union +from collections.abc import Callable, Sequence import numpy as np from scipy.sparse.linalg import lsqr @@ -13,7 +13,7 @@ from pylops.utils import dottest as Dottest from pylops.utils.backend import to_cupy_conditional from pylops.utils.tapers import taper2d, taper3d -from pylops.utils.typing import DTypeLike, NDArray +from pylops.utils.typing import DTypeLike, NDArray, Tfftengine_nsf class _PhaseShift(LinearOperator): @@ -31,7 +31,7 @@ def __init__( dz: float, freq: NDArray, kx: NDArray, - ky: Optional[Union[int, NDArray]] = None, + ky: int | NDArray | None = None, dtype: str = "complex64", ) -> None: self.vel = vel @@ -77,10 +77,10 @@ def PhaseShift( nt: int, freq: NDArray, kx: NDArray, - ky: Optional[NDArray] = None, + ky: NDArray | None = None, dtype: DTypeLike = "float64", name: str = "P", - fftengine: str = "numpy", + fftengine: Tfftengine_nsf = "numpy", **kwargs_fft, ) -> LinearOperator: r"""Phase shift operator @@ -162,8 +162,8 @@ def PhaseShift( """ dtypefft = (np.ones(1, dtype=dtype) + 1j * np.ones(1, dtype=dtype)).dtype - dims: Union[Tuple[int, int], Tuple[int, int, int]] - dimsfft: Union[Tuple[int, int], Tuple[int, int, int]] + dims: tuple[int, int] | tuple[int, int, int] + dimsfft: tuple[int, int] | tuple[int, int, int] if ky is None: dims = (nt, kx.size) dimsfft = (freq.size, kx.size) @@ -202,23 +202,23 @@ def PhaseShift( def Deghosting( p: NDArray, nt: int, - nr: Union[int, Tuple[int, int]], + nr: int | tuple[int, int], dt: float, dr: Sequence[float], vel: float, zrec: float, - kind: Optional[str] = "p", - pd: Optional[NDArray] = None, - win: Optional[NDArray] = None, - npad: Union[Tuple[int], Tuple[int, int]] = (11, 11), - ntaper: Tuple[int, int] = (11, 11), - restriction: Optional[LinearOperator] = None, - sptransf: Optional[LinearOperator] = None, + kind: str | None = "p", + pd: NDArray | None = None, + win: NDArray | None = None, + npad: tuple[int] | tuple[int, int] = (11, 11), + ntaper: tuple[int, int] = (11, 11), + restriction: LinearOperator | None = None, + sptransf: LinearOperator | None = None, solver: Callable = lsqr, dottest: bool = False, dtype: DTypeLike = "complex128", **kwargs_solver, -) -> Tuple[NDArray, NDArray]: +) -> tuple[NDArray, NDArray]: r"""Wavefield deghosting. Apply seismic wavefield decomposition from single-component (pressure or @@ -323,7 +323,8 @@ def Deghosting( """ # Check kind if kind not in ["p", "vz"]: - raise ValueError("kind must be p or vz") + msg = f"kind must be either 'p' or 'vz', got {kind}" + raise ValueError(msg) # Identify dimensions ndims = p.ndim diff --git a/pylops/waveeqprocessing/seismicinterpolation.py b/pylops/waveeqprocessing/seismicinterpolation.py index ece896e3e..e46991d5f 100644 --- a/pylops/waveeqprocessing/seismicinterpolation.py +++ b/pylops/waveeqprocessing/seismicinterpolation.py @@ -1,6 +1,7 @@ __all__ = ["SeismicInterpolation"] -from typing import List, Optional, Sequence, Tuple, Union +from collections.abc import Sequence +from typing import Literal import numpy as np @@ -19,30 +20,39 @@ Sliding3D, ) from pylops.utils.dottest import dottest as Dottest -from pylops.utils.typing import InputDimsLike, NDArray +from pylops.utils.typing import InputDimsLike, NDArray, Tengine_nn def SeismicInterpolation( data: NDArray, - nrec: Union[int, Tuple[int, int]], - iava: Union[List[Union[int, float]], NDArray], - iava1: Optional[Union[List[Union[int, float]], NDArray]] = None, - kind: str = "fk", - nffts: Optional[Union[int, InputDimsLike]] = None, - sampling: Optional[Sequence[float]] = None, - spataxis: Optional[NDArray] = None, - spat1axis: Optional[NDArray] = None, - taxis: Optional[NDArray] = None, - paxis: Optional[NDArray] = None, - p1axis: Optional[NDArray] = None, + nrec: int | tuple[int, int], + iava: list[int | float] | NDArray, + iava1: list[int | float] | NDArray | None = None, + kind: Literal[ + "fk", + "spatial", + "radon-linear", + "radon-parabolic", + "radon-hyperbolic", + "chirpradon-linear", + "sliding", + "chirp-sliding", + ] = "fk", + nffts: int | InputDimsLike | None = None, + sampling: Sequence[float] | None = None, + spataxis: NDArray | None = None, + spat1axis: NDArray | None = None, + taxis: NDArray | None = None, + paxis: NDArray | None = None, + p1axis: NDArray | None = None, centeredh: bool = True, nwins: InputDimsLike = None, nwin: InputDimsLike = None, nover: InputDimsLike = None, - engine: str = "numba", + engine: Tengine_nn | Literal["fftw"] = "numba", dottest: bool = False, **kwargs_solver, -) -> Tuple[NDArray, NDArray, NDArray]: +) -> tuple[NDArray, NDArray, NDArray]: r"""Seismic interpolation (or regularization). Interpolate seismic data from irregular to regular spatial grid. @@ -202,7 +212,8 @@ def SeismicInterpolation( dtype = data.dtype ndims = data.ndim if ndims == 1 or ndims > 3: - raise ValueError("data must have 2 or 3 dimensions") + msg = f"data must have 2 or 3 dimensions, got {ndims}" + raise ValueError(msg) if ndims == 2: dimsd = data.shape dims = (nrec, dimsd[1]) @@ -248,10 +259,8 @@ def SeismicInterpolation( if ndims == 3: if sampling is None: if spataxis is None or spat1axis is None or taxis is None: - raise ValueError( - "Provide either sampling or spataxis, " - f"spat1axis and taxis for kind=%{kind}" - ) + msg = f"Provide either sampling or spataxis, spat1axis and taxis for kind={kind}" + raise ValueError(msg) else: sampling = (dspat, dspat1, dt) Pop = FFTND(dims=dims, nffts=nffts, sampling=sampling) @@ -259,10 +268,10 @@ def SeismicInterpolation( else: if sampling is None: if spataxis is None or taxis is None: - raise ValueError( - "Provide either sampling or spataxis, " - f"and taxis for kind={kind}" + msg = ( + f"Provide either sampling or spataxis and taxis for kind={kind}" ) + raise ValueError(msg) else: sampling = (dspat, dt) Pop = FFT2D(dims=dims, nffts=nffts, sampling=sampling) @@ -372,10 +381,11 @@ def SeismicInterpolation( Pop = Sliding2D(Op, dimsp, dimsslid, nwin, nover, tapertype="cosine") SIop = Rop * Pop else: - raise KeyError( - "kind must be spatial, fk, radon-linear, " - "radon-parabolic, radon-hyperbolic, sliding or chirp-sliding" + msg = ( + "kind must be either 'spatial', 'fk', 'radon-linear', 'chirpradon-linear', " + "radon-parabolic', 'radon-hyperbolic', 'sliding', or 'chirp-sliding', got {kind}" ) + raise KeyError(msg) # dot-test if dottest: diff --git a/pylops/waveeqprocessing/twoway.py b/pylops/waveeqprocessing/twoway.py index bb45901c2..80ce658ab 100644 --- a/pylops/waveeqprocessing/twoway.py +++ b/pylops/waveeqprocessing/twoway.py @@ -1,6 +1,6 @@ __all__ = ["AcousticWave2D"] -from typing import Any, NewType, Tuple +from typing import Any, NewType import numpy as np @@ -242,7 +242,7 @@ def updatesrc(self, wav): def _srcillumination_oneshot( self, solver: AcousticWaveSolverType, isrc: int - ) -> Tuple[NDArray, NDArray]: + ) -> tuple[NDArray, NDArray]: """Source wavefield and illumination for one shot Parameters diff --git a/pylops/waveeqprocessing/wavedecomposition.py b/pylops/waveeqprocessing/wavedecomposition.py index 7b7e9dd8e..9ddb28cc5 100644 --- a/pylops/waveeqprocessing/wavedecomposition.py +++ b/pylops/waveeqprocessing/wavedecomposition.py @@ -5,7 +5,8 @@ "WavefieldDecomposition", ] -from typing import Callable, Optional, Sequence, Tuple, Union +from collections.abc import Callable, Sequence +from typing import Literal import numpy as np from scipy.signal import filtfilt @@ -15,7 +16,13 @@ from pylops.signalprocessing import FFT2D, FFTND from pylops.utils import dottest as Dottest from pylops.utils.backend import get_array_module, get_module, get_module_name -from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray +from pylops.utils.typing import ( + DTypeLike, + InputDimsLike, + NDArray, + Tfftengine_ncj, + Tfftengine_ns, +) def _filter_obliquity( @@ -74,9 +81,9 @@ def _obliquity2D( critical: float = 100.0, ntaper: int = 10, composition: bool = True, - backend: str = "numpy", + backend: Tfftengine_ncj = "numpy", dtype: DTypeLike = "complex128", -) -> Tuple[LinearOperator, LinearOperator]: +) -> tuple[LinearOperator, LinearOperator]: r"""2D Obliquity operator and FFT operator Parameters @@ -144,19 +151,19 @@ def _obliquity2D( def _obliquity3D( nt: int, - nr: Union[int, Sequence[int]], + nr: int | Sequence[int], dt: float, - dr: Union[float, Sequence[float]], + dr: float | Sequence[float], rho: float, vel: float, nffts: InputDimsLike, critical: float = 100.0, ntaper: int = 10, composition: bool = True, - fftengine: str = "scipy", - backend: str = "numpy", + fftengine: Tfftengine_ns = "scipy", + backend: Tfftengine_ncj = "numpy", dtype: DTypeLike = "complex128", -) -> Tuple[LinearOperator, LinearOperator]: +) -> tuple[LinearOperator, LinearOperator]: r"""3D Obliquity operator and FFT operator Parameters @@ -237,11 +244,11 @@ def PressureToVelocity( dr: float, rho: float, vel: float, - nffts: Union[InputDimsLike, Tuple[None, None, None]] = (None, None, None), + nffts: InputDimsLike | tuple[None, None, None] = (None, None, None), critical: float = 100.0, ntaper: int = 10, topressure: bool = False, - backend: str = "numpy", + backend: Tfftengine_ncj = "numpy", dtype: DTypeLike = "complex128", name: str = "P", ) -> LinearOperator: @@ -376,11 +383,11 @@ def UpDownComposition2D( dr: float, rho: float, vel: float, - nffts: Union[InputDimsLike, Tuple[None, None]] = (None, None), + nffts: InputDimsLike | tuple[None, None] = (None, None), critical: float = 100.0, ntaper: int = 10, scaling: float = 1.0, - backend: str = "numpy", + backend: Tfftengine_ncj = "numpy", dtype: DTypeLike = "complex128", name: str = "U", ) -> LinearOperator: @@ -508,7 +515,10 @@ def UpDownComposition2D( ) # create obliquity operator - FFTop, OBLop, = _obliquity2D( + ( + FFTop, + OBLop, + ) = _obliquity2D( nt, nr, dt, @@ -548,12 +558,12 @@ def UpDownComposition3D( dr: float, rho: float, vel: float, - nffts: Union[InputDimsLike, Tuple[None, None, None]] = (None, None, None), + nffts: InputDimsLike | tuple[None, None, None] = (None, None, None), critical: float = 100.0, ntaper: int = 10, scaling: float = 1.0, - fftengine: str = "scipy", - backend: str = "numpy", + fftengine: Tfftengine_ns = "scipy", + backend: Tfftengine_ncj = "numpy", dtype: DTypeLike = "complex128", name: str = "U", ) -> LinearOperator: @@ -676,23 +686,23 @@ def WavefieldDecomposition( p: NDArray, vz: NDArray, nt: int, - nr: Union[int, InputDimsLike], + nr: int | InputDimsLike, dt: float, dr: float, rho: float, vel: float, - nffts: Union[InputDimsLike, Tuple[None, None, None]] = (None, None, None), + nffts: InputDimsLike | tuple[None, None, None] = (None, None, None), critical: float = 100.0, ntaper: int = 10, scaling: float = 1.0, - kind: str = "inverse", - restriction: Optional[LinearOperator] = None, - sptransf: Optional[LinearOperator] = None, + kind: Literal["inverse", "analytical"] = "inverse", + restriction: LinearOperator | None = None, + sptransf: LinearOperator | None = None, solver: Callable = lsqr, dottest: bool = False, dtype: DTypeLike = "complex128", - **kwargs_solver -) -> Tuple[NDArray, NDArray]: + **kwargs_solver, +) -> tuple[NDArray, NDArray]: r"""Up-down wavefield decomposition. Apply seismic wavefield decomposition from multi-component (pressure @@ -894,6 +904,7 @@ def WavefieldDecomposition( dud = dud.reshape(dims2) pdown, pup = dud[:nr2], dud[nr2:] else: - raise KeyError("kind must be analytical or inverse") + msg = f"kind must be either 'analytical' or 'inverse', got {kind}" + raise KeyError(msg) return pup, pdown diff --git a/pyproject.toml b/pyproject.toml index e1592a357..26441ff7e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,9 @@ [build-system] requires = [ - "setuptools >= 65", - "setuptools_scm[toml]", - "wheel", + "hatchling", + "hatch-vcs" ] -build-backend = "setuptools.build_meta" +build-backend = "hatchling.build" [project] name = "pylops" @@ -29,6 +28,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Mathematics", ] +requires-python = ">=3.10" dependencies = [ "numpy >= 1.21.0", "scipy >= 1.11.0", @@ -44,11 +44,169 @@ advanced = [ "scikit-fmm", "spgl1", "dtcwt", - "astra-toolbox", + "astra-toolbox; sys_platform == 'linux'", + "devito" ] +gpu-cu12 = ["cupy-cuda12x"] +gpu-cu13 = ["cupy-cuda13x"] +stat = ["pytensor", "pymc"] +deep = ["torch", "jax"] +deep-cu126 = ["torch<2.11.0", "jax[cuda12]"] +deep-cu128 = ["torch<2.11.0", "jax[cuda12]"] +deep-cu13 = ["torch>=2.11.0", "jax[cuda13]"] -[tool.setuptools.packages.find] -exclude = ["pytests"] +[dependency-groups] +dev = [ + "pytest", + "pre-commit", + "autopep8", + "ruff", + "mypy", + "coverage" +] +doc = [ + "matplotlib", + "pooch", + "sphinx", + "sphinx-design", + "sphinx-gallery", + "sphinx-iconify", + "shibuya", + "sphinxemoji", + "numpydoc", + "nbsphinx", + "image", +] + +[project.urls] +Homepage = "https://github.com/PyLops/pylops" +Documentation = "https://pylops.readthedocs.io/en/stable" +Discussions = "https://github.com/PyLops/pylops/discussions" +Issues = "https://github.com/PyLops/pylops/issues" + +[tool.hatch] +version.source = "vcs" + +[tool.hatch.build] +exclude = [ + ".*", + "docs", + "examples", + "pytests", + "testdata", + "tutorials", +] + +[tool.hatch.build.hooks.vcs] +version-file = "pylops/version.py" + +[tool.hatch.build.targets.wheel] +packages = ["pylops"] + +[tool.hatch.build.targets.sdist] +exclude = [".github"] + +[tool.uv] +conflicts = [ + [ + { extra = "gpu-cu12" }, + { extra = "gpu-cu13" }, + ], + [ + { extra = "deep" }, + { extra = "deep-cu126" }, + { extra = "deep-cu128" }, + { extra = "deep-cu13" }, + ], +] + +[tool.uv.sources] +torch = [ + { index = "pytorch-cpu", extra = "deep" }, + { index = "pytorch-cu126", extra = "deep-cu126" }, + { index = "pytorch-cu128", extra = "deep-cu128" }, +] + +[[tool.uv.index]] +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu126" +url = "https://download.pytorch.org/whl/cu126" +explicit = true + +[[tool.uv.index]] +name = "pytorch-cu128" +url = "https://download.pytorch.org/whl/cu128" +explicit = true + +[tool.pytest.ini_options] +addopts = "--verbose" +python_files = ["pytests/*.py"] + +[tool.ruff] +src = ["pylops"] +exclude = ["pylops/version.py", ] +line-length = 88 +target-version = "py310" + +[tool.ruff.lint] +select = [ + "E", # pycodestyle errors + "F", # pyflakes + "W", # pycodestyle warnings + "B", # flake8-bugbear + "EM", # flake8-errmsg + "UP", # pyupgrade + "I" # isort +] +ignore = [ + "E501", # line too long (for comments and strings) + "UP031", # use of old '%' formatting instead of f-strings +] + +[tool.ruff.lint.per-file-ignores] +"__init__.py" = [ + "F401", # imported but unused (re-exports) + "F403", # star import used for public API + "F405", # name may be undefined from star import + "I001", # allow usorted imports +] +"tutorials/*.py" = [ + "E731", # do not assign a lambda expression, use def +] +"pylops/linearoperator.py" = [ + "E402", # allow module level import not at top of file +] +"pylops/basicoperators/blockdiag.py" = [ + "E402", # allow module level import not at top of file +] +"pylops/basicoperators/hstack.py" = [ + "E402", # allow module level import not at top of file +] +"pylops/basicoperators/vstack.py" = [ + "E402", # allow module level import not at top of file +] + +[tool.ruff.lint.isort] +known-first-party = ["pylops"] + +[tool.mypy] +files = ["pylops", ] +python_version = "3.11" +mypy_path = "pylops" +strict = true +enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] +disable_error_code = ["untyped-decorator"] +allow_redefinition = true +disallow_untyped_defs = true +disallow_incomplete_defs = true +warn_unreachable = false -[tool.setuptools_scm] -version_file = "pylops/version.py" +[[tool.mypy.overrides]] +module = ["cupy.*", "devito.*", "examples.*", # devito-examples + "numpy.*", "numba.*", "pyfftw.*", "pywt.*", "scipy.*", + "scooby.*", "skfmm.*", "spgl1.*", "IPython.*"] +ignore_missing_imports = true diff --git a/pytests/test_avo.py b/pytests/test_avo.py index ab526d507..d240d6798 100644 --- a/pytests/test_avo.py +++ b/pytests/test_avo.py @@ -141,24 +141,39 @@ def test_zoeppritz_and_approx_multipleangles(): @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_AVOLinearModelling(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_AVOLinearModelling(par, dtype): """Dot-test and inversion for AVOLinearModelling""" AVOop = AVOLinearModelling( - np.asarray(theta), - vsvp=par["vsvp"] if isinstance(par["vsvp"], float) else np.asarray(par["vsvp"]), + np.asarray(theta).astype(dtype), + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else np.asarray(par["vsvp"]).astype(dtype), nt0=nt0, linearization=par["linearization"], + dtype=dtype, + ) + assert dottest( + AVOop, + ntheta * nt0, + 3 * nt0, + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(AVOop, ntheta * nt0, 3 * nt0, backend=backend) + d = AVOop * np.asarray(m).astype(dtype) + madj = AVOop.H * d minv = lsqr( AVOop, - AVOop * np.asarray(m), - x0=np.zeros_like(m), + d, + x0=np.zeros_like(m).astype(dtype), damp=1e-20, niter=1000, atol=1e-8, btol=1e-8, show=0, )[0] + + assert d.dtype == dtype + assert madj.dtype == dtype assert_array_almost_equal(m, minv, decimal=3) diff --git a/pytests/test_basicoperators.py b/pytests/test_basicoperators.py index e7260bea7..a3a9de03d 100644 --- a/pytests/test_basicoperators.py +++ b/pytests/test_basicoperators.py @@ -35,6 +35,13 @@ par1 = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float64"} # square real par2 = {"ny": 21, "nx": 11, "imag": 0, "dtype": "float64"} # overdetermined real +par1s = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float32"} # square real (fp32) +par2s = { + "ny": 21, + "nx": 11, + "imag": 0, + "dtype": "float32", +} # overdetermined real (fp32) par1j = {"ny": 11, "nx": 11, "imag": 1j, "dtype": "complex128"} # square complex par2j = { "ny": 21, @@ -43,20 +50,41 @@ "dtype": "complex128", } # overdetermined complex par3 = {"ny": 11, "nx": 21, "imag": 0, "dtype": "float64"} # underdetermined real +par3s = { + "ny": 11, + "nx": 21, + "imag": 0, + "dtype": "float64", +} # underdetermined real (fp32) np.random.seed(10) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s)]) def test_Regression(par): """Dot-test, inversion and apply for Regression operator""" np.random.seed(10) + order = 4 - t = np.arange(par["ny"], dtype=np.float64) + t = np.arange(par["ny"], dtype=par["dtype"]) LRop = Regression(t, order=order, dtype=par["dtype"]) - assert dottest(LRop, par["ny"], order + 1, backend=backend) + assert dottest( + LRop, + par["ny"], + order + 1, + rtol=1e-4 if par["dtype"] == np.float32 else 1e-6, + backend=backend, + ) + + x = np.array([1.0, 2.0, 0.0, 3.0, -1.0], dtype=par["dtype"]) + + # forward vs apply method + y = LRop * x + y1 = LRop.apply(t, x) + assert y.dtype == par["dtype"] + assert_array_almost_equal(y, y1, decimal=3) - x = np.array([1.0, 2.0, 0.0, 3.0, -1.0], dtype=np.float64) + # inversion xlsqr = lsqr( LRop, LRop * x, @@ -70,20 +98,31 @@ def test_Regression(par): )[0] assert_array_almost_equal(x, xlsqr, decimal=3) - y = LRop * x - y1 = LRop.apply(t, x) - assert_array_almost_equal(y, y1, decimal=3) - -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s)]) def test_LinearRegression(par): """Dot-test and inversion for LinearRegression operator""" np.random.seed(10) - t = np.arange(par["ny"], dtype=np.float32) + + t = np.arange(par["ny"], dtype=par["dtype"]) LRop = LinearRegression(t, dtype=par["dtype"]) - assert dottest(LRop, par["ny"], 2, backend=backend) + assert dottest( + LRop, + par["ny"], + 2, + rtol=1e-4 if par["dtype"] == np.float32 else 1e-6, + backend=backend, + ) + + x = np.array([1.0, 2.0], dtype=par["dtype"]) + + # forward vs apply method + y = LRop * x + y1 = LRop.apply(t, x) + assert y.dtype == par["dtype"] + assert_array_almost_equal(y, y1, decimal=3) - x = np.array([1.0, 2.0], dtype=np.float64) + # inversion xlsqr = lsqr( LRop, LRop * x, @@ -97,31 +136,31 @@ def test_LinearRegression(par): )[0] assert_array_almost_equal(x, xlsqr, decimal=3) - y = LRop * x - y1 = LRop.apply(t, x) - assert_array_almost_equal(y, y1, decimal=3) - -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_MatrixMult(par): """Dot-test and inversion for MatrixMult operator""" np.random.seed(10) - G = np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") + par[ + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ "imag" - ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) Gop = MatrixMult(G, dtype=par["dtype"]) assert dottest( Gop, par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) + y = Gop * x xlsqr = lsqr( Gop, - Gop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=300, @@ -129,18 +168,21 @@ def test_MatrixMult(par): btol=1e-8, show=0, )[0] + assert y.dtype == par["dtype"] assert_array_almost_equal(x, xlsqr, decimal=4) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_MatrixMult_sparse(par): """Dot-test and inversion for MatrixMult operator using sparse matrix """ np.random.seed(10) - G = rand(par["ny"], par["nx"], density=0.75).astype("float32") + par["imag"] * rand( + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G = rand(par["ny"], par["nx"], density=0.75).astype(dtype) + par["imag"] * rand( par["ny"], par["nx"], density=0.75 - ).astype("float32") + ).astype(dtype) Gop = MatrixMult(G, dtype=par["dtype"]) assert dottest( @@ -148,13 +190,15 @@ def test_MatrixMult_sparse(par): par["ny"], par["nx"], complexflag=0 if par["imag"] == 1 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) + y = Gop * x xlsqr = lsqr( Gop, - Gop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=300, @@ -162,6 +206,7 @@ def test_MatrixMult_sparse(par): btol=1e-8, show=0, )[0] + assert y.dtype == par["dtype"] assert_array_almost_equal(x, xlsqr, decimal=4) @@ -179,28 +224,35 @@ def test_MatrixMult_complexcast(par): assert Gop.dtype == "complex64" -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_MatrixMult_repeated(par): """Dot-test and inversion for test_MatrixMult operator repeated along another dimension """ np.random.seed(10) - G = np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") + par[ + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ "imag" - ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) Gop = MatrixMult(G, otherdims=5, dtype=par["dtype"]) assert dottest( Gop, par["ny"] * 5, par["nx"] * 5, complexflag=0 if par["imag"] == 1 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = (np.ones((par["nx"], 5)) + par["imag"] * np.ones((par["nx"], 5))).ravel() + x = ( + np.ones((par["nx"], 5), dtype=dtype) + + par["imag"] * np.ones((par["nx"], 5), dtype=dtype) + ).ravel() + y = Gop * x xlsqr = lsqr( Gop, - Gop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=300, @@ -208,26 +260,34 @@ def test_MatrixMult_repeated(par): btol=1e-8, show=0, )[0] + assert y.dtype == par["dtype"] assert_array_almost_equal(x, xlsqr, decimal=4) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Identity_inplace(par): """Dot-test, forward and adjoint for Identity operator""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + Iop = Identity(par["ny"], par["nx"], dtype=par["dtype"], inplace=True) assert dottest( Iop, par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) y = Iop * x x1 = Iop.H * y + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal( x[: min(par["ny"], par["nx"])], y[: min(par["ny"], par["nx"])], decimal=4 ) @@ -236,23 +296,30 @@ def test_Identity_inplace(par): ) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Identity_noinplace(par): """Dot-test, forward and adjoint for Identity operator (not in place)""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + Iop = Identity(par["ny"], par["nx"], dtype=par["dtype"], inplace=False) assert dottest( Iop, par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) y = Iop * x x1 = Iop.H * y + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal( x[: min(par["ny"], par["nx"])], y[: min(par["ny"], par["nx"])], decimal=4 ) @@ -265,46 +332,80 @@ def test_Identity_noinplace(par): assert x[0] != y[0] -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Zero(par): """Dot-test, forward and adjoint for Zero operator""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + Zop = Zero(par["ny"], par["nx"], dtype=par["dtype"]) - assert dottest(Zop, par["ny"], par["nx"], backend=backend) + assert dottest( + Zop, + par["ny"], + par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) y = Zop * x x1 = Zop.H * y + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, np.zeros(par["ny"])) assert_array_almost_equal(x1, np.zeros(par["nx"])) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Flip1D(par): """Dot-test, forward and adjoint for Flip operator on 1d signal""" np.random.seed(10) - x = np.arange(par["ny"]) + par["imag"] * np.arange(par["ny"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + x = np.arange(par["ny"], dtype=dtype) + par["imag"] * np.arange( + par["ny"], dtype=dtype + ) Fop = Flip(par["ny"], dtype=par["dtype"]) - assert dottest(Fop, par["ny"], par["ny"], backend=backend) + assert dottest( + Fop, + par["ny"], + par["ny"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) y = Fop * x xadj = Fop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x, xadj) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Flip2D(par): """Dot-test, forward and adjoint for Flip operator on 2d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"])) + par[ - "imag" - ] * np.outer(np.arange(par["ny"]), np.ones(par["nx"])) - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + par[ - "imag" - ] * np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) for axis in [0, 1]: Fop = Flip( @@ -313,48 +414,46 @@ def test_Flip2D(par): dtype=par["dtype"], ) assert dottest( - Fop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Fop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) y = Fop * x[str(axis)].ravel() xadj = Fop.H * y.ravel() xadj = xadj.reshape(par["ny"], par["nx"]) + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x[str(axis)], xadj) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Flip3D(par): """Dot-test, forward and adjoint for Flip operator on 3d signal""" np.random.seed(10) - x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.arange(par["ny"]), np.ones(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.arange(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) - x["2"] = np.outer(np.ones(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.arange(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.ones(par["nx"]) - )[ + x = {} + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + x["2"] = np.outer(np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype))[ :, :, np.newaxis - ] * np.arange( - par["nx"] - ) + ] * np.arange(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.arange(par["nx"], dtype=dtype) for axis in [0, 1, 2]: Fop = Flip( @@ -366,40 +465,64 @@ def test_Flip3D(par): Fop, par["ny"] * par["nx"] * par["nx"], par["ny"] * par["nx"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) y = Fop * x[str(axis)].ravel() xadj = Fop.H * y.ravel() xadj = xadj.reshape(par["ny"], par["nx"], par["nx"]) + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x[str(axis)], xadj) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Symmetrize1D(par): """Dot-test, forward and inverse for Symmetrize operator on 1d signal""" np.random.seed(10) - x = np.arange(par["ny"]) + par["imag"] * np.arange(par["ny"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + x = np.arange(par["ny"], dtype=dtype) + par["imag"] * np.arange( + par["ny"], dtype=dtype + ) Sop = Symmetrize(par["ny"], dtype=par["dtype"]) - dottest(Sop, par["ny"] * 2 - 1, par["ny"], verb=True, backend=backend) + dottest( + Sop, + par["ny"] * 2 - 1, + par["ny"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) y = Sop * x xinv = Sop / y + assert y.dtype == par["dtype"] assert_array_almost_equal(x, xinv, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Symmetrize2D(par): """Dot-test, forward and inverse for Symmetrize operator on 2d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"])) + par[ - "imag" - ] * np.outer(np.arange(par["ny"]), np.ones(par["nx"])) - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + par[ - "imag" - ] * np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) for axis in [0, 1]: Sop = Symmetrize( @@ -408,45 +531,44 @@ def test_Symmetrize2D(par): dtype=par["dtype"], ) y = Sop * x[str(axis)].ravel() - assert dottest(Sop, y.size, par["ny"] * par["nx"], backend=backend) + assert dottest( + Sop, + y.size, + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) xinv = Sop / y + assert y.dtype == par["dtype"] assert_array_almost_equal(x[str(axis)].ravel(), xinv, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Symmetrize3D(par): """Dot-test, forward and adjoint for Symmetrize operator on 3d signal""" np.random.seed(10) - x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.arange(par["ny"]), np.ones(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.arange(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) - x["2"] = np.outer(np.ones(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.arange(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.ones(par["nx"]) - )[ + x = {} + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + x["2"] = np.outer(np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype))[ :, :, np.newaxis - ] * np.arange( - par["nx"] - ) + ] * np.arange(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.arange(par["nx"], dtype=dtype) for axis in [0, 1, 2]: Sop = Symmetrize( @@ -455,37 +577,66 @@ def test_Symmetrize3D(par): dtype=par["dtype"], ) y = Sop * x[str(axis)].ravel() - assert dottest(Sop, y.size, par["ny"] * par["nx"] * par["nx"], backend=backend) + assert dottest( + Sop, + y.size, + par["ny"] * par["nx"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) xinv = Sop / y + assert y.dtype == par["dtype"] assert_array_almost_equal(x[str(axis)].ravel(), xinv, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Roll1D(par): """Dot-test, forward and adjoint for Roll operator on 1d signal""" np.random.seed(10) - x = np.arange(par["ny"]) + par["imag"] * np.arange(par["ny"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + x = np.arange(par["ny"], dtype=dtype) + par["imag"] * np.arange( + par["ny"], dtype=dtype + ) Rop = Roll(par["ny"], shift=2, dtype=par["dtype"]) - assert dottest(Rop, par["ny"], par["ny"], backend=backend) + assert dottest( + Rop, + par["ny"], + par["ny"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) y = Rop * x xadj = Rop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_almost_equal(x, xadj, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Roll2D(par): """Dot-test, forward and inverse for Roll operator on 2d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"])) + par[ - "imag" - ] * np.outer(np.arange(par["ny"]), np.ones(par["nx"])) - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + par[ - "imag" - ] * np.outer(np.ones(par["ny"]), np.arange(par["nx"])) + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + ) + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + ) for axis in [0, 1]: Rop = Roll( @@ -496,46 +647,44 @@ def test_Roll2D(par): ) y = Rop * x[str(axis)].ravel() assert dottest( - Rop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Rop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) xadj = Rop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_almost_equal(x[str(axis)].ravel(), xadj, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Roll3D(par): """Dot-test, forward and adjoint for Roll operator on 3d signal""" np.random.seed(10) - x = {} - x["0"] = np.outer(np.arange(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.arange(par["ny"]), np.ones(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - x["1"] = np.outer(np.ones(par["ny"]), np.arange(par["nx"]))[ - :, :, np.newaxis - ] * np.ones(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.arange(par["nx"]) - )[ - :, :, np.newaxis - ] * np.ones( - par["nx"] - ) - x["2"] = np.outer(np.ones(par["ny"]), np.ones(par["nx"]))[ - :, :, np.newaxis - ] * np.arange(par["nx"]) + par["imag"] * np.outer( - np.ones(par["ny"]), np.ones(par["nx"]) - )[ + x = {} + x["0"] = np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.arange(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + + x["1"] = np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.arange(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.ones(par["nx"], dtype=dtype) + x["2"] = np.outer(np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype))[ :, :, np.newaxis - ] * np.arange( - par["nx"] - ) + ] * np.arange(par["nx"], dtype=dtype) + par["imag"] * np.outer( + np.ones(par["ny"], dtype=dtype), np.ones(par["nx"], dtype=dtype) + )[:, :, np.newaxis] * np.arange(par["nx"], dtype=dtype) for axis in [0, 1, 2]: Rop = Roll( @@ -549,21 +698,40 @@ def test_Roll3D(par): Rop, par["ny"] * par["nx"] * par["nx"], par["ny"] * par["nx"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) xinv = Rop.H * y + assert y.dtype == par["dtype"] assert_array_almost_equal(x[str(axis)].ravel(), xinv, decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Sum2D(par): """Dot-test for Sum operator on 2d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype for axis in [0, 1]: dim_d = [par["ny"], par["nx"]] dim_d.pop(axis) Sop = Sum(dims=(par["ny"], par["nx"]), axis=axis, dtype=par["dtype"]) - assert dottest(Sop, npp.prod(dim_d), par["ny"] * par["nx"], backend=backend) + assert dottest( + Sop, + npp.prod(dim_d), + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + x = np.arange(par["nx"] * par["ny"], dtype=dtype) + par["imag"] * np.arange( + par["nx"] * par["ny"], dtype=dtype + ) + y = Sop * x.ravel() + xadj = Sop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] @pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) @@ -592,7 +760,7 @@ def test_Sum2D_forceflat(par): assert y.shape == (par["ny"],) assert xadj.shape == (par["ny"], par["nx"]) - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="Operators have conflicting forceflat"): Sop_True * Sop_False.H Sop = Sop_True * Sop_None.H @@ -605,16 +773,30 @@ def test_Sum2D_forceflat(par): assert Sop.forceflat is None -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Sum3D(par): """Dot-test, forward and adjoint for Sum operator on 3d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype for axis in [0, 1, 2]: dim_d = [par["ny"], par["nx"], par["nx"]] dim_d.pop(axis) Sop = Sum(dims=(par["ny"], par["nx"], par["nx"]), axis=axis, dtype=par["dtype"]) assert dottest( - Sop, npp.prod(dim_d), par["ny"] * par["nx"] * par["nx"], backend=backend + Sop, + npp.prod(dim_d), + par["ny"] * par["nx"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) + x = np.arange(par["ny"] * par["nx"] * par["nx"], dtype=dtype) + par[ + "imag" + ] * np.arange(par["ny"] * par["nx"] * par["nx"], dtype=dtype) + y = Sop * x.ravel() + xadj = Sop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] @pytest.mark.parametrize("par", [(par1j), (par2j)]) @@ -678,9 +860,12 @@ def test_Imag(par): assert_array_equal(x, 0) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_Conj(par): """Dot-test, forward and adjoint for Conj operator""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype Cop = Conj(dims=(par["ny"], par["nx"]), dtype=par["dtype"]) if np.dtype(par["dtype"]).kind == "c": complexflag = 3 @@ -691,30 +876,41 @@ def test_Conj(par): par["ny"] * par["nx"], par["ny"] * par["nx"], complexflag=complexflag, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) np.random.seed(10) - x = np.random.randn(par["nx"] * par["ny"]) + par["imag"] * np.random.randn( - par["nx"] * par["ny"] - ) + x = np.random.randn(par["nx"] * par["ny"]).astype(dtype) + par[ + "imag" + ] * np.random.randn(par["nx"] * par["ny"]).astype(dtype) y = Cop * x xadj = Cop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x, xadj) assert_array_equal(y, np.conj(x)) assert_array_equal(xadj, np.conj(y)) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j), (par3)]) +@pytest.mark.parametrize( + "par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j), (par3), (par3s)] +) def test_ToCupy(par): """Forward and adjoint for ToCupy operator (checking that it works also when cupy is not available) """ + np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + Top = ToCupy(par["nx"], dtype=par["dtype"]) - np.random.seed(10) - x = npp.random.randn(par["nx"]) + par["imag"] * npp.random.randn(par["nx"]) + x = np.random.randn(par["nx"]).astype(dtype) + par["imag"] * np.random.randn( + par["nx"] + ).astype(dtype) y = Top * x xadj = Top.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x, xadj) assert_array_equal(y, np.asarray(x)) diff --git a/pytests/test_blending.py b/pytests/test_blending.py index 4f89e180c..c2db08584 100644 --- a/pytests/test_blending.py +++ b/pytests/test_blending.py @@ -14,13 +14,17 @@ from pylops.utils import dottest from pylops.waveeqprocessing import BlendingContinuous, BlendingGroup, BlendingHalf -par = {"nt": 101, "ns": 50, "nr": 20, "dtype": "float64"} +par = {"nt": 101, "ns": 50, "nr": 20} + +par1, par2 = par.copy(), par.copy() +par1["dtype"] = np.float64 +par2["dtype"] = np.float32 d = np.random.normal(0, 1, (par["ns"], par["nr"], par["nt"])) dt = 0.004 -@pytest.mark.parametrize("par", [(par)]) +@pytest.mark.parametrize("par", [(par1), (par2)]) def test_Blending_continuous(par): """Dot-test for continuous Blending operator""" npp.random.seed(0) @@ -44,11 +48,18 @@ def test_Blending_continuous(par): Bop, Bop.nttot * par["nr"], par["nt"] * par["ns"] * par["nr"], + rtol=1e-4 if par["dtype"] == np.float32 else 1e-6, backend=backend, ) + # Forward and adjoint + db = Bop * d.astype(par["dtype"]) + dadj = Bop.H * db + assert db.dtype == par["dtype"] + assert dadj.dtype == par["dtype"] + -@pytest.mark.parametrize("par", [(par)]) +@pytest.mark.parametrize("par", [(par1), (par2)]) def test_Blending_group(par): """Dot-test for group Blending operator""" npp.random.seed(0) @@ -70,11 +81,18 @@ def test_Blending_group(par): Bop, par["nt"] * n_groups * par["nr"], par["nt"] * par["ns"] * par["nr"], + rtol=1e-4 if par["dtype"] == np.float32 else 1e-6, backend=backend, ) + # Forward and adjoint + db = Bop * d.astype(par["dtype"]) + dadj = Bop.H * db + assert db.dtype == par["dtype"] + assert dadj.dtype == par["dtype"] -@pytest.mark.parametrize("par", [(par)]) + +@pytest.mark.parametrize("par", [(par1), (par2)]) def test_Blending_half(par): """Dot-test for half Blending operator""" npp.random.seed(0) @@ -96,5 +114,12 @@ def test_Blending_half(par): Bop, par["nt"] * n_groups * par["nr"], par["nt"] * par["ns"] * par["nr"], + rtol=1e-4 if par["dtype"] == np.float32 else 1e-6, backend=backend, ) + + # Forward and adjoint + db = Bop * d.astype(par["dtype"]) + dadj = Bop.H * db + assert db.dtype == par["dtype"] + assert dadj.dtype == par["dtype"] diff --git a/pytests/test_causalintegration.py b/pytests/test_causalintegration.py index 48856a911..4d3f22657 100644 --- a/pytests/test_causalintegration.py +++ b/pytests/test_causalintegration.py @@ -47,6 +47,34 @@ "imag": 0, "dtype": "float64", } # odd samples, real, non-unitary step +par1s = { + "nt": 20, + "nx": 101, + "dt": 1.0, + "imag": 0, + "dtype": "float32", +} # even samples, real (fp32), unitary step +par2s = { + "nt": 21, + "nx": 101, + "dt": 1.0, + "imag": 0, + "dtype": "float32", +} # odd samples, real (fp32), unitary step +par3s = { + "nt": 20, + "nx": 101, + "dt": 0.3, + "imag": 0, + "dtype": "float32", +} # even samples, real (fp32), non-unitary step +par4s = { + "nt": 21, + "nx": 101, + "dt": 0.3, + "imag": 0, + "dtype": "float32", +} # odd samples, real (fp32), non-unitary step par1j = { "nt": 20, "nx": 101, @@ -80,11 +108,27 @@ @pytest.mark.parametrize( - "par", [(par1), (par2), (par3), (par4), (par1j), (par2j), (par3j), (par4j)] + "par", + [ + (par1), + (par2), + (par3), + (par4), + (par1s), + (par2s), + (par3s), + (par4s), + (par1j), + (par2j), + (par3j), + (par4j), + ], ) def test_CausalIntegration1d(par): """Dot-test and inversion for CausalIntegration operator for 1d signals""" - t = np.arange(par["nt"]) * par["dt"] + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + t = np.arange(par["nt"], dtype=dtype) * par["dt"] x = t + par["imag"] * t for kind, rf in itertools.product(("full", "half", "trapezoidal"), (False, True)): @@ -102,6 +146,7 @@ def test_CausalIntegration1d(par): par["nt"] - rf1, par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -110,13 +155,14 @@ def test_CausalIntegration1d(par): if kind != "full" and not rf: # numerical integration y = Cop * x + assert y.dtype == par["dtype"] + # analytical integration yana = ( t**2 / 2.0 - t[0] ** 2 / 2.0 + par["imag"] * (t**2 / 2.0 - t[0] ** 2 / 2.0) ) - assert_array_almost_equal(y, yana[rf1:], decimal=4) # numerical derivative @@ -124,6 +170,7 @@ def test_CausalIntegration1d(par): par["nt"] - rf1, sampling=par["dt"], dtype=par["dtype"] ) xder = Dop * y.ravel() + assert_array_almost_equal(x[:-1], xder[:-1], decimal=4) # derivative by inversion xinv = lsqr( @@ -136,20 +183,34 @@ def test_CausalIntegration1d(par): conlim=np.inf, show=0, )[0] - - assert_array_almost_equal(x[:-1], xder[:-1], decimal=4) - assert_array_almost_equal(x, xinv, decimal=4) + assert_array_almost_equal(x, xinv, decimal=2 if dtype == np.float32 else 4) @pytest.mark.parametrize( - "par", [(par1), (par2), (par3), (par4), (par1j), (par2j), (par3j), (par4j)] + "par", + [ + (par1), + (par2), + (par3), + (par4), + (par1s), + (par2s), + (par3s), + (par4s), + (par1j), + (par2j), + (par3j), + (par4j), + ], ) def test_CausalIntegration2d(par): """Dot-test and inversion for CausalIntegration operator for 2d signals""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + dt = 0.2 * par["dt"] # need lower frequency in sinusoids for stability - t = np.arange(par["nt"]) * dt - x = np.outer(np.sin(t), np.ones(par["nx"])) + par["imag"] * np.outer( - np.sin(t), np.ones(par["nx"]) + t = np.arange(par["nt"], dtype=dtype) * dt + x = np.outer(np.sin(t), np.ones(par["nx"], dtype=dtype)) + par["imag"] * np.outer( + np.sin(t), np.ones(par["nx"], dtype=dtype) ) for kind, rf in itertools.product(("full", "half", "trapezoidal"), (False, True)): @@ -168,6 +229,7 @@ def test_CausalIntegration2d(par): (par["nt"] - rf1) * par["nx"], par["nt"] * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -177,6 +239,7 @@ def test_CausalIntegration2d(par): # numerical integration y = Cop * x.ravel() y = y.reshape(par["nt"], par["nx"]) + assert y.dtype == par["dtype"] # analytical integration yana = ( @@ -186,7 +249,6 @@ def test_CausalIntegration2d(par): * (np.outer(-np.cos(t), np.ones(par["nx"])) + np.cos(t[0])) ) yana = yana.reshape(par["nt"], par["nx"]) - assert_array_almost_equal(y, yana, decimal=2) # numerical derivative @@ -195,6 +257,7 @@ def test_CausalIntegration2d(par): ) xder = Dop * y.ravel() xder = xder.reshape(par["nt"], par["nx"]) + assert_array_almost_equal(x[:-1], xder[:-1], decimal=2) # derivative by inversion xinv = lsqr( @@ -208,6 +271,4 @@ def test_CausalIntegration2d(par): show=0, )[0] xinv = xinv.reshape(par["nt"], par["nx"]) - - assert_array_almost_equal(x[:-1], xder[:-1], decimal=2) assert_array_almost_equal(x, xinv, decimal=2) diff --git a/pytests/test_chirpradon.py b/pytests/test_chirpradon.py index c8084baec..114bf3deb 100644 --- a/pytests/test_chirpradon.py +++ b/pytests/test_chirpradon.py @@ -2,17 +2,14 @@ if int(os.environ.get("TEST_CUPY_PYLOPS", 0)): import cupy as np - from cupy.testing import assert_array_almost_equal, assert_array_equal - from cupyx.scipy.sparse import rand + from cupy.testing import assert_array_almost_equal backend = "cupy" else: import numpy as np - from numpy.testing import assert_array_almost_equal, assert_array_equal - from scipy.sparse import rand + from numpy.testing import assert_array_almost_equal backend = "numpy" -import itertools import pytest @@ -57,7 +54,8 @@ @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_ChirpRadon2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_ChirpRadon2D(par, dtype): """Dot-test, forward, analytical inverse and sparse inverse for ChirpRadon2D operator """ @@ -81,29 +79,50 @@ def test_ChirpRadon2D(par): ] # Create axis - t, t2, hx, _ = makeaxis(parmod) + t, _, hx, _ = makeaxis(parmod) # Create wavelet - wav, _, wav_c = ricker(t[:41], f0=parmod["f0"]) + wav, _, _ = ricker(t[:41], f0=parmod["f0"]) # Generate model - x = np.asarray(linear2d(hx, t, 1500.0, t0, theta, amp, wav)[1]) - Rop = ChirpRadon2D(np.asarray(t), np.asarray(hx), par["pxmax"], dtype="float64") - assert dottest(Rop, par["nhx"] * par["nt"], par["nhx"] * par["nt"], backend=backend) + x = np.asarray(linear2d(hx, t, 1500.0, t0, theta, amp, wav)[1].astype(dtype)) + Rop = ChirpRadon2D( + np.asarray(t.astype(dtype)), + np.asarray(hx.astype(dtype)), + par["pxmax"], + dtype=dtype, + ) + assert dottest( + Rop, + par["nhx"] * par["nt"], + par["nhx"] * par["nt"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + # Forward, adjoint inverse dtype check y = Rop * x.ravel() + xadj = Rop.H * y xinvana = Rop.inverse(y) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert xinvana.dtype == dtype assert_array_almost_equal(x.ravel(), xinvana, decimal=3) + # Sparse inverse xinv, _, _ = fista(Rop, y, niter=30, eps=1e0) assert_array_almost_equal(x.ravel(), xinv, decimal=3) @pytest.mark.parametrize("par", [(par1), (par2), (par1f), (par2f)]) -def test_ChirpRadon3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_ChirpRadon3D(par, dtype): """Dot-test, forward, analytical inverse and sparse inverse for ChirpRadon3D operator """ + if par["engine"] == "fftw" and backend == "cupy": + pytest.skip("fftw does not work with CuPy arrays") + parmod = { "ot": 0, "dt": 0.004, @@ -130,33 +149,42 @@ def test_ChirpRadon3D(par): ] # Create axis - t, t2, hx, hy = makeaxis(parmod) + t, _, hx, hy = makeaxis(parmod) # Create wavelet - wav, _, wav_c = ricker(t[:41], f0=parmod["f0"]) + wav, _, _ = ricker(t[:41], f0=parmod["f0"]) # Generate model - x = np.asarray(linear3d(hy, hx, t, 1500.0, t0, theta, phi, amp, wav)[1]) + x = np.asarray( + linear3d(hy, hx, t, 1500.0, t0, theta, phi, amp, wav)[1].astype(dtype) + ) Rop = ChirpRadon3D( - np.asarray(t), - np.asarray(hy), - np.asarray(hx), + np.asarray(t.astype(dtype)), + np.asarray(hy.astype(dtype)), + np.asarray(hx.astype(dtype)), (par["pymax"], par["pxmax"]), engine=par["engine"], - dtype="float64", - **dict(flags=("FFTW_ESTIMATE",), threads=2) + dtype=dtype, + **dict(flags=("FFTW_ESTIMATE",), threads=2), ) assert dottest( Rop, par["nhy"] * par["nhx"] * par["nt"], par["nhy"] * par["nhx"] * par["nt"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + # Forward, adjoint inverse dtype check y = Rop * x.ravel() + xadj = Rop.H * y xinvana = Rop.inverse(y) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert xinvana.dtype == dtype assert_array_almost_equal(x.ravel(), xinvana, decimal=3) + # Sparse inverse xinv, _, _ = fista(Rop, y, niter=30, eps=1e0) assert_array_almost_equal(x.ravel(), xinv, decimal=3) diff --git a/pytests/test_combine.py b/pytests/test_combine.py index 980714d43..75b8e79b1 100644 --- a/pytests/test_combine.py +++ b/pytests/test_combine.py @@ -28,6 +28,13 @@ par1 = {"ny": 101, "nx": 101, "imag": 0, "dtype": "float64"} # square real par2 = {"ny": 301, "nx": 101, "imag": 0, "dtype": "float64"} # overdetermined real +par1s = {"ny": 101, "nx": 101, "imag": 0, "dtype": "float32"} # square real (fp32) +par2s = { + "ny": 301, + "nx": 101, + "imag": 0, + "dtype": "float32", +} # overdetermined real (fp32) par1j = {"ny": 101, "nx": 101, "imag": 1j, "dtype": "complex128"} # square imag par2j = {"ny": 301, "nx": 101, "imag": 1j, "dtype": "complex128"} # overdetermined imag @@ -39,7 +46,7 @@ def test_VStack_incosistent_columns(par): """ G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) G2 = np.random.normal(0, 10, (par["ny"], par["nx"] + 1)).astype(par["dtype"]) - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="different number of columns"): VStack( [MatrixMult(G1, dtype=par["dtype"]), MatrixMult(G2, dtype=par["dtype"])], dtype=par["dtype"], @@ -47,26 +54,32 @@ def test_VStack_incosistent_columns(par): @pytest.mark.parametrize("par", [(par1)]) -def test_HStack_incosistent_columns(par): +def test_HStack_incosistent_rows(par): """Check error is raised if operators with different number of rows - are passed to VStack + are passed to HStack """ G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) G2 = np.random.normal(0, 10, (par["ny"] + 1, par["nx"])).astype(par["dtype"]) - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="different number of rows"): HStack( [MatrixMult(G1, dtype=par["dtype"]), MatrixMult(G2, dtype=par["dtype"])], dtype=par["dtype"], ) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_VStack(par): """Dot-test and inversion for VStack operator""" np.random.seed(0) - G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) Vop = VStack( [MatrixMult(G1, dtype=par["dtype"]), MatrixMult(G2, dtype=par["dtype"])], @@ -77,8 +90,13 @@ def test_VStack(par): 2 * par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Vop * x + xadj = Vop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] xlsqr = lsqr( Vop, @@ -99,8 +117,13 @@ def test_VStack(par): 2 * par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Vop * x + xadj = Vop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use scipy matrix directly in the definition of the operator G1 = sp_random(par["ny"], par["nx"], density=0.4).astype("float32") @@ -110,8 +133,13 @@ def test_VStack(par): 2 * par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Vop * x + xadj = Vop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use Zero operator directly in the definition of the operator G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) @@ -127,17 +155,30 @@ def test_VStack(par): 2 * par["ny"], par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Vop * x + xadj = Vop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] -@pytest.mark.parametrize("par", [(par2), (par2j)]) +@pytest.mark.parametrize("par", [(par2), (par2s), (par2j)]) def test_HStack(par): """Dot-test and inversion for HStack operator with numpy array as input""" np.random.seed(0) - G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") - G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") - x = np.ones(2 * par["nx"]) + par["imag"] * np.ones(2 * par["nx"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + x = np.ones(2 * par["nx"], dtype=dtype) + par["imag"] * np.ones( + 2 * par["nx"], dtype=dtype + ) Hop = HStack( [MatrixMult(G1, dtype=par["dtype"]), MatrixMult(G2, dtype=par["dtype"])], @@ -148,8 +189,13 @@ def test_HStack(par): par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Hop * x + xadj = Hop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] xlsqr = lsqr( Hop, @@ -169,8 +215,13 @@ def test_HStack(par): par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = H1op * x + xadj = Hop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use scipy matrix directly in the definition of the operator G1 = sp_random(par["ny"], par["nx"], density=0.4).astype("float32") @@ -180,8 +231,13 @@ def test_HStack(par): par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = H2op * x + xadj = H2op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use Zero operator directly in the definition of the operator G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype("float32") @@ -197,20 +253,36 @@ def test_HStack(par): par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = H3op * x + xadj = H3op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_Block(par): """Dot-test and inversion for Block operator""" np.random.seed(0) - G11 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G12 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G21 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G22 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - - x = np.ones(2 * par["nx"]) + par["imag"] * np.ones(2 * par["nx"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G11 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G12 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G21 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G22 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + x = np.ones(2 * par["nx"], dtype=dtype) + par["imag"] * np.ones( + 2 * par["nx"], dtype=dtype + ) Bop = Block( [ @@ -224,8 +296,13 @@ def test_Block(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Bop * x + xadj = Bop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] xlsqr = lsqr( Bop, @@ -252,8 +329,13 @@ def test_Block(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = B1op * x + xadj = B1op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use scipy matrix directly in the definition of the operator G11 = sp_random(par["ny"], par["nx"], density=0.4).astype("float32") @@ -270,7 +352,12 @@ def test_Block(par): 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, backend=backend, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) + y = B2op * x + xadj = B2op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use Zero operator directly in the definition of the operator G11 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) @@ -289,17 +376,30 @@ def test_Block(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = B2op * x + xadj = B2op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_BlockDiag(par): """Dot-test and inversion for BlockDiag operator""" np.random.seed(0) - G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - x = np.ones(2 * par["nx"]) + par["imag"] * np.ones(2 * par["nx"]) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + x = np.ones(2 * par["nx"], dtype=dtype) + par["imag"] * np.ones( + 2 * par["nx"], dtype=dtype + ) BDop = BlockDiag( [MatrixMult(G1, dtype=par["dtype"]), MatrixMult(G2, dtype=par["dtype"])], @@ -310,8 +410,13 @@ def test_BlockDiag(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = BDop * x + xadj = BDop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] xlsqr = lsqr( BDop, @@ -332,8 +437,13 @@ def test_BlockDiag(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = BD1op * x + xadj = BD1op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] # use scipy matrix directly in the definition of the operator G2 = sp_random(par["ny"], par["nx"], density=0.4).astype("float32") @@ -343,8 +453,13 @@ def test_BlockDiag(par): 2 * par["ny"], 2 * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = BD2op * x + xadj = BD2op.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] @pytest.mark.skipif( diff --git a/pytests/test_convolve.py b/pytests/test_convolve.py index 6e7206f92..acf88bb85 100644 --- a/pytests/test_convolve.py +++ b/pytests/test_convolve.py @@ -12,7 +12,6 @@ from scipy.signal.windows import triang backend = "numpy" -import itertools import pytest @@ -136,16 +135,33 @@ @pytest.mark.parametrize( "par", [(par1_1d), (par2_1d), (par3_1d), (par4_1d), (par5_1d), (par6_1d)] ) -def test_Convolve1D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Convolve1D(par, dtype): """Dot-test and inversion for Convolve1D operator""" np.random.seed(10) # 1D if par["axis"] == 0: - Cop = Convolve1D(par["nx"], h=h1, offset=par["offset"], dtype="float64") - assert dottest(Cop, par["nx"], par["nx"], backend=backend) + Cop = Convolve1D( + par["nx"], h=h1.astype(dtype), offset=par["offset"], dtype=dtype + ) + assert dottest( + Cop, + par["nx"], + par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) - x = np.zeros((par["nx"])) + x = np.zeros(par["nx"], dtype=dtype) x[par["nx"] // 2] = 1.0 + + # Forward and adjoint dtype check + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, Cop * x, @@ -162,20 +178,32 @@ def test_Convolve1D(par): if par["axis"] < 2: Cop = Convolve1D( (par["ny"], par["nx"]), - h=h1, + h=h1.astype(dtype), offset=par["offset"], axis=par["axis"], - dtype="float64", + dtype=dtype, ) assert dottest( - Cop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Cop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - x = np.zeros((par["ny"], par["nx"])) + x = np.zeros((par["ny"], par["nx"]), dtype=dtype) x[ int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), ] = 1.0 + + # Forward and adjoint dtype check + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, Cop * x.ravel(), @@ -191,24 +219,33 @@ def test_Convolve1D(par): # 1D on 3D Cop = Convolve1D( (par["nz"], par["ny"], par["nx"]), - h=h1, + h=h1.astype(dtype), offset=par["offset"], axis=par["axis"], - dtype="float64", + dtype=dtype, ) assert dottest( Cop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.zeros((par["nz"], par["ny"], par["nx"])) + x = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) x[ int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), ] = 1.0 + + # Forward and adjoint dtype check + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, Cop * x.ravel(), @@ -225,16 +262,30 @@ def test_Convolve1D(par): @pytest.mark.parametrize( "par", [(par1_1d), (par2_1d), (par3_1d), (par4_1d), (par5_1d), (par6_1d)] ) -def test_Convolve1D_long(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Convolve1D_long(par, dtype): """Dot-test and inversion for Convolve1D operator with long filter""" np.random.seed(10) # 1D if par["axis"] == 0: - x = np.zeros((par["nx"])) + x = np.zeros(par["nx"], dtype=dtype) x[par["nx"] // 2] = 1.0 - Xop = Convolve1D(nfilt[0], h=x, offset=nfilt[0] // 2, dtype="float64") - assert dottest(Xop, par["nx"], nfilt[0], backend=backend) + Xop = Convolve1D(nfilt[0], h=x, offset=nfilt[0] // 2, dtype=dtype) + assert dottest( + Xop, + par["nx"], + nfilt[0], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + # Forward and adjoint dtype check + y = Xop * h1.astype(dtype) + h1adj = Xop.H * y + assert y.dtype == dtype + assert h1adj.dtype == dtype + + # Inverse h1lsqr = lsqr( Xop, Xop * h1, damp=1e-20, niter=200, atol=1e-8, btol=1e-8, show=0 )[0] @@ -244,25 +295,38 @@ def test_Convolve1D_long(par): @pytest.mark.parametrize( "par", [(par1_2d), (par2_2d), (par3_2d), (par4_2d), (par5_2d), (par6_2d)] ) -def test_Convolve2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Convolve2D(par, dtype): """Dot-test and inversion for Convolve2D operator""" # 2D on 2D if par["axis"] == 2: Cop = Convolve2D( (par["ny"], par["nx"]), - h=h2, + h=h2.astype(dtype), offset=par["offset"], - dtype="float64", + dtype=dtype, ) assert dottest( - Cop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Cop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - x = np.zeros((par["ny"], par["nx"])) + x = np.zeros((par["ny"], par["nx"]), dtype=dtype) x[ int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), ] = 1.0 + + # Forward and adjoint dtype check + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, Cop * x.ravel(), @@ -280,7 +344,7 @@ def test_Convolve2D(par): axes.remove(par["axis"]) Cop = Convolve2D( (par["nz"], par["ny"], par["nx"]), - h=h2, + h=h2.astype(dtype), offset=par["offset"], axes=axes, dtype="float64", @@ -289,15 +353,24 @@ def test_Convolve2D(par): Cop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.zeros((par["nz"], par["ny"], par["nx"])) + x = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) x[ int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), ] = 1.0 + + # Forward and adjoint dtype check + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, Cop * x.ravel(), @@ -313,29 +386,38 @@ def test_Convolve2D(par): @pytest.mark.parametrize("par", [(par1_3d), (par2_3d)]) -def test_Convolve3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Convolve3D(par, dtype): """Dot-test and inversion for ConvolveND operator""" # 3D on 3D Cop = ConvolveND( (par["nz"], par["ny"], par["nx"]), - h=h3, + h=h3.astype(dtype), offset=par["offset"], - dtype="float64", + dtype=dtype, ) assert dottest( Cop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.zeros((par["nz"], par["ny"], par["nx"])) + x = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) x[ int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), ] = 1.0 + + # Forward and adjoint dtype check y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + # Inverse xlsqr = lsqr( Cop, y, x0=np.zeros_like(x), damp=1e-20, niter=400, atol=1e-8, btol=1e-8, show=0 )[0] @@ -345,14 +427,29 @@ def test_Convolve3D(par): # 3D on 4D (only modelling) Cop = ConvolveND( (par["nz"], par["ny"], par["nx"], par["nt"]), - h=h3, + h=h3.astype(dtype), offset=par["offset"], axes=[0, 1, 2], - dtype="float64", + dtype=dtype, ) assert dottest( Cop, par["nz"] * par["ny"] * par["nx"] * par["nt"], par["nz"] * par["ny"] * par["nx"] * par["nt"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + # Forward and adjoint dtype check + x = np.zeros((par["nz"], par["ny"], par["nx"], par["nt"]), dtype=dtype) + x[ + int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), + int(par["ny"] / 2 - 3) : int(par["ny"] / 2 + 3), + int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), + int(par["nt"] / 2 - 3) : int(par["nt"] / 2 + 3), + ] = 1.0 + + y = Cop * x + xadj = Cop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype diff --git a/pytests/test_dct.py b/pytests/test_dct.py index 864186966..7a4117e3a 100644 --- a/pytests/test_dct.py +++ b/pytests/test_dct.py @@ -6,88 +6,104 @@ from pylops.signalprocessing import DCT from pylops.utils import dottest -par1 = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float64"} -par2 = {"ny": 11, "nx": 21, "imag": 0, "dtype": "float64"} -par3 = {"ny": 21, "nx": 21, "imag": 0, "dtype": "float64"} +par1 = {"ny": 11, "nx": 11} +par2 = {"ny": 11, "nx": 21} +par3 = {"ny": 20, "nx": 20} @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par3)]) -def test_DCT1D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_DCT1D(par, dtype): """Dot test for Discrete Cosine Transform Operator 1D""" - t = np.arange(par["ny"]) + 1 + t = np.arange(par["ny"], dtype=dtype) + 1.0 - for type in [1, 2, 3, 4]: - Dct = DCT(dims=(par["ny"],), type=type, dtype=par["dtype"]) - assert dottest(Dct, par["ny"], par["ny"], rtol=1e-6, complexflag=0, verb=True) + for dct_type in (1, 2, 3, 4): + Dct = DCT(dims=(par["ny"],), type=dct_type, dtype=dtype) + assert dottest( + Dct, + par["ny"], + par["ny"], + complexflag=0, + rtol=5e-4 if dtype == np.float32 else 1e-6, + ) y = Dct.H * (Dct * t) - np.testing.assert_allclose(t, y) + np.testing.assert_allclose(t, y, rtol=5e-4 if dtype == np.float32 else 1e-6) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3)]) -def test_DCT2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_DCT2D(par, dtype): """Dot test for Discrete Cosine Transform Operator 2D""" - t = np.outer(np.arange(par["ny"]) + 1, np.arange(par["nx"]) + 1) + t = np.outer( + np.arange(par["ny"], dtype=dtype) + 1.0, np.arange(par["nx"], dtype=dtype) + 1.0 + ) - for type in [1, 2, 3, 4]: + for dct_type in (1, 2, 3, 4): for axes in [0, 1]: - Dct = DCT(dims=t.shape, type=type, axes=axes, dtype=par["dtype"]) + Dct = DCT(dims=t.shape, type=dct_type, axes=axes, dtype=dtype) assert dottest( Dct, par["nx"] * par["ny"], par["nx"] * par["ny"], - rtol=1e-6, complexflag=0, - verb=True, + rtol=5e-4 if dtype == np.float32 else 1e-6, ) y = Dct.H * (Dct * t) - np.testing.assert_allclose(t, y) + np.testing.assert_allclose(t, y, rtol=5e-4 if dtype == np.float32 else 1e-6) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3)]) -def test_DCT3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_DCT3D(par, dtype): """Dot test for Discrete Cosine Transform Operator 3D""" t = np.random.rand(par["nx"], par["nx"], par["nx"]) - for type in [1, 2, 3, 4]: + for dct_type in (1, 2, 3, 4): for axes in [0, 1, 2]: - Dct = DCT(dims=t.shape, type=type, axes=axes, dtype=par["dtype"]) + Dct = DCT(dims=t.shape, type=dct_type, axes=axes, dtype=dtype) assert dottest( Dct, par["nx"] * par["nx"] * par["nx"], par["nx"] * par["nx"] * par["nx"], - rtol=1e-6, complexflag=0, - verb=True, + rtol=5e-4 if dtype == np.float32 else 1e-6, ) y = Dct.H * (Dct * t) - np.testing.assert_allclose(t, y) + np.testing.assert_allclose(t, y, rtol=5e-4 if dtype == np.float32 else 1e-6) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par3)]) -def test_DCT_workers(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_DCT_workers(par, dtype): """Dot test for Discrete Cosine Transform Operator with workers""" t = np.arange(par["ny"]) + 1 - Dct = DCT(dims=(par["ny"],), type=1, dtype=par["dtype"], workers=2) - assert dottest(Dct, par["ny"], par["ny"], rtol=1e-6, complexflag=0, verb=True) + Dct = DCT(dims=(par["ny"],), type=1, dtype=dtype, workers=2) + assert dottest( + Dct, + par["ny"], + par["ny"], + complexflag=0, + rtol=5e-4 if dtype == np.float32 else 1e-6, + ) y = Dct.H * (Dct * t) - np.testing.assert_allclose(t, y) + np.testing.assert_allclose(t, y, rtol=5e-4 if dtype == np.float32 else 1e-6) diff --git a/pytests/test_derivative.py b/pytests/test_derivative.py index 4e1b03162..cc502e94f 100644 --- a/pytests/test_derivative.py +++ b/pytests/test_derivative.py @@ -101,8 +101,9 @@ @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_FirstDerivative_centered(par): - """Dot-test and forward for FirstDerivative operator (centered stencil)""" +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_FirstDerivative_centered(par, dtype): + """Dot-test and forward/adjoint for FirstDerivative operator (centered stencil)""" np.random.seed(10) for order in (3, 5): # 1d @@ -111,13 +112,22 @@ def test_FirstDerivative_centered(par): sampling=par["dx"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, + ) + assert dottest( + D1op, + par["nx"], + par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(D1op, par["nx"], par["nx"], backend=backend) - x = (par["dx"] * np.arange(par["nx"])) ** 2 - yana = 2 * par["dx"] * np.arange(par["nx"]) + x = (par["dx"] * np.arange(par["nx"], dtype=dtype)) ** 2 + yana = 2 * par["dx"] * np.arange(par["nx"], dtype=dtype) y = D1op * x + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 ) @@ -129,21 +139,32 @@ def test_FirstDerivative_centered(par): sampling=par["dy"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.outer((par["dy"] * np.arange(par["ny"])) ** 2, np.ones(par["nx"])) - yana = np.outer(2 * par["dy"] * np.arange(par["ny"]), np.ones(par["nx"])) - y = D1op * x.ravel() - y = y.reshape(par["ny"], par["nx"]) + x = np.outer( + (par["dy"] * np.arange(par["ny"], dtype=dtype)) ** 2, + np.ones(par["nx"], dtype=dtype), + ) + yana = np.outer( + 2 * par["dy"] * np.arange(par["ny"], dtype=dtype), + np.ones(par["nx"], dtype=dtype), + ) + y = D1op * x + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( - y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 + y.reshape(par["ny"], par["nx"])[order // 2 : -order // 2], + yana[order // 2 : -order // 2], + decimal=1, ) # 2d - derivative on 2nd direction @@ -153,21 +174,25 @@ def test_FirstDerivative_centered(par): sampling=par["dx"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.outer((par["dy"] * np.arange(par["ny"])) ** 2, np.ones(par["nx"])) - yana = np.zeros((par["ny"], par["nx"])) + yana = np.zeros((par["ny"], par["nx"]), dtype=dtype) y = D1op * x.ravel() - y = y.reshape(par["ny"], par["nx"]) + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( - y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 + y.reshape(par["ny"], par["nx"])[order // 2 : -order // 2], + yana[order // 2 : -order // 2], + decimal=1, ) # 3d - derivative on 1st direction @@ -177,25 +202,32 @@ def test_FirstDerivative_centered(par): sampling=par["dz"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) x = np.outer( - (par["dz"] * np.arange(par["nz"])) ** 2, np.ones((par["ny"], par["nx"])) + (par["dz"] * np.arange(par["nz"], dtype=dtype)) ** 2, + np.ones((par["ny"], par["nx"]), dtype=dtype), ).reshape(par["nz"], par["ny"], par["nx"]) yana = np.outer( - 2 * par["dz"] * np.arange(par["nz"]), np.ones((par["ny"], par["nx"])) + 2 * par["dz"] * np.arange(par["nz"], dtype=dtype), + np.ones((par["ny"], par["nx"]), dtype=dtype), ).reshape(par["nz"], par["ny"], par["nx"]) y = D1op * x.ravel() - y = y.reshape(par["nz"], par["ny"], par["nx"]) + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( - y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 + y.reshape(par["nz"], par["ny"], par["nx"])[order // 2 : -order // 2], + yana[order // 2 : -order // 2], + decimal=1, ) # 3d - derivative on 2nd direction @@ -205,23 +237,25 @@ def test_FirstDerivative_centered(par): sampling=par["dy"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.outer( - (par["dz"] * np.arange(par["nz"])) ** 2, np.ones((par["ny"], par["nx"])) - ).reshape(par["nz"], par["ny"], par["nx"]) - yana = np.zeros((par["nz"], par["ny"], par["nx"])) + yana = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) y = D1op * x.ravel() - y = y.reshape(par["nz"], par["ny"], par["nx"]) + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( - y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 + y.reshape(par["nz"], par["ny"], par["nx"])[order // 2 : -order // 2], + yana[order // 2 : -order // 2], + decimal=1, ) # 3d - derivative on 3rd direction @@ -231,38 +265,56 @@ def test_FirstDerivative_centered(par): sampling=par["dx"], edge=par["edge"], order=order, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - yana = np.zeros((par["nz"], par["ny"], par["nx"])) + yana = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) y = D1op * x.ravel() - y = y.reshape(par["nz"], par["ny"], par["nx"]) + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( - y[order // 2 : -order // 2], yana[order // 2 : -order // 2], decimal=1 + y.reshape(par["nz"], par["ny"], par["nx"])[order // 2 : -order // 2], + yana[order // 2 : -order // 2], + decimal=1, ) @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_FirstDerivative_forwaback(par): - """Dot-test for FirstDerivative operator (forward and backward - stencils). Note that the analytical expression cannot be validated in this - case +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_FirstDerivative_forwaback(par, dtype): + """Dot-test for FirstDerivative operator and forward/adjoint + (forward and backward stencils). Note that the analytical + expression cannot be validated in this case """ np.random.seed(10) for kind in ("forward", "backward"): # 1d D1op = FirstDerivative( - par["nx"], sampling=par["dx"], edge=par["edge"], kind=kind, dtype="float64" + par["nx"], sampling=par["dx"], edge=par["edge"], kind=kind, dtype=dtype + ) + assert dottest( + D1op, + par["nx"], + par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(D1op, par["nx"], par["nx"], backend=backend) + + x = (par["dx"] * np.arange(par["nx"])) ** 2 + y = D1op * x + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 2d - derivative on 1st direction D1op = FirstDerivative( @@ -271,15 +323,25 @@ def test_FirstDerivative_forwaback(par): sampling=par["dy"], edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + x = np.outer( + (par["dy"] * np.arange(par["ny"], dtype=dtype)) ** 2, + np.ones(par["nx"], dtype=dtype), + ) + y = D1op * x + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + # 2d - derivative on 2nd direction D1op = FirstDerivative( (par["ny"], par["nx"]), @@ -287,15 +349,21 @@ def test_FirstDerivative_forwaback(par): sampling=par["dx"], edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D1op * x.ravel() + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + # 3d - derivative on 1st direction D1op = FirstDerivative( (par["nz"], par["ny"], par["nx"]), @@ -303,15 +371,25 @@ def test_FirstDerivative_forwaback(par): sampling=par["dz"], edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + x = np.outer( + (par["dz"] * np.arange(par["nz"], dtype=dtype)) ** 2, + np.ones((par["ny"], par["nx"]), dtype=dtype), + ).reshape(par["nz"], par["ny"], par["nx"]) + y = D1op * x.ravel() + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + # 3d - derivative on 2nd direction D1op = FirstDerivative( (par["nz"], par["ny"], par["nx"]), @@ -319,15 +397,21 @@ def test_FirstDerivative_forwaback(par): sampling=par["dy"], edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D1op * x.ravel() + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + # 3d - derivative on 3rd direction D1op = FirstDerivative( (par["nz"], par["ny"], par["nx"]), @@ -335,42 +419,58 @@ def test_FirstDerivative_forwaback(par): sampling=par["dx"], edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D1op * x.ravel() + xadj = D1op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_SecondDerivative_centered(par): - """Dot-test and forward for SecondDerivative operator (centered stencil) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_SecondDerivative_centered(par, dtype): + """Dot-test and forward/adjoint for SecondDerivative operator (centered stencil) The test is based on the fact that the central stencil is exact for polynomials of degree 3. """ np.random.seed(10) - x = par["dx"] * np.arange(par["nx"]) - y = par["dy"] * np.arange(par["ny"]) - z = par["dz"] * np.arange(par["nz"]) + x = par["dx"] * np.arange(par["nx"], dtype=dtype) + y = par["dy"] * np.arange(par["ny"], dtype=dtype) + z = par["dz"] * np.arange(par["nz"], dtype=dtype) xx, yy = np.meshgrid(x, y) # produces arrays of size (ny,nx) xxx, yyy, zzz = np.meshgrid(x, y, z) # produces arrays of size (ny,nx,nz) # 1d D2op = SecondDerivative( - par["nx"], sampling=par["dx"], edge=par["edge"], dtype="float64" + par["nx"], sampling=par["dx"], edge=par["edge"], dtype=dtype + ) + assert dottest( + D2op, + par["nx"], + par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(D2op, par["nx"], par["nx"], backend=backend) # polynomial f(x) = x^3, f''(x) = 6x f = x**3 dfana = 6 * x df = D2op * f + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype assert_array_almost_equal(df[1:-1], dfana[1:-1], decimal=1) # 2d - derivative on 1st direction @@ -379,17 +479,26 @@ def test_SecondDerivative_centered(par): axis=0, sampling=par["dy"], edge=par["edge"], - dtype="float64", + dtype=dtype, + ) + assert dottest( + D2op, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - - assert dottest(D2op, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend) # polynomial f(x,y) = y^3, f_{yy}(x,y) = 6y f = yy**3 dfana = 6 * yy df = D2op * f.ravel() - df = df.reshape(par["ny"], par["nx"]) - assert_array_almost_equal(df[1:-1, :], dfana[1:-1, :], decimal=1) + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype + assert_array_almost_equal( + df.reshape(par["ny"], par["nx"])[1:-1, :], dfana[1:-1, :], decimal=1 + ) # 2d - derivative on 2nd direction D2op = SecondDerivative( @@ -397,17 +506,26 @@ def test_SecondDerivative_centered(par): axis=1, sampling=par["dx"], edge=par["edge"], - dtype="float64", + dtype=dtype, + ) + assert dottest( + D2op, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - - assert dottest(D2op, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend) # polynomial f(x,y) = x^3, f_{xx}(x,y) = 6x f = xx**3 dfana = 6 * xx df = D2op * f.ravel() - df = df.reshape(par["ny"], par["nx"]) - assert_array_almost_equal(df[:, 1:-1], dfana[:, 1:-1], decimal=1) + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype + assert_array_almost_equal( + df.reshape(par["ny"], par["nx"])[:, 1:-1], dfana[:, 1:-1], decimal=1 + ) # 3d - derivative on 1st direction D2op = SecondDerivative( @@ -415,13 +533,13 @@ def test_SecondDerivative_centered(par): axis=0, sampling=par["dy"], edge=par["edge"], - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -429,9 +547,14 @@ def test_SecondDerivative_centered(par): f = yyy**3 dfana = 6 * yyy df = D2op * f.ravel() - df = df.reshape(par["ny"], par["nx"], par["nz"]) - - assert_array_almost_equal(df[1:-1, :, :], dfana[1:-1, :, :], decimal=1) + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype + assert_array_almost_equal( + df.reshape(par["ny"], par["nx"], par["nz"])[1:-1, :, :], + dfana[1:-1, :, :], + decimal=1, + ) # 3d - derivative on 2nd direction D2op = SecondDerivative( @@ -439,13 +562,13 @@ def test_SecondDerivative_centered(par): axis=1, sampling=par["dx"], edge=par["edge"], - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -453,9 +576,14 @@ def test_SecondDerivative_centered(par): f = xxx**3 dfana = 6 * xxx df = D2op * f.ravel() - df = df.reshape(par["ny"], par["nx"], par["nz"]) - - assert_array_almost_equal(df[:, 1:-1, :], dfana[:, 1:-1, :], decimal=1) + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype + assert_array_almost_equal( + df.reshape(par["ny"], par["nx"], par["nz"])[:, 1:-1, :], + dfana[:, 1:-1, :], + decimal=1, + ) # 3d - derivative on 3rd direction D2op = SecondDerivative( @@ -463,13 +591,13 @@ def test_SecondDerivative_centered(par): axis=2, sampling=par["dz"], edge=par["edge"], - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["ny"] * par["nx"] * par["nz"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -477,36 +605,52 @@ def test_SecondDerivative_centered(par): f = zzz**3 dfana = 6 * zzz df = D2op * f.ravel() - df = df.reshape(par["ny"], par["nx"], par["nz"]) - - assert_array_almost_equal(df[:, :, 1:-1], dfana[:, :, 1:-1], decimal=1) + fadj = D2op.H * df + assert df.dtype == dtype + assert fadj.dtype == dtype + assert_array_almost_equal( + df.reshape(par["ny"], par["nx"], par["nz"])[:, :, 1:-1], + dfana[:, :, 1:-1], + decimal=1, + ) @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_SecondDerivative_forwaback(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_SecondDerivative_forwaback(par, dtype): """Dot-test for SecondDerivative operator (forward and backward stencils). Note that the analytical expression cannot be validated in this case """ np.random.seed(10) - x = par["dx"] * np.arange(par["nx"]) - y = par["dy"] * np.arange(par["ny"]) - z = par["dz"] * np.arange(par["nz"]) + x = par["dx"] * np.arange(par["nx"], dtype=dtype) + y = par["dy"] * np.arange(par["ny"], dtype=dtype) + z = par["dz"] * np.arange(par["nz"], dtype=dtype) - xx, yy = np.meshgrid(x, y) # produces arrays of size (ny,nx) - xxx, yyy, zzz = np.meshgrid(x, y, z) # produces arrays of size (ny,nx,nz) + xx, _ = np.meshgrid(x, y) # produces arrays of size (ny,nx) + xxx, _, _ = np.meshgrid(x, y, z) # produces arrays of size (ny,nx,nz) - for kind in ("forward", "backward"): + for _ in ("forward", "backward"): # 1d D2op = SecondDerivative( par["nx"], sampling=par["dx"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest(D2op, par["nx"], par["nx"], backend=backend) + assert dottest( + D2op, + par["nx"], + par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + y = D2op * x + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 2d - derivative on 1st direction D2op = SecondDerivative( @@ -515,15 +659,19 @@ def test_SecondDerivative_forwaback(par): sampling=par["dy"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D2op * xx.ravel() + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 2d - derivative on 2nd direction D2op = SecondDerivative( @@ -532,15 +680,19 @@ def test_SecondDerivative_forwaback(par): sampling=par["dx"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D2op * xx.ravel() + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - derivative on 1st direction D2op = SecondDerivative( @@ -549,15 +701,19 @@ def test_SecondDerivative_forwaback(par): sampling=par["dy"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D2op * xxx.ravel() + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - derivative on 2nd direction D2op = SecondDerivative( @@ -566,15 +722,19 @@ def test_SecondDerivative_forwaback(par): sampling=par["dx"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D2op * xxx.ravel() + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - derivative on 3rd direction D2op = SecondDerivative( @@ -583,23 +743,31 @@ def test_SecondDerivative_forwaback(par): sampling=par["dz"], edge=par["edge"], kind="forward", - dtype="float64", + dtype=dtype, ) - assert dottest( D2op, par["nz"] * par["ny"] * par["nx"], par["ny"] * par["nx"] * par["nz"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = D2op * xxx.ravel() + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_Laplacian(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Laplacian(par, dtype): """Dot-test for Laplacian operator""" np.random.seed(10) + xx = np.ones((par["ny"], par["nx"]), dtype=dtype) + xxx = np.ones((par["nz"], par["ny"], par["nx"]), dtype=dtype) + # 2d - symmetrical Dlapop = Laplacian( (par["ny"], par["nx"]), @@ -607,11 +775,19 @@ def test_Laplacian(par): weights=(1, 1), sampling=(par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( - Dlapop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Dlapop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) + y = Dlapop * xx.ravel() + xadj = Dlapop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 2d - asymmetrical Dlapop = Laplacian( @@ -620,11 +796,19 @@ def test_Laplacian(par): weights=(1, 2), sampling=(par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( - Dlapop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend + Dlapop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) + y = Dlapop * xx.ravel() + xadj = Dlapop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - symmetrical on 1st and 2nd direction Dlapop = Laplacian( @@ -633,14 +817,19 @@ def test_Laplacian(par): weights=(1, 1), sampling=(par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( Dlapop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Dlapop * xxx.ravel() + xadj = Dlapop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - symmetrical on 1st and 2nd direction Dlapop = Laplacian( @@ -649,14 +838,19 @@ def test_Laplacian(par): weights=(1, 1), sampling=(par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( Dlapop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Dlapop * xxx.ravel() + xadj = Dlapop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d - symmetrical on all directions Dlapop = Laplacian( @@ -665,22 +859,31 @@ def test_Laplacian(par): weights=(1, 1, 1), sampling=(par["dz"], par["dx"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( Dlapop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Dlapop * xxx.ravel() + xadj = Dlapop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_Gradient(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Gradient(par, dtype): """Dot-test for Gradient operator""" np.random.seed(10) + xx = np.ones((par["ny"], par["nx"]), dtype=dtype) + xxx = np.ones((par["nz"], par["ny"], par["nx"]), dtype=dtype) + for kind in ("forward", "centered", "backward"): # 2d Gop = Gradient( @@ -688,14 +891,19 @@ def test_Gradient(par): sampling=(par["dy"], par["dx"]), edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( Gop, 2 * par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Gop * xx.ravel() + xadj = Gop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d Gop = Gradient( @@ -703,71 +911,104 @@ def test_Gradient(par): sampling=(par["dz"], par["dy"], par["dx"]), edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( Gop, 3 * par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Gop * xxx.ravel() + xadj = Gop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_FirstDirectionalDerivative(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_FirstDirectionalDerivative(par, dtype): """Dot-test for FirstDirectionalDerivative operator""" np.random.seed(10) + xx = np.ones((par["ny"], par["nx"]), dtype=dtype) + xxx = np.ones((par["nz"], par["ny"], par["nx"]), dtype=dtype) + for kind in ("forward", "centered", "backward"): # 2d Fdop = FirstDirectionalDerivative( (par["ny"], par["nx"]), - v=np.sqrt(2.0) / 2.0 * np.ones(2), + v=(np.sqrt(2.0) / 2.0 * np.ones(2)).astype(dtype), sampling=(par["dy"], par["dx"]), edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( Fdop, par["ny"] * par["nx"], par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Fdop * xx.ravel() + xadj = Fdop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d Fdop = FirstDirectionalDerivative( (par["nz"], par["ny"], par["nx"]), - v=np.ones(3) / np.sqrt(3), + v=(np.ones(3) / np.sqrt(3)).astype(dtype), sampling=(par["dz"], par["dy"], par["dx"]), edge=par["edge"], kind=kind, - dtype="float64", + dtype=dtype, ) assert dottest( Fdop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Fdop * xxx.ravel() + xadj = Fdop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_SecondDirectionalDerivative(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_SecondDirectionalDerivative(par, dtype): """Dot-test for test_SecondDirectionalDerivative operator""" np.random.seed(10) + xx = np.ones((par["ny"], par["nx"]), dtype=dtype) + xxx = np.ones((par["nz"], par["ny"], par["nx"]), dtype=dtype) + # 2d Fdop = SecondDirectionalDerivative( (par["ny"], par["nx"]), v=np.sqrt(2.0) / 2.0 * np.ones(2), sampling=(par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) - assert dottest(Fdop, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend) + assert dottest( + Fdop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + y = Fdop * xx.ravel() + xadj = Fdop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype # 3d Fdop = SecondDirectionalDerivative( @@ -775,31 +1016,35 @@ def test_SecondDirectionalDerivative(par): v=np.ones(3) / np.sqrt(3), sampling=(par["dz"], par["dy"], par["dx"]), edge=par["edge"], - dtype="float64", + dtype=dtype, ) assert dottest( Fdop, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], + rtol=5e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Fdop * xxx.ravel() + xadj = Fdop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par1e), (par2e), (par3e), (par4e)] ) -def test_SecondDirectionalDerivative_verticalderivative(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_SecondDirectionalDerivative_verticalderivative(par, dtype): """Compare vertical derivative for SecondDirectionalDerivative operator and SecondDerivative """ np.random.seed(10) - Fop = FirstDerivative( - (par["ny"], par["nx"]), axis=0, edge=par["edge"], dtype="float64" - ) + Fop = FirstDerivative((par["ny"], par["nx"]), axis=0, edge=par["edge"], dtype=dtype) F2op = Fop.H * Fop F2dop = SecondDirectionalDerivative( - (par["ny"], par["nx"]), v=np.array([1, 0]), edge=par["edge"], dtype="float64" + (par["ny"], par["nx"]), v=np.array([1, 0]), edge=par["edge"], dtype=dtype ) x = np.random.normal(0.0, 1.0, (par["ny"], par["nx"])) diff --git a/pytests/test_diagonal.py b/pytests/test_diagonal.py index e7c0dc556..4e638ddfa 100644 --- a/pytests/test_diagonal.py +++ b/pytests/test_diagonal.py @@ -16,24 +16,47 @@ from pylops.optimization.basic import lsqr from pylops.utils import dottest -par1 = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float32"} # real -par2 = {"ny": 21, "nx": 11, "nt": 20, "imag": 1j, "dtype": "complex64"} # complex +par1 = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float32"} # real (fp32) +par1s = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float64"} # real (fp64) +par1j = { + "ny": 21, + "nx": 11, + "nt": 20, + "imag": 1j, + "dtype": "complex128", +} # complex (cp128) np.random.seed(10) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Diagonal_1dsignal(par): """Dot-test and inversion for Diagonal operator for 1d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for ddim in (par["nx"], par["nt"]): - d = np.arange(ddim) + 1.0 + par["imag"] * (np.arange(ddim) + 1.0) + d = ( + np.arange(ddim, dtype=dtype) + + 1.0 + + par["imag"] * (np.arange(ddim, dtype=dtype) + 1.0) + ) Dop = Diagonal(d, dtype=par["dtype"]) assert dottest( - Dop, ddim, ddim, complexflag=0 if par["imag"] == 0 else 3, backend=backend + Dop, + ddim, + ddim, + complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - x = np.ones(ddim) + par["imag"] * np.ones(ddim) + x = np.ones(ddim, dtype=dtype) + par["imag"] * np.ones(ddim, dtype=dtype) + y = Dop * x + xadj = Dop.H * y + assert y.dtype == Dop.dtype + assert xadj.dtype == par["dtype"] + xlsqr = lsqr( Dop, Dop * x, @@ -44,15 +67,19 @@ def test_Diagonal_1dsignal(par): btol=1e-8, show=0, )[0] - - assert_array_almost_equal(x, xlsqr, decimal=4) + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Diagonal_2dsignal(par): """Dot-test and inversion for Diagonal operator for 2d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype for idim, ddim in enumerate((par["nx"], par["nt"])): - d = np.arange(ddim) + 1.0 + par["imag"] * (np.arange(ddim) + 1.0) + d = ( + np.arange(ddim, dtype=dtype) + + 1.0 + + par["imag"] * (np.arange(ddim, dtype=dtype) + 1.0) + ) Dop = Diagonal(d, dims=(par["nx"], par["nt"]), axis=idim, dtype=par["dtype"]) assert dottest( @@ -60,6 +87,7 @@ def test_Diagonal_2dsignal(par): par["nx"] * par["nt"], par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -80,11 +108,17 @@ def test_Diagonal_2dsignal(par): assert_array_almost_equal(x.ravel(), xlsqr.ravel(), decimal=4) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Diagonal_3dsignal(par): """Dot-test and inversion for Diagonal operator for 3d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for idim, ddim in enumerate((par["ny"], par["nx"], par["nt"])): - d = np.arange(ddim) + 1.0 + par["imag"] * (np.arange(ddim) + 1.0) + d = ( + np.arange(ddim, dtype=dtype) + + 1.0 + + par["imag"] * (np.arange(ddim, dtype=dtype) + 1.0) + ) Dop = Diagonal( d, dims=(par["ny"], par["nx"], par["nt"]), axis=idim, dtype=par["dtype"] @@ -94,12 +128,18 @@ def test_Diagonal_3dsignal(par): par["ny"] * par["nx"] * par["nt"], par["ny"] * par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"], par["nx"], par["nt"])) + par["imag"] * np.ones( - (par["ny"], par["nx"], par["nt"]) - ) + x = np.ones((par["ny"], par["nx"], par["nt"]), dtype=dtype) + par[ + "imag" + ] * np.ones((par["ny"], par["nx"], par["nt"]), dtype=dtype) + y = Dop * x + xadj = Dop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + xlsqr = lsqr( Dop, Dop * x.ravel(), @@ -110,15 +150,22 @@ def test_Diagonal_3dsignal(par): btol=1e-8, show=0, )[0] - - assert_array_almost_equal(x.ravel(), xlsqr.ravel(), decimal=4) + assert_array_almost_equal( + x.ravel(), xlsqr.ravel(), decimal=2 if dtype == np.float32 else 4 + ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Diagonal_2dsignal_unflattened(par): """Dot-test and inversion for Diagonal operator for unflattened 2d signal (v2 behaviour)""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for idim, ddim in enumerate((par["nx"], par["nt"])): - d = np.arange(ddim) + 1.0 + par["imag"] * (np.arange(ddim) + 1.0) + d = ( + np.arange(ddim, dtype=dtype) + + 1.0 + + par["imag"] * (np.arange(ddim, dtype=dtype) + 1.0) + ) Dop = Diagonal(d, dims=(par["nx"], par["nt"]), axis=idim, dtype=par["dtype"]) assert dottest( @@ -126,12 +173,18 @@ def test_Diagonal_2dsignal_unflattened(par): par["nx"] * par["nt"], par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["nx"], par["nt"])) + par["imag"] * np.ones( - (par["nx"], par["nt"]) + x = np.ones((par["nx"], par["nt"]), dtype=dtype) + par["imag"] * np.ones( + (par["nx"], par["nt"]), dtype=dtype ) + y = Dop * x + xadj = Dop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + xlsqr = lsqr( Dop, Dop * x, @@ -142,15 +195,20 @@ def test_Diagonal_2dsignal_unflattened(par): btol=1e-8, show=0, )[0] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) - assert_array_almost_equal(x, xlsqr, decimal=4) - -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Diagonal_3dsignal_unflattened(par): """Dot-test and inversion for Diagonal operator unflattened 3d signal (v2 behaviour)""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for idim, ddim in enumerate((par["ny"], par["nx"], par["nt"])): - d = np.arange(ddim) + 1.0 + par["imag"] * (np.arange(ddim) + 1.0) + d = ( + np.arange(ddim, dtype=dtype) + + 1.0 + + par["imag"] * (np.arange(ddim, dtype=dtype) + 1.0) + ) Dop = Diagonal( d, dims=(par["ny"], par["nx"], par["nt"]), axis=idim, dtype=par["dtype"] @@ -160,12 +218,18 @@ def test_Diagonal_3dsignal_unflattened(par): par["ny"] * par["nx"] * par["nt"], par["ny"] * par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"], par["nx"], par["nt"])) + par["imag"] * np.ones( - (par["ny"], par["nx"], par["nt"]) - ) + x = np.ones((par["ny"], par["nx"], par["nt"]), dtype=dtype) + par[ + "imag" + ] * np.ones((par["ny"], par["nx"], par["nt"]), dtype=dtype) + y = Dop * x + xadj = Dop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + xlsqr = lsqr( Dop, Dop * x, @@ -176,5 +240,4 @@ def test_Diagonal_3dsignal_unflattened(par): btol=1e-8, show=0, )[0] - - assert_array_almost_equal(x, xlsqr, decimal=4) + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) diff --git a/pytests/test_dwts.py b/pytests/test_dwts.py index bc47870f7..865f9798a 100644 --- a/pytests/test_dwts.py +++ b/pytests/test_dwts.py @@ -8,17 +8,38 @@ from pylops.signalprocessing import DWT, DWT2D, DWTND from pylops.utils import dottest -par1 = {"ny": 7, "nx": 9, "nt": 10, "imag": 0, "dtype": "float32"} # real -par2 = {"ny": 7, "nx": 9, "nt": 10, "imag": 1j, "dtype": "complex64"} # complex -par3 = {"ny": 7, "nx": 9, "nz": 9, "nt": 10, "imag": 0, "dtype": "float32"} # real 4D -par4 = { +par1 = { + "ny": 7, + "nx": 9, + "nz": 9, + "nt": 10, + "imag": 0, + "dtype": "float32", +} # real (fp32) +par2 = { + "ny": 7, + "nx": 9, + "nz": 9, + "nt": 10, + "imag": 0, + "dtype": "float64", +} # real (fp64) +par3 = { "ny": 7, "nx": 9, "nz": 9, "nt": 10, "imag": 1j, "dtype": "complex64", -} # complex 4D +} # complex (cp64) +par4 = { + "ny": 7, + "nx": 9, + "nz": 9, + "nt": 10, + "imag": 1j, + "dtype": "complex128", +} # complex (cp128) np.random.seed(10) @@ -29,195 +50,285 @@ @pytest.mark.parametrize("par", [(par1)]) def test_unknown_wavelet(par): """Check error is raised if unknown wavelet is chosen is passed""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="not in family set"): _ = DWT(dims=par["nt"], wavelet="foo") @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWT_1dsignal(par): """Dot-test and inversion for DWT operator for 1d signal""" - DWTop = DWT(dims=[par["nt"]], axis=0, wavelet="haar", level=3) - x = np.random.normal(0.0, 1.0, par["nt"]) + par["imag"] * np.random.normal( - 0.0, 1.0, par["nt"] - ) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + DWTop = DWT(dims=[par["nt"]], axis=0, wavelet="haar", level=3, dtype=par["dtype"]) + x = np.random.normal(0.0, 1.0, par["nt"]).astype(dtype) + par[ + "imag" + ] * np.random.normal(0.0, 1.0, par["nt"]).astype(dtype) assert dottest( - DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3 + DWTop, + DWTop.shape[0], + DWTop.shape[1], + complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x, xadj, decimal=8) - assert_array_almost_equal(x, xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal(x, xadj, decimal=4 if dtype == np.float32 else 8) + assert_array_almost_equal(x, xinv, decimal=4 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWT_2dsignal(par): """Dot-test and inversion for DWT operator for 2d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for axis in [0, 1]: - DWTop = DWT(dims=(par["nt"], par["nx"]), axis=axis, wavelet="haar", level=3) - x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"])) + par[ + DWTop = DWT( + dims=(par["nt"], par["nx"]), + axis=axis, + wavelet="haar", + level=3, + dtype=par["dtype"], + ) + x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"])).astype(dtype) + par[ "imag" - ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"])) + ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"])).astype(dtype) assert dottest( DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal( + x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8 + ) + assert_array_almost_equal( + x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8 + ) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWT_3dsignal(par): """Dot-test and inversion for DWT operator for 3d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype for axis in [0, 1, 2]: DWTop = DWT( - dims=(par["nt"], par["nx"], par["ny"]), axis=axis, wavelet="haar", level=3 + dims=(par["nt"], par["nx"], par["ny"]), + axis=axis, + wavelet="haar", + level=3, + dtype=par["dtype"], ) - x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + par[ - "imag" - ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])).astype( + dtype + ) + par["imag"] * np.random.normal( + 0.0, 1.0, (par["nt"], par["nx"], par["ny"]) + ).astype(dtype) assert dottest( DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal( + x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8 + ) + assert_array_almost_equal( + x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8 + ) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWT2D_2dsignal(par): """Dot-test and inversion for DWT2D operator for 2d signal""" - DWTop = DWT2D(dims=(par["nt"], par["nx"]), axes=(0, 1), wavelet="haar", level=3) - x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"])) + par[ + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + DWTop = DWT2D( + dims=(par["nt"], par["nx"]), + axes=(0, 1), + wavelet="haar", + level=3, + dtype=par["dtype"], + ) + x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"])).astype(dtype) + par[ "imag" - ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"])) + ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"])).astype(dtype) assert dottest( - DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3 + DWTop, + DWTop.shape[0], + DWTop.shape[1], + complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal(x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8) + assert_array_almost_equal(x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWT2D_3dsignal(par): """Dot-test and inversion for DWT operator for 3d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for axes in [(0, 1), (0, 2), (1, 2)]: DWTop = DWT2D( - dims=(par["nt"], par["nx"], par["ny"]), axes=axes, wavelet="haar", level=3 + dims=(par["nt"], par["nx"], par["ny"]), + axes=axes, + wavelet="haar", + level=3, + dtype=par["dtype"], ) - x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + par[ - "imag" - ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])).astype( + dtype + ) + par["imag"] * np.random.normal( + 0.0, 1.0, (par["nt"], par["nx"], par["ny"]) + ).astype(dtype) assert dottest( DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal( + x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8 + ) + assert_array_almost_equal( + x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8 + ) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par3), (par4)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWTND_3dsignal(par): """Dot-test and inversion for DWTND operator for 3d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + DWTop = DWTND( - dims=(par["nt"], par["nx"], par["ny"]), axes=(0, 1, 2), wavelet="haar", level=3 + dims=(par["nt"], par["nx"], par["ny"]), + axes=(0, 1, 2), + wavelet="haar", + level=3, + dtype=par["dtype"], ) - x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + par[ - "imag" - ] * np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])) + x = np.random.normal(0.0, 1.0, (par["nt"], par["nx"], par["ny"])).astype( + dtype + ) + par["imag"] * np.random.normal( + 0.0, 1.0, (par["nt"], par["nx"], par["ny"]) + ).astype(dtype) assert dottest( - DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3 + DWTop, + DWTop.shape[0], + DWTop.shape[1], + complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal(x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8) + assert_array_almost_equal(x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par3), (par4)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_DWTND_4dsignal(par): """Dot-test and inversion for DWTND operator for 4d signal""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + for axes in [(0, 1, 2), (0, 2, 3), (1, 2, 3), (0, 1, 3), (0, 1, 2, 3)]: DWTop = DWTND( dims=(par["nt"], par["nx"], par["ny"], par["nz"]), axes=axes, wavelet="haar", level=3, + dtype=par["dtype"], ) x = np.random.normal( 0.0, 1.0, (par["nt"], par["nx"], par["ny"], par["nz"]) - ) + par["imag"] * np.random.normal( + ).astype(dtype) + par["imag"] * np.random.normal( 0.0, 1.0, (par["nt"], par["nx"], par["ny"], par["nz"]) - ) + ).astype(dtype) assert dottest( DWTop, DWTop.shape[0], DWTop.shape[1], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) y = DWTop * x.ravel() xadj = DWTop.H * y # adjoint is same as inverse for dwt - xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] - assert_array_almost_equal(x.ravel(), xadj, decimal=8) - assert_array_almost_equal(x.ravel(), xinv, decimal=8) + xinv = lsqr(DWTop, y, damp=1e-10, iter_lim=10, atol=1e-8, btol=1e-8, show=0)[0] + assert_array_almost_equal( + x.ravel(), xadj, decimal=4 if dtype == np.float32 else 8 + ) + assert_array_almost_equal( + x.ravel(), xinv, decimal=4 if dtype == np.float32 else 8 + ) diff --git a/pytests/test_eigs.py b/pytests/test_eigs.py index 9a73c3575..06674d864 100644 --- a/pytests/test_eigs.py +++ b/pytests/test_eigs.py @@ -15,30 +15,33 @@ from pylops.optimization.eigs import power_iteration from pylops.utils.backend import to_numpy -par1 = {"n": 21, "imag": 0, "dtype": "float32"} # square, real -par2 = {"n": 21, "imag": 1j, "dtype": "complex64"} # square, complex +par1 = {"n": 21, "imag": 0, "dtype": "float32"} # real (fp32) +par2 = {"n": 21, "imag": 0, "dtype": "float64"} # real (fp64) +par3 = {"n": 21, "imag": 1j, "dtype": "complex64"} # complex (cp64) +par4 = {"n": 21, "imag": 1j, "dtype": "complex128"} # complex (cp128) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) def test_power_iteration(par): - """Max eigenvalue computation with power iteration method vs. scipy methods""" + """Max eigenvalue computation with power iteration method vs. numpy.linalg.eig""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - A = np.random.randn(par["n"], par["n"]) + par["imag"] * np.random.randn( - par["n"], par["n"] - ) + A = np.random.randn(par["n"], par["n"]).astype(dtype) + par[ + "imag" + ] * np.random.randn(par["n"], par["n"]).astype(dtype) A1 = np.conj(A.T) @ A # non-symmetric - Aop = MatrixMult(A) + Aop = MatrixMult(A, dtype=par["dtype"]) eig = power_iteration(Aop, niter=200, tol=0, backend=backend)[0] eig_np = npp.max(npp.abs(npp.linalg.eig(to_numpy(A))[0])) - + assert eig.dtype == par["dtype"] assert np.abs(np.abs(eig) - eig_np) < 1e-3 # symmetric - A1op = MatrixMult(A1) + A1op = MatrixMult(A1, dtype=par["dtype"]) eig = power_iteration(A1op, niter=200, tol=0, backend=backend)[0] eig_np = npp.max(npp.abs(npp.linalg.eig(to_numpy(A1))[0])) - + assert eig.dtype == par["dtype"] assert np.abs(np.abs(eig) - eig_np) < 1e-3 diff --git a/pytests/test_estimators.py b/pytests/test_estimators.py index 38b1ab85a..91d569f05 100644 --- a/pytests/test_estimators.py +++ b/pytests/test_estimators.py @@ -72,7 +72,7 @@ def test_trace_hutchpp(par): assert type(trace_true) == npp.dtype(dtype) trace_expl = Aop.trace(backend=backend) - assert to_numpy(trace_expl).dtype == np.dtype(dtype) + assert to_numpy(trace_expl).dtype == npp.dtype(dtype) assert_almost_equal(trace_true, trace_expl, decimal=5) # Hutch++ @@ -82,7 +82,7 @@ def test_trace_hutchpp(par): sampler=sampler, backend=backend, ) - assert to_numpy(trace_est).dtype == np.dtype(dtype) + assert to_numpy(trace_est).dtype == npp.dtype(dtype) assert_almost_equal(trace_true, trace_est, decimal=5) @@ -99,7 +99,7 @@ def test_trace_nahutchpp(par): assert type(trace_true) == npp.dtype(dtype) trace_expl = Aop.trace(backend=backend) - assert to_numpy(trace_expl).dtype == np.dtype(dtype) + assert to_numpy(trace_expl).dtype == npp.dtype(dtype) assert_almost_equal(trace_true, trace_expl, decimal=5) # NA-Hutch++ @@ -109,5 +109,5 @@ def test_trace_nahutchpp(par): sampler=sampler, backend=backend, ) - assert to_numpy(trace_est).dtype == np.dtype(dtype) + assert to_numpy(trace_est).dtype == npp.dtype(dtype) assert_almost_equal(trace_true, trace_est, decimal=-1) diff --git a/pytests/test_ffts.py b/pytests/test_ffts.py index c98e85a43..188ddaa94 100644 --- a/pytests/test_ffts.py +++ b/pytests/test_ffts.py @@ -28,7 +28,8 @@ def _choose_random_axes(ndim, n_choices=2): [-1, -2], [-2, 1], [1, -2], [0, -1] or [-1, 0]. """ if ndim < n_choices: - raise ValueError("ndim < n_choices") + msg = "ndim < n_choices" + raise ValueError(msg) axes_choices = list(range(-ndim, ndim)) axes = [] for _ in range(n_choices): @@ -289,15 +290,33 @@ def _choose_random_axes(ndim, n_choices=2): @pytest.mark.parametrize("par", [par1]) def test_unknown_engine(par): """Check error is raised if unknown engine is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`engine` must be"): _ = FFT( - dims=[par["nt"]], + dims=(par["nt"],), nfft=par["nfft"], sampling=0.005, real=par["real"], engine="foo", ) + with pytest.raises(ValueError, match="`engine` must be"): + _ = FFT2D( + dims=(par["nx"], par["nt"]), + nfft=(par["nfft"], par["nfft"]), + sampling=0.005, + real=par["real"], + engine="foo", + ) + + with pytest.raises(ValueError, match="`engine` must be"): + _ = FFTND( + dims=(par["ny"], par["nx"], par["nt"]), + nfft=(par["nfft"], par["nfft"], par["nfft"]), + sampling=0.005, + real=par["real"], + engine="foo", + ) + dtype_precision = [ (np.float16, 1), @@ -315,7 +334,7 @@ def test_unknown_engine(par): ) # Generate all combinations of the above parameters pars_fft_small_real = [ - dict(zip(par_lists_fft_small_real.keys(), value)) + dict(zip(par_lists_fft_small_real.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft_small_real.values()) ] @@ -390,7 +409,7 @@ def test_FFT_small_real(par): engine=["numpy", "fftw", "scipy", "mkl_fft"], ) pars_fft_random_real = [ - dict(zip(par_lists_fft_random_real.keys(), value)) + dict(zip(par_lists_fft_random_real.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft_random_real.values()) ] @@ -452,7 +471,7 @@ def test_FFT_random_real(par): engine=["numpy", "fftw", "scipy", "mkl_fft"], ) pars_fft_small_cpx = [ - dict(zip(par_lists_fft_small_cpx.keys(), value)) + dict(zip(par_lists_fft_small_cpx.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft_small_cpx.values()) ] @@ -526,7 +545,7 @@ def test_FFT_small_complex(par): engine=["numpy", "fftw", "scipy", "mkl_fft"], ) pars_fft_random_cpx = [ - dict(zip(par_lists_fft_random_cpx.keys(), value)) + dict(zip(par_lists_fft_random_cpx.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft_random_cpx.values()) ] @@ -611,7 +630,7 @@ def test_FFT_random_complex(par): engine=["numpy", "scipy", "mkl_fft"], ) pars_fft2d_random_real = [ - dict(zip(par_lists_fft2d_random_real.keys(), value)) + dict(zip(par_lists_fft2d_random_real.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft2d_random_real.values()) ] @@ -678,7 +697,7 @@ def test_FFT2D_random_real(par): ) # Generate all combinations of the above parameters pars_fft2d_random_cpx = [ - dict(zip(par_lists_fft2d_random_cpx.keys(), value)) + dict(zip(par_lists_fft2d_random_cpx.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft2d_random_cpx.values()) ] @@ -715,11 +734,11 @@ def test_FFT2D_random_complex(par): # Compute FFT of x independently x_ishift = x.copy() - for axis, ishift in zip(axes, ifftshift_before): + for axis, ishift in zip(axes, ifftshift_before, strict=True): if ishift: x_ishift = np.fft.ifftshift(x_ishift, axes=int(axis)) y_true = np.fft.fft2(x_ishift, axes=axes, norm="ortho") - for axis, fshift in zip(axes, fftshift_after): + for axis, fshift in zip(axes, fftshift_after, strict=True): if fshift: y_true = np.fft.fftshift(y_true, axes=int(axis)) y_true = y_true.ravel() @@ -761,7 +780,7 @@ def test_FFT2D_random_complex(par): engine=["numpy", "scipy", "mkl_fft"], ) pars_fftnd_random_real = [ - dict(zip(par_lists_fftnd_random_real.keys(), value)) + dict(zip(par_lists_fftnd_random_real.keys(), value, strict=True)) for value in itertools.product(*par_lists_fftnd_random_real.values()) ] @@ -824,7 +843,7 @@ def test_FFTND_random_real(par): ) # Generate all combinations of the above parameters pars_fftnd_random_cpx = [ - dict(zip(par_lists_fftnd_random_cpx.keys(), value)) + dict(zip(par_lists_fftnd_random_cpx.keys(), value, strict=True)) for value in itertools.product(*par_lists_fftnd_random_cpx.values()) ] @@ -863,11 +882,11 @@ def test_FFTND_random_complex(par): # Compute FFT of x independently x_ishift = x.copy() - for axis, ishift in zip(axes, ifftshift_before): + for axis, ishift in zip(axes, ifftshift_before, strict=True): if ishift: x_ishift = np.fft.ifftshift(x_ishift, axes=int(axis)) y_true = np.fft.fft2(x_ishift, axes=axes, norm="ortho") - for axis, fshift in zip(axes, fftshift_after): + for axis, fshift in zip(axes, fftshift_after, strict=True): if fshift: y_true = np.fft.fftshift(y_true, axes=int(axis)) y_true = y_true.ravel() @@ -902,7 +921,7 @@ def test_FFTND_random_complex(par): engine=["numpy", "scipy", "mkl_fft"], ) pars_fft2dnd_small_cpx = [ - dict(zip(par_lists_fft2dnd_small_cpx.keys(), value)) + dict(zip(par_lists_fft2dnd_small_cpx.keys(), value, strict=True)) for value in itertools.product(*par_lists_fft2dnd_small_cpx.values()) ] @@ -1040,6 +1059,8 @@ def test_FFTND_small_complex(par): def test_FFT_1dsignal(par): if par["engine"] == "mkl_fft" and not mkl_fft_enabled: pytest.skip("mkl_fft is not installed") + if par["engine"] == "fftw" and backend == "cupy": + pytest.skip("fftw does not work with CuPy arrays") np.random.seed(5) """Dot-test and inversion for FFT operator for 1d signal""" decimal = 3 if np.real(np.ones(1, par["dtype"])).dtype == np.float32 else 8 @@ -1159,6 +1180,8 @@ def test_FFT_2dsignal(par): """ if par["engine"] == "mkl_fft" and not mkl_fft_enabled: pytest.skip("mkl_fft is not installed") + if par["engine"] == "fftw" and backend == "cupy": + pytest.skip("fftw does not work with CuPy arrays") np.random.seed(5) decimal = 3 if np.real(np.ones(1, par["dtype"])).dtype == np.float32 else 8 @@ -1376,6 +1399,8 @@ def test_FFT_3dsignal(par): """ if par["engine"] == "mkl_fft" and not mkl_fft_enabled: pytest.skip("mkl_fft is not installed") + if par["engine"] == "fftw" and backend == "cupy": + pytest.skip("fftw does not work with CuPy arrays") np.random.seed(5) decimal = 3 if np.real(np.ones(1, par["dtype"])).dtype == np.float32 else 8 diff --git a/pytests/test_fourierradon.py b/pytests/test_fourierradon.py index 5d147f875..a09590cb2 100644 --- a/pytests/test_fourierradon.py +++ b/pytests/test_fourierradon.py @@ -67,13 +67,13 @@ def test_unknown_engine2D(): """Check error is raised if unknown engine is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`engine` must be"): _ = FourierRadon2D(None, None, None, None, engine="foo") def test_unknown_engine3D(): """Check error is raised if unknown engine is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`engine` must be"): _ = FourierRadon3D(None, None, None, None, None, None, engine="foo") diff --git a/pytests/test_fredholm.py b/pytests/test_fredholm.py index f5c687ebb..12e6a72a3 100644 --- a/pytests/test_fredholm.py +++ b/pytests/test_fredholm.py @@ -10,7 +10,6 @@ from numpy.testing import assert_array_almost_equal backend = "numpy" -import itertools import pytest @@ -53,7 +52,6 @@ "ny": 6, "nx": 4, "nz": 5, - "saveGt": False, "usematmul": False, "saveGt": False, "imag": 1j, @@ -85,15 +83,18 @@ def test_Fredholm1(par): """Dot-test and inversion for Fredholm1 operator""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - _F = np.arange(par["nsl"] * par["nx"] * par["ny"]).reshape( - par["nsl"], par["nx"], par["ny"] + _F = ( + np.arange(par["nsl"] * par["nx"] * par["ny"]) + .reshape(par["nsl"], par["nx"], par["ny"]) + .astype(dtype) ) F = _F - par["imag"] * _F - x = np.ones((par["nsl"], par["ny"], par["nz"])) + par["imag"] * np.ones( - (par["nsl"], par["ny"], par["nz"]) - ) + x = np.ones((par["nsl"], par["ny"], par["nz"]), dtype=dtype) + par[ + "imag" + ] * np.ones((par["nsl"], par["ny"], par["nz"]), dtype=dtype) Fop = Fredholm1( F, @@ -107,8 +108,15 @@ def test_Fredholm1(par): par["nsl"] * par["nx"] * par["nz"], par["nsl"] * par["ny"] * par["nz"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + y = Fop @ x.ravel() + xadj = Fop.H @ y + assert y.dtype == Fop.dtype + assert xadj.dtype == par["dtype"] + xlsqr = lsqr( Fop, Fop * x.ravel(), diff --git a/pytests/test_functionoperator.py b/pytests/test_functionoperator.py index ddfe88774..bb089e721 100644 --- a/pytests/test_functionoperator.py +++ b/pytests/test_functionoperator.py @@ -5,19 +5,18 @@ by wrapping a matrix multiplication as a FunctionOperator. Also provides a good starting point for new tests. """ + import itertools import os if int(os.environ.get("TEST_CUPY_PYLOPS", 0)): import cupy as np from cupy.testing import assert_array_almost_equal, assert_array_equal - from cupyx.scipy.sparse import rand backend = "cupy" else: import numpy as np from numpy.testing import assert_array_almost_equal, assert_array_equal - from scipy.sparse import rand backend = "numpy" import pytest @@ -80,6 +79,8 @@ def adjoint_f(y): F_x = Fop @ x FH_y = Fop.H @ y + assert F_x.dtype == par["dtype"] + assert FH_y.dtype == par["dtype"] G_x = np.asarray(G @ x) GH_y = np.asarray(np.conj(G.T) @ y) @@ -126,8 +127,9 @@ def forward_f(x): F_x = Fop @ x G_x = np.asarray(G @ x) + assert F_x.dtype == par["dtype"] assert_array_equal(F_x, G_x) # check error is raised when applying the adjoint - with pytest.raises(NotImplementedError): + with pytest.raises(NotImplementedError, match="Adjoint not implemented"): _ = Fop.H @ y diff --git a/pytests/test_interpolation.py b/pytests/test_interpolation.py index a22c04ef9..a81ca9761 100644 --- a/pytests/test_interpolation.py +++ b/pytests/test_interpolation.py @@ -1,3 +1,6 @@ +from dataclasses import dataclass +from typing import Final, Literal + import numpy as np import pytest from numpy.testing import assert_array_almost_equal @@ -5,57 +8,104 @@ from pylops.signalprocessing import Bilinear, Interp from pylops.utils import dottest -par1 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 0, - "dtype": "float64", - "kind": "nearest", -} # real, nearest -par2 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 1j, - "dtype": "complex128", - "kind": "nearest", -} # complex, nearest -par3 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 0, - "dtype": "float64", - "kind": "linear", -} # real, linear -par4 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 1j, - "dtype": "complex128", - "kind": "linear", -} # complex, linear -par5 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 0, - "dtype": "float64", - "kind": "sinc", -} # real, sinc -par6 = { - "ny": 21, - "nx": 11, - "nt": 20, - "imag": 1j, - "dtype": "complex128", - "kind": "sinc", -} # complex, sinc + +@dataclass(slots=True) +class InterpolationTestParameters: + """ + Test parameters for testing :class:`pylops.signalprocessing.Interp`. + + """ + + y_num: int + x_num: int + t_num: int + imag: complex + kind: Literal["nearest", "linear", "sinc", "cubic_spline"] + + +par1 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=0, + kind="nearest", + ), + id="nearest - real", +) +par2 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=1j, + kind="nearest", + ), + id="nearest - complex", +) +par3 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=0, + kind="linear", + ), + id="linear - real", +) +par4 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=1j, + kind="linear", + ), + id="linear - complex", +) +par5 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=0, + kind="sinc", + ), + id="sinc - real", +) +par6 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=1j, + kind="sinc", + ), + id="sinc - complex", +) +par7 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=0, + kind="cubic_spline", + ), + id="cubic natural spline - real", +) +par8 = pytest.param( + InterpolationTestParameters( + y_num=21, + x_num=11, + t_num=20, + imag=1j, + kind="cubic_spline", + ), + id="cubic natural spline - complex", +) # subsampling factor -perc_subsampling = 0.4 +SUBSAMPLING_PERCENTAGE: Final[float] = 0.4 def test_sincinterp(): @@ -88,341 +138,429 @@ def test_sincinterp(): assert_array_almost_equal(xsub[20:-20], y, decimal=1) -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Interp_1dsignal(par): +@pytest.mark.parametrize( + "par", + [ + (par1), + (par2), + (par3), + (par4), + (par5), + (par6), + (par7), + (par8), + ], +) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Interp_1dsignal(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Interp operator for 1d signal""" np.random.seed(1) - x = np.random.normal(0, 1, par["nx"]) + par["imag"] * np.random.normal( - 0, 1, par["nx"] - ) + dtype = dtype if par.kind != "cubic_spline" else np.float64 + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype - Nsub = int(np.round(par["nx"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["nx"]))[:Nsub]) + x = np.random.normal(0, 1, par.x_num).astype(dtype) + par.imag * np.random.normal( + 0, 1, par.x_num + ).astype(dtype) + + Nsub = int(np.round(par.x_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.x_num))[:Nsub]) # fixed indeces - Iop, _ = Interp(par["nx"], iava, kind=par["kind"], dtype=par["dtype"]) - assert dottest(Iop, Nsub, par["nx"], complexflag=0 if par["imag"] == 0 else 3) + Iop, _ = Interp(par.x_num, iava, kind=par.kind, dtype=dtype1) + assert dottest( + Iop, + Nsub, + par.x_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, + ) # decimal indeces - Idecop, _ = Interp(par["nx"], iava + 0.3, kind=par["kind"], dtype=par["dtype"]) - assert dottest(Iop, Nsub, par["nx"], complexflag=0 if par["imag"] == 0 else 3) + Idecop, _ = Interp(par.x_num, iava + 0.3, kind=par.kind, dtype=dtype1) + assert dottest( + Iop, + Nsub, + par.x_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, + ) # repeated indeces - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="repeated"): iava_rep = iava.copy() iava_rep[-2] = 0 iava_rep[-1] = 0 - _, _ = Interp(par["nx"], iava_rep + 0.3, kind=par["kind"], dtype=par["dtype"]) + _, _ = Interp(par.x_num, iava_rep + 0.3, kind=par.kind, dtype=dtype) # forward y = Iop * x ydec = Idecop * x + assert y.dtype == dtype1 + assert ydec.dtype == dtype1 assert_array_almost_equal(y, x[iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[iava]) -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Interp_2dsignal(par): +@pytest.mark.parametrize( + "par", + [ + (par1), + (par2), + (par3), + (par4), + (par5), + (par6), + (par7), + (par8), + ], +) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Interp_2dsignal(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Restriction operator for 2d signal""" np.random.seed(1) - x = np.random.normal(0, 1, (par["nx"], par["nt"])) + par["imag"] * np.random.normal( - 0, 1, (par["nx"], par["nt"]) - ) + dtype = dtype if par.kind != "cubic_spline" else np.float64 + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype + + x = np.random.normal(0, 1, (par.x_num, par.t_num)).astype( + dtype + ) + par.imag * np.random.normal(0, 1, (par.x_num, par.t_num)).astype(dtype) # 1st direction - Nsub = int(np.round(par["nx"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["nx"]))[:Nsub]) + Nsub = int(np.round(par.x_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.x_num))[:Nsub]) # fixed indeces Iop, _ = Interp( - (par["nx"], par["nt"]), + (par.x_num, par.t_num), iava, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Iop, - Nsub * par["nt"], - par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + Nsub * par.t_num, + par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces Idecop, _ = Interp( - (par["nx"], par["nt"]), + (par.x_num, par.t_num), iava + 0.3, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) # repeated indeces - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="repeated"): iava_rep = iava.copy() iava_rep[-2] = 0 iava_rep[-1] = 0 _, _ = Interp( - (par["nx"], par["nt"]), + (par.x_num, par.t_num), iava_rep + 0.3, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) - y = (Iop * x.ravel()).reshape(Nsub, par["nt"]) - ydec = (Idecop * x.ravel()).reshape(Nsub, par["nt"]) + y = (Iop * x.ravel()).reshape(Nsub, par.t_num) + ydec = (Idecop * x.ravel()).reshape(Nsub, par.t_num) assert_array_almost_equal(y, x[iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[iava]) # 2nd direction - Nsub = int(np.round(par["nt"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["nt"]))[:Nsub]) + Nsub = int(np.round(par.t_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.t_num))[:Nsub]) # fixed indeces Iop, _ = Interp( - (par["nx"], par["nt"]), + (par.x_num, par.t_num), iava, axis=1, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Iop, - par["nx"] * Nsub, - par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.x_num * Nsub, + par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces Idecop, _ = Interp( - (par["nx"], par["nt"]), + (par.x_num, par.t_num), iava + 0.3, axis=1, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Idecop, - par["nx"] * Nsub, - par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.x_num * Nsub, + par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) - y = (Iop * x.ravel()).reshape(par["nx"], Nsub) - ydec = (Idecop * x.ravel()).reshape(par["nx"], Nsub) + y = (Iop * x.ravel()).reshape(par.x_num, Nsub) + ydec = (Idecop * x.ravel()).reshape(par.x_num, Nsub) assert_array_almost_equal(y, x[:, iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[:, iava]) -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Interp_3dsignal(par): +@pytest.mark.parametrize( + "par", + [ + (par1), + (par2), + (par3), + (par4), + (par5), + (par6), + (par7), + (par8), + ], +) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Interp_3dsignal(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Interp operator for 3d signal""" np.random.seed(1) - x = np.random.normal(0, 1, (par["ny"], par["nx"], par["nt"])) + par[ - "imag" - ] * np.random.normal(0, 1, (par["ny"], par["nx"], par["nt"])) + dtype = dtype if par.kind != "cubic_spline" else np.float64 + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype + + x = np.random.normal(0, 1, (par.y_num, par.x_num, par.t_num)).astype( + dtype + ) + par.imag * np.random.normal(0, 1, (par.y_num, par.x_num, par.t_num)).astype( + dtype + ) # 1st direction - Nsub = int(np.round(par["ny"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["ny"]))[:Nsub]) + Nsub = int(np.round(par.y_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.y_num))[:Nsub]) # fixed indeces Iop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Iop, - Nsub * par["nx"] * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + Nsub * par.x_num * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces Idecop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava + 0.3, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Idecop, - Nsub * par["nx"] * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + Nsub * par.x_num * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # repeated indeces - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="repeated"): iava_rep = iava.copy() iava_rep[-2] = 0 iava_rep[-1] = 0 _, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava_rep + 0.3, axis=0, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype, ) - y = (Iop * x.ravel()).reshape(Nsub, par["nx"], par["nt"]) - ydec = (Idecop * x.ravel()).reshape(Nsub, par["nx"], par["nt"]) + y = (Iop * x.ravel()).reshape(Nsub, par.x_num, par.t_num) + ydec = (Idecop * x.ravel()).reshape(Nsub, par.x_num, par.t_num) assert_array_almost_equal(y, x[iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[iava]) # 2nd direction - Nsub = int(np.round(par["nx"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["nx"]))[:Nsub]) + Nsub = int(np.round(par.x_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.x_num))[:Nsub]) # fixed indeces Iop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava, axis=1, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Iop, - par["ny"] * Nsub * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.y_num * Nsub * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces Idecop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava + 0.3, axis=1, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Idecop, - par["ny"] * Nsub * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.y_num * Nsub * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) - y = (Iop * x.ravel()).reshape(par["ny"], Nsub, par["nt"]) - ydec = (Idecop * x.ravel()).reshape(par["ny"], Nsub, par["nt"]) + y = (Iop * x.ravel()).reshape(par.y_num, Nsub, par.t_num) + ydec = (Idecop * x.ravel()).reshape(par.y_num, Nsub, par.t_num) assert_array_almost_equal(y, x[:, iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[:, iava]) # 3rd direction - Nsub = int(np.round(par["nt"] * perc_subsampling)) - iava = np.sort(np.random.permutation(np.arange(par["nt"]))[:Nsub]) + Nsub = int(np.round(par.t_num * SUBSAMPLING_PERCENTAGE)) + iava = np.sort(np.random.permutation(np.arange(par.t_num))[:Nsub]) # fixed indeces Iop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava, axis=2, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Iop, - par["ny"] * par["nx"] * Nsub, - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.y_num * par.x_num * Nsub, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces Idecop, _ = Interp( - (par["ny"], par["nx"], par["nt"]), + (par.y_num, par.x_num, par.t_num), iava + 0.3, axis=2, - kind=par["kind"], - dtype=par["dtype"], + kind=par.kind, + dtype=dtype1, ) assert dottest( Idecop, - par["ny"] * par["nx"] * Nsub, - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + par.y_num * par.x_num * Nsub, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) - y = (Iop * x.ravel()).reshape(par["ny"], par["nx"], Nsub) - ydec = (Idecop * x.ravel()).reshape(par["ny"], par["nx"], Nsub) + y = (Iop * x.ravel()).reshape(par.y_num, par.x_num, Nsub) + ydec = (Idecop * x.ravel()).reshape(par.y_num, par.x_num, Nsub) assert_array_almost_equal(y, x[:, :, iava]) - if par["kind"] == "nearest": + if par.kind == "nearest": assert_array_almost_equal(ydec, x[:, :, iava]) @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_Bilinear_2dsignal(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Bilinear_2dsignal(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Interp operator for 2d signal""" np.random.seed(1) - x = np.random.normal(0, 1, (par["nx"], par["nt"])) + par["imag"] * np.random.normal( - 0, 1, (par["nx"], par["nt"]) - ) + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype + + x = np.random.normal(0, 1, (par.x_num, par.t_num)).astype( + dtype1 + ) + par.imag * np.random.normal(0, 1, (par.x_num, par.t_num)).astype(dtype1) # fixed indeces iava = np.vstack((np.arange(0, 10), np.arange(0, 10))) - Iop = Bilinear(iava, dims=(par["nx"], par["nt"]), dtype=par["dtype"]) + Iop = Bilinear(iava, dims=(par.x_num, par.t_num), dtype=dtype1) assert dottest( - Iop, 10, par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3 + Iop, + 10, + par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces - Nsub = int(np.round(par["nx"] * par["nt"] * perc_subsampling)) + Nsub = int(np.round(par.x_num * par.t_num * SUBSAMPLING_PERCENTAGE)) iavadec = np.vstack( ( - np.random.uniform(0, par["nx"] - 1, Nsub), - np.random.uniform(0, par["nt"] - 1, Nsub), + np.random.uniform(0, par.x_num - 1, Nsub), + np.random.uniform(0, par.t_num - 1, Nsub), ) ) - Idecop = Bilinear(iavadec, dims=(par["nx"], par["nt"]), dtype=par["dtype"]) + Idecop = Bilinear(iavadec, dims=(par.x_num, par.t_num), dtype=dtype1) assert dottest( - Idecop, Nsub, par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3 + Idecop, + Nsub, + par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # repeated indeces - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="repeated"): iava_rep = iava.copy() - iava_rep[-2] = [0, 0] - iava_rep[-1] = [0, 0] - _, _ = Bilinear(iava_rep, dims=(par["nx"], par["nt"]), dtype=par["dtype"]) + iava_rep[::, -1] = iava_rep[::, 0] + _, _ = Bilinear(iava_rep, dims=(par.x_num, par.t_num), dtype=dtype1) y = Iop * x.ravel() assert_array_almost_equal(y, x[iava[0], iava[1]]) @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_Bilinear_2dsignal_flatten(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Bilinear_2dsignal_flatten(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Interp operator for 2d signal with forceflat""" np.random.seed(1) - dims = (par["nx"], par["nt"]) - flat_dims = par["nx"] * par["nt"] + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype + + dims = (par.x_num, par.t_num) + flat_dims = par.x_num * par.t_num dimsd = 10 - x = np.random.normal(0, 1, dims) + par["imag"] * np.random.normal(0, 1, dims) + x = np.random.normal(0, 1, dims).astype(dtype1) + par.imag * np.random.normal( + 0, 1, dims + ).astype(dtype1) iava = np.vstack((np.arange(0, dimsd), np.arange(0, dimsd))) - Iop_True = Bilinear(iava, dims=dims, dtype=par["dtype"], forceflat=True) + Iop_True = Bilinear(iava, dims=dims, dtype=dtype1, forceflat=True) y = Iop_True @ x xadj = Iop_True.H @ y assert y.shape == (dimsd,) assert xadj.shape == (flat_dims,) - Iop_None = Bilinear(iava, dims=dims, dtype=par["dtype"]) + Iop_None = Bilinear(iava, dims=dims, dtype=dtype1) y = Iop_None @ x xadj = Iop_None.H @ y assert y.shape == (dimsd,) @@ -430,49 +568,51 @@ def test_Bilinear_2dsignal_flatten(par): @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_Bilinear_3dsignal(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Bilinear_3dsignal(par: InterpolationTestParameters, dtype: np.dtype): """Dot-test and forward for Interp operator for 3d signal""" np.random.seed(1) - x = np.random.normal(0, 1, (par["ny"], par["nx"], par["nt"])) + par[ - "imag" - ] * np.random.normal(0, 1, (par["ny"], par["nx"], par["nt"])) + dtype1 = (np.empty(0, dtype=dtype) + par.imag * np.empty(0, dtype=dtype)).dtype + + x = np.random.normal(0, 1, (par.y_num, par.x_num, par.t_num)).astype( + dtype1 + ) + par.imag * np.random.normal(0, 1, (par.y_num, par.x_num, par.t_num)).astype( + dtype1 + ) # fixed indeces iava = np.vstack((np.arange(0, 10), np.arange(0, 10))) - Iop = Bilinear(iava, dims=(par["ny"], par["nx"], par["nt"]), dtype=par["dtype"]) + Iop = Bilinear(iava, dims=(par.y_num, par.x_num, par.t_num), dtype=dtype1) assert dottest( Iop, - 10 * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + 10 * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # decimal indeces - Nsub = int(np.round(par["ny"] * par["nt"] * perc_subsampling)) + Nsub = int(np.round(par.y_num * par.t_num * SUBSAMPLING_PERCENTAGE)) iavadec = np.vstack( ( - np.random.uniform(0, par["ny"] - 1, Nsub), - np.random.uniform(0, par["nx"] - 1, Nsub), + np.random.uniform(0, par.y_num - 1, Nsub), + np.random.uniform(0, par.x_num - 1, Nsub), ) ) - Idecop = Bilinear( - iavadec, dims=(par["ny"], par["nx"], par["nt"]), dtype=par["dtype"] - ) + Idecop = Bilinear(iavadec, dims=(par.y_num, par.x_num, par.t_num), dtype=dtype1) assert dottest( Idecop, - Nsub * par["nt"], - par["ny"] * par["nx"] * par["nt"], - complexflag=0 if par["imag"] == 0 else 3, + Nsub * par.t_num, + par.y_num * par.x_num * par.t_num, + complexflag=0 if par.imag == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) # repeated indeces - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="repeated"): iava_rep = iava.copy() - iava_rep[-2] = [0, 0] - iava_rep[-1] = [0, 0] - _, _ = Bilinear( - iava_rep, dims=(par["ny"], par["nx"], par["nt"]), dtype=par["dtype"] - ) + iava_rep[::, -1] = iava_rep[::, 0] + _, _ = Bilinear(iava_rep, dims=(par.y_num, par.x_num, par.t_num), dtype=dtype1) y = Iop * x.ravel() assert_array_almost_equal(y, x[iava[0], iava[1]].ravel()) diff --git a/pytests/test_interpolation_spline.py b/pytests/test_interpolation_spline.py new file mode 100644 index 000000000..a181b3bd3 --- /dev/null +++ b/pytests/test_interpolation_spline.py @@ -0,0 +1,187 @@ +from math import prod +from typing import Final + +import numpy as np +import pytest +from scipy.interpolate import CubicSpline + +from pylops.signalprocessing import InterpCubicSpline +from pylops.utils import dottest + +TEST_ARRAY_SHAPE: Final[tuple] = ( + 20, + 51, + 2, # <- this dimension is exactly 2 because this triggers a special solver + 12, +) +TEST_X_RANGE: Final[tuple[float, float]] = (-5.0, 5.0) +MIN_NUM_TEST_SAMPLES: Final[int] = 1 + + +def test_cubic_spline_raises_on_not_supported_bc_type() -> None: + """ + Tests whether ``pylops.signalprocessing.InterpCubicSpline`` raises a + ``NotImplementedError`` for boundary conditions that are not supported. + + """ + + with pytest.raises(NotImplementedError): + InterpCubicSpline( + dims=(5, 2), + iava=np.array([0.5, 2.3]), + bc_type="erroneous", # type: ignore + ) + + +@pytest.mark.parametrize( + "with_complex", + [ + pytest.param(False, id="real"), + pytest.param(True, id="complex"), + ], +) +@pytest.mark.parametrize( + "axis", + [ + 0, + 1, + 2, + 3, + -1, + -2, + -3, + ], +) +@pytest.mark.parametrize( + "subsample_fraction", + [ + pytest.param(0.5, id="decimation"), + pytest.param(5.0, id="upsampling"), + ], +) +def test_natural_cubic_spline_dottest( + subsample_fraction: float, + axis: int, + with_complex: bool, +) -> None: + """ + Tests ``pylops.signalprocessing.InterpCubicSpline`` with the ``dottest``. + + """ + + # Setup + + num_samples = TEST_ARRAY_SHAPE[axis] + x_eval_fractions = np.random.rand( + max( + round(num_samples * subsample_fraction), + MIN_NUM_TEST_SAMPLES, + ) + ) + x_eval_for_pylops = (num_samples - 1) * x_eval_fractions + + shape_list = list(TEST_ARRAY_SHAPE) + shape_list[axis] = x_eval_fractions.size # type: ignore + num_rows = prod(shape_list, start=1) + num_columns = prod(TEST_ARRAY_SHAPE, start=1) + + # Test + + splinop = InterpCubicSpline( + dims=TEST_ARRAY_SHAPE, + iava=x_eval_for_pylops, + axis=axis, + dtype="complex128" if with_complex else "float64", + ) + + assert dottest( + Op=splinop, + nr=num_rows, + nc=num_columns, + complexflag=0 if not with_complex else 3, + ) + + +@pytest.mark.parametrize( + "with_complex", + [ + pytest.param(False, id="real"), + pytest.param(True, id="complex"), + ], +) +@pytest.mark.parametrize( + "axis", + [ + 0, + 1, + 2, + 3, + -1, + -2, + -3, + ], +) +@pytest.mark.parametrize( + "subsample_fraction", + [ + pytest.param(0.5, id="decimation"), + pytest.param(5.0, id="upsampling"), + ], +) +def test_natural_cubic_spline_against_scipy( + subsample_fraction: float, + axis: int, + with_complex: bool, +) -> None: + """ + Tests ``pylops.signalprocessing.InterpCubicSpline`` against the equivalent + implementation ``scipy.interpolate.CubicSpline`` for the natural boundary condition. + + """ + + # Setup + + np.random.seed(0) + + num_samples = TEST_ARRAY_SHAPE[axis] + x_fit = np.linspace( + start=TEST_X_RANGE[0], + stop=TEST_X_RANGE[1], + num=num_samples, + ) + y_fit = np.random.randn(*TEST_ARRAY_SHAPE) + if with_complex: + y_fit = y_fit.astype(np.complex128) + y_fit.imag = np.random.randn(*TEST_ARRAY_SHAPE) + + x_eval_fractions = np.random.rand( + max( + round(num_samples * subsample_fraction), + MIN_NUM_TEST_SAMPLES, + ) + ) + x_eval_for_pylops = (num_samples - 1) * x_eval_fractions + x_eval_for_scipy = TEST_X_RANGE[0] + x_eval_fractions * ( + TEST_X_RANGE[1] - TEST_X_RANGE[0] + ) + + dtype = "complex128" if with_complex else "float64" + + # Test + + splinop = InterpCubicSpline( + dims=TEST_ARRAY_SHAPE, + iava=x_eval_for_pylops, + axis=axis, + dtype=dtype, + ) + y_eval_pylops = splinop * y_fit + + y_eval_scipy = CubicSpline( + x=x_fit, + y=y_fit, + bc_type="natural", + axis=axis, + )(x=x_eval_for_scipy) + + assert np.allclose(y_eval_pylops, y_eval_scipy) diff --git a/pytests/test_jaxoperator.py b/pytests/test_jaxoperator.py index 1b11adb92..84acc8ee4 100644 --- a/pytests/test_jaxoperator.py +++ b/pytests/test_jaxoperator.py @@ -40,6 +40,8 @@ def test_JaxOperator(par): # jax operator yjnp = Jop * xjnp xadjnp = Jop.rmatvecad(xjnp, yjnp) + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(y, np.array(yjnp)) assert_array_equal(xadj, np.array(xadjnp)) @@ -49,7 +51,7 @@ def test_JaxOperator(par): int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1)]) -def test_TorchOperator_batch(par): +def test_JaxOperator_batch(par): """Apply forward for input with multiple samples (= batch) and flattened arrays""" @@ -63,5 +65,7 @@ def test_TorchOperator_batch(par): y = Mop.matmat(x.T).T yjnp = auto_batch_matvec(xjnp) + assert y.dtype == par["dtype"] + assert yjnp.dtype == par["dtype"] assert_array_almost_equal(y, np.array(yjnp), decimal=5) diff --git a/pytests/test_kirchhoff.py b/pytests/test_kirchhoff.py index da672b0dd..1c9129f61 100644 --- a/pytests/test_kirchhoff.py +++ b/pytests/test_kirchhoff.py @@ -35,12 +35,12 @@ } # Check if skfmm is available and by-pass tests using it otherwise. This is -# currently required for Travis as since we moved to Python3.8 it has -# stopped working +# currently used in GPU CI not to run tests that require skfmm to compute the +# traveltime tables - should consider fixing it try: import skfmm # noqa: F401 - skfmm_enabled = True + skfmm_enabled = True if backend == "numpy" else False except ImportError: skfmm_enabled = False @@ -198,7 +198,14 @@ def test_traveltime_table(): _, ) = Kirchhoff._traveltime_table(z, x, s3d, r3d, v0, y=y, mode="analytic") - (trav_srcs_eik, trav_recs_eik, _, _, _, _,) = Kirchhoff._traveltime_table( + ( + trav_srcs_eik, + trav_recs_eik, + _, + _, + _, + _, + ) = Kirchhoff._traveltime_table( z, x, s3d, @@ -213,16 +220,19 @@ def test_traveltime_table(): @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par1d), (par2d), (par3d)]) -def test_kirchhoff2d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_kirchhoff2d(par, dtype): """Dot-test for Kirchhoff operator""" if backend == "cupy" and par["mode"] == "byot": pytest.skip("cuda engine not available for single trav table") - vel = v0 * np.ones((PAR["nx"], PAR["nz"])) + vel = v0 * np.ones((PAR["nx"], PAR["nz"]), dtype=dtype) if par["mode"] == "byot": trav_srcs, trav_recs, _, _, _, _ = Kirchhoff._traveltime_table( z, x, s2d, r2d, v0, mode="analytic" ) + trav_srcs = trav_srcs.astype(dtype) + trav_recs = trav_recs.astype(dtype) trav = trav_srcs.reshape( PAR["nx"] * PAR["nz"], PAR["nsx"], 1 ) + trav_recs.reshape(PAR["nx"] * PAR["nz"], 1, PAR["nrx"]) @@ -234,19 +244,20 @@ def test_kirchhoff2d(par): if skfmm_enabled or par["mode"] != "eikonal": Dop = Kirchhoff( - z, - x, - t, - s2d, - r2d, + z.astype(dtype), + x.astype(dtype), + t.astype(dtype), + s2d.astype(dtype), + r2d.astype(dtype), vel if par["mode"] == "eikonal" else v0, - np.asarray(wav), + np.asarray(wav.astype(dtype)), wavc, y=None, trav=trav, amp=amp, mode=par["mode"], engine="numpy" if backend == "numpy" else "cuda", + dtype=dtype, ) if par["mode"] == "byot": Dop.trav = np.asarray(Dop.trav) @@ -262,20 +273,30 @@ def test_kirchhoff2d(par): PAR["nsx"] * PAR["nrx"] * PAR["nt"], PAR["nz"] * PAR["nx"], backend=backend, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) + xx = np.random.normal(0, 1, PAR["nx"] * PAR["nz"]).astype(dtype) + yy = Dop * xx + xadj = Dop.H * yy + assert yy.dtype == dtype + assert xadj.dtype == dtype + @pytest.mark.parametrize("par", [(par1), (par2), (par3)]) -def test_kirchhoff3d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_kirchhoff3d(par, dtype): """Dot-test for Kirchhoff operator""" if backend == "cupy" and par["mode"] == "byot": pytest.skip("cuda engine not available for single trav table") - vel = v0 * np.ones((PAR["ny"], PAR["nx"], PAR["nz"])) + vel = v0 * np.ones((PAR["ny"], PAR["nx"], PAR["nz"]), dtype=dtype) if par["mode"] == "byot": trav_srcs, trav_recs, _, _, _, _ = Kirchhoff._traveltime_table( z, x, s3d, r3d, v0, y=y, mode="analytic" ) + trav_srcs = trav_srcs.astype(dtype) + trav_recs = trav_recs.astype(dtype) trav = trav_srcs.reshape( PAR["ny"] * PAR["nx"] * PAR["nz"], PAR["nsy"] * PAR["nsx"], 1 ) + trav_recs.reshape( @@ -290,18 +311,19 @@ def test_kirchhoff3d(par): if skfmm_enabled or par["mode"] != "eikonal": Dop = Kirchhoff( - z, - x, - t, - s3d, - r3d, + z.astype(dtype), + x.astype(dtype), + t.astype(dtype), + s3d.astype(dtype), + r3d.astype(dtype), vel if par["mode"] == "eikonal" else v0, - wav, + np.asarray(wav.astype(dtype)), wavc, - y=y, + y=y.astype(dtype), trav=trav, mode=par["mode"], engine="numpy" if backend == "numpy" else "cuda", + dtype=dtype, ) if par["mode"] == "byot": Dop.trav = np.asarray(Dop.trav) @@ -314,8 +336,15 @@ def test_kirchhoff3d(par): PAR["nsx"] * PAR["nrx"] * PAR["nsy"] * PAR["nry"] * PAR["nt"], PAR["nz"] * PAR["nx"] * PAR["ny"], backend=backend, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) + xx = np.random.normal(0, 1, PAR["ny"] * PAR["nx"] * PAR["nz"]).astype(dtype) + yy = Dop * xx + xadj = Dop.H * yy + assert yy.dtype == dtype + assert xadj.dtype == dtype + @pytest.mark.parametrize( "par", diff --git a/pytests/test_kronecker.py b/pytests/test_kronecker.py index f0582383c..ed188aa4a 100644 --- a/pytests/test_kronecker.py +++ b/pytests/test_kronecker.py @@ -16,19 +16,34 @@ from pylops.optimization.basic import lsqr from pylops.utils import dottest -par1 = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float64"} # square real -par2 = {"ny": 21, "nx": 11, "imag": 0, "dtype": "float64"} # overdetermined real +par1 = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float64"} # square real (fp64) +par2 = {"ny": 21, "nx": 11, "imag": 0, "dtype": "float64"} # overdetermined real (fp64) +par1s = {"ny": 11, "nx": 11, "imag": 0, "dtype": "float32"} # square real (fp32) +par2s = { + "ny": 21, + "nx": 11, + "imag": 0, + "dtype": "float32", +} # overdetermined real (fp32) par1j = {"ny": 11, "nx": 11, "imag": 1j, "dtype": "complex128"} # square imag par2j = {"ny": 21, "nx": 11, "imag": 1j, "dtype": "complex128"} # overdetermined imag -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_Kroneker(par): """Dot-test, inversion and comparison with np.kron for Kronecker operator""" np.random.seed(10) - G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(par["dtype"]) - x = np.ones(par["nx"] ** 2) + par["imag"] * np.ones(par["nx"] ** 2) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + + G1 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + G2 = np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + par[ + "imag" + ] * np.random.normal(0, 10, (par["ny"], par["nx"])).astype(dtype) + x = np.ones(par["nx"] ** 2, dtype=dtype) + par["imag"] * np.ones( + par["nx"] ** 2, dtype=dtype + ) Kop = Kronecker( MatrixMult(G1, dtype=par["dtype"]), @@ -40,8 +55,13 @@ def test_Kroneker(par): par["ny"] ** 2, par["nx"] ** 2, complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Kop * x + xadj = Kop.H * y + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] if backend == "numpy": # cupy is not accurate enough for square systems xlsqr = lsqr( @@ -49,7 +69,7 @@ def test_Kroneker(par): Kop * x, x0=np.zeros_like(x), damp=1e-20, - niter=300, + niter=1000, atol=0, btol=0, conlim=np.inf, @@ -61,23 +81,25 @@ def test_Kroneker(par): assert_array_almost_equal(np.kron(G1, G2), Kop * np.eye(par["nx"] ** 2), decimal=3) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s)]) def test_Kroneker_Derivative(par): """Use Kronecker operator to apply the Derivative operator over one axis and compare with FirstDerivative(... axis=axis) """ - Dop = FirstDerivative(par["ny"], sampling=1, edge=True, dtype="float32") + Dop = FirstDerivative(par["ny"], sampling=1, edge=True, dtype=par["dtype"]) D2op = FirstDerivative( - (par["ny"], par["nx"]), axis=0, sampling=1, edge=True, dtype="float32" + (par["ny"], par["nx"]), axis=0, sampling=1, edge=True, dtype=par["dtype"] ) Kop = Kronecker(Dop, Identity(par["nx"], dtype=par["dtype"]), dtype=par["dtype"]) - x = np.zeros((par["ny"], par["nx"])) + par["imag"] * np.zeros( - (par["ny"], par["nx"]) - ) + x = np.zeros((par["ny"], par["nx"]), dtype=par["dtype"]) x[par["ny"] // 2, par["nx"] // 2] = 1 - y = D2op * x.ravel() yk = Kop * x.ravel() + xadjk = Kop.H * yk + assert yk.dtype == par["dtype"] + assert xadjk.dtype == par["dtype"] + + y = D2op * x.ravel() assert_array_equal(y, yk) diff --git a/pytests/test_linearoperator.py b/pytests/test_linearoperator.py index 0aa9922f3..e413ee381 100644 --- a/pytests/test_linearoperator.py +++ b/pytests/test_linearoperator.py @@ -354,9 +354,9 @@ def test_non_flattened_arrays(par): assert_array_equal(Y_S, (S @ D @ X_1d).reshape((*S.dimsd, -1))) with pylops.disabled_ndarray_multiplication(): - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="only be applied to 1D"): D @ x_nd - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="only be applied to 1D"): D @ X_nd diff --git a/pytests/test_lsm.py b/pytests/test_lsm.py index 9f2b041fa..fe45eb0c9 100644 --- a/pytests/test_lsm.py +++ b/pytests/test_lsm.py @@ -63,7 +63,7 @@ ) def test_unknown_mode(): """Check error is raised if unknown mode is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="mode must be either 'analytic',"): _ = LSM(z, x, t, s2d, r2d, 0, np.ones(3), 1, mode="foo") diff --git a/pytests/test_marchenko.py b/pytests/test_marchenko.py index 6d4edefbf..28e264e4f 100644 --- a/pytests/test_marchenko.py +++ b/pytests/test_marchenko.py @@ -97,54 +97,82 @@ @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_Marchenko_freq(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Marchenko_freq(par, dtype): """Solve marchenko equations using input Rs in frequency domain""" + dtypec = (np.empty(0, dtype=dtype) + 1j * np.empty(0, dtype=dtype)).dtype + if par["prescaled"]: Rtwosided_fft_sc = np.sqrt(2 * nt - 1) * dt * dr * np.asarray(Rtwosided_fft) else: Rtwosided_fft_sc = np.asarray(Rtwosided_fft) + Rtwosided_fft_sc = Rtwosided_fft_sc.astype(dtypec) + MarchenkoWM = Marchenko( Rtwosided_fft_sc, nt=nt, dt=dt, dr=dr, nfmax=nfmax, - wav=wav, + wav=wav.astype(dtype), toff=toff, nsmooth=nsmooth, prescaled=par["prescaled"], fftengine=par["fftengine"] if backend == "numpy" else "numpy", kwargs_fft=par["kwargs_fft"] if backend == "numpy" else None, + dtype=dtype, ) solver_dict = ( dict(iter_lim=par["niter"]) if backend == "numpy" else dict(niter=par["niter"]) ) - _, _, _, g_inv_minus, g_inv_plus = MarchenkoWM.apply_onepoint( - trav, G0=np.asarray(g0sub).T, rtm=True, greens=True, dottest=True, **solver_dict + _, _, p0_minus, g_inv_minus, g_inv_plus = MarchenkoWM.apply_onepoint( + trav.astype(dtype), + G0=np.asarray(g0sub.astype(dtype)).T, + rtm=True, + greens=True, + dottest=True if dtype == np.float64 else False, + **solver_dict, ) ginvsub = (g_inv_minus + g_inv_plus)[:, nt - 1 :].T ginvsub_norm = ginvsub / ginvsub.max() gsub_norm = np.asarray(gsub / gsub.max()) + assert p0_minus.dtype == dtype + assert ginvsub.dtype == dtype assert np.linalg.norm(gsub_norm - ginvsub_norm) / np.linalg.norm(gsub_norm) < 1e-1 @pytest.mark.parametrize("par", [(par1)]) -def test_Marchenko_time(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Marchenko_time(par, dtype): """Solve marchenko equations using input Rs in time domain""" MarchenkoWM = Marchenko( - np.asarray(R), dt=dt, dr=dr, nfmax=nfmax, wav=wav, toff=toff, nsmooth=nsmooth + np.asarray(R.astype(dtype)), + dt=dt, + dr=dr, + nfmax=nfmax, + wav=wav.astype(dtype), + toff=toff, + nsmooth=nsmooth, + dtype=dtype, ) solver_dict = ( dict(iter_lim=par["niter"]) if backend == "numpy" else dict(niter=par["niter"]) ) - _, _, _, g_inv_minus, g_inv_plus = MarchenkoWM.apply_onepoint( - trav, G0=np.asarray(g0sub).T, rtm=True, greens=True, dottest=True, **solver_dict + _, _, p0_minus, g_inv_minus, g_inv_plus = MarchenkoWM.apply_onepoint( + trav.astype(dtype), + G0=np.asarray(g0sub.astype(dtype)).T, + rtm=True, + greens=True, + dottest=True if dtype == np.float64 else False, + **solver_dict, ) ginvsub = (g_inv_minus + g_inv_plus)[:, nt - 1 :].T ginvsub_norm = ginvsub / ginvsub.max() gsub_norm = np.asarray(gsub / gsub.max()) + assert p0_minus.dtype == dtype + assert ginvsub.dtype == dtype assert np.linalg.norm(gsub_norm - ginvsub_norm) / np.linalg.norm(gsub_norm) < 1e-1 @@ -170,21 +198,36 @@ def test_Marchenko_time_ana(par): @pytest.mark.parametrize("par", [(par1)]) -def test_Marchenko_timemulti_ana(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Marchenko_timemulti_ana(par, dtype): """Solve marchenko equations using input Rs in time domain with multiple points """ MarchenkoWM = Marchenko( - np.asarray(R), dt=dt, dr=dr, nfmax=nfmax, wav=wav, toff=toff, nsmooth=nsmooth + np.asarray(R.astype(dtype)), + dt=dt, + dr=dr, + nfmax=nfmax, + wav=wav.astype(dtype), + toff=toff, + nsmooth=nsmooth, + dtype=dtype, ) solver_dict = ( dict(iter_lim=par["niter"]) if backend == "numpy" else dict(niter=par["niter"]) ) - _, _, g_inv_minus, g_inv_plus = MarchenkoWM.apply_multiplepoints( - trav_multi, nfft=2**11, rtm=False, greens=True, dottest=True, **solver_dict + _, _, p0_minus, g_inv_minus, g_inv_plus = MarchenkoWM.apply_multiplepoints( + trav_multi.astype(dtype), + nfft=2**11, + rtm=True, + greens=True, + dottest=True if dtype == np.float64 else False, + **solver_dict, ) ginvsub = (g_inv_minus + g_inv_plus)[:, 1, nt - 1 :].T ginvsub_norm = ginvsub / ginvsub.max() gsub_norm = np.asarray(gsub / gsub.max()) + assert p0_minus.dtype == dtype + assert ginvsub.dtype == dtype assert np.linalg.norm(gsub_norm - ginvsub_norm) / np.linalg.norm(gsub_norm) < 1e-1 diff --git a/pytests/test_metrics.py b/pytests/test_metrics.py index e4cdce6fe..f0b768de1 100644 --- a/pytests/test_metrics.py +++ b/pytests/test_metrics.py @@ -8,7 +8,6 @@ import numpy as np backend = "numpy" -import itertools import pytest diff --git a/pytests/test_mri.py b/pytests/test_mri.py new file mode 100644 index 000000000..bf945ea6e --- /dev/null +++ b/pytests/test_mri.py @@ -0,0 +1,376 @@ +import os + +import numpy as np +import pytest + +from pylops.medical import MRI2D +from pylops.utils import dottest, mkl_fft_enabled + +par1 = { + "ny": 32, + "nx": 64, + "fft_engine": "numpy", +} # even input, numpy engine +par2 = { + "ny": 32, + "nx": 64, + "fft_engine": "scipy", +} # even input, scipy engine +par3 = { + "ny": 32, + "nx": 64, + "fft_engine": "mkl_fft", +} # even input, mkl_fft engine +par4 = { + "ny": 33, + "nx": 65, + "fft_engine": "numpy", +} # odd input, numpy engine +par5 = { + "ny": 33, + "nx": 65, + "fft_engine": "scipy", +} # even input, scipy engine +par6 = { + "ny": 33, + "nx": 65, + "fft_engine": "mkl_fft", +} # odd input, mkl_fft engine + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +def test_MRI2D_invalid_mask(): + """Test MRI2D operator with invalid mask string""" + with pytest.raises(ValueError, match="`mask` must be"): + MRI2D( + dims=(32, 64), + mask="invalid-mask", + nlines=16, + dtype="complex128", + ) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +def test_MRI2D_vertical_mask_invalid_nlines(): + """Test MRI2D operator with vertical mask and invalid nlines""" + with pytest.raises(ValueError, match="`nlines` and `perc_center`"): + MRI2D( + dims=(32, 64), + mask="vertical-uni", + nlines=60, + perc_center=0.5, + dtype="complex128", + ) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +def test_MRI2D_vertical_reg_invalid_perc_center(): + """Test MRI2D operator with vertical-reg mask and non-zero perc_center""" + with pytest.raises(ValueError, match="`perc_center` must be 0.0"): + MRI2D( + dims=(32, 64), + mask="vertical-reg", + nlines=16, + perc_center=0.1, + dtype="complex128", + ) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +def test_MRI2D_invalid_fft_engine(): + """Test MRI2D operator with invalid fft_engine""" + with pytest.raises(ValueError, match="`fft_engine` must be"): + MRI2D( + dims=(32, 64), + mask="vertical-reg", + nlines=16, + perc_center=0.0, + fft_engine="invalid-engine", + dtype="complex128", + ) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_mask_array(par, dtype): + """Dot-test and forward/adjoint for MRI2D operator with numpy array mask""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + # Create a random mask + mask = np.zeros((par["ny"], par["nx"]), dtype=bool) + nselected = int(par["ny"] * par["nx"] * 0.3) + indices = np.random.choice(par["ny"] * par["nx"], nselected, replace=False) + mask.flat[indices] = True + mask = mask.astype(dtype) + + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask=mask, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + assert dottest( + Mop, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x.ravel() + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.shape[0] == par["ny"] * par["nx"] + assert xadj.shape[0] == par["ny"] * par["nx"] + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_vertical_reg(par, dtype): + """Dot-test and forward/adjoint for MRI2D operator with vertical-reg mask""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + nlines = 16 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="vertical-reg", + nlines=nlines, + perc_center=0.0, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + assert len(Mop.mask) == nlines + assert dottest( + Mop, + par["ny"] * nlines, + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x.ravel() + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.shape[0] == par["ny"] * nlines + assert xadj.shape[0] == par["ny"] * par["nx"] + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +def test_MRI2D_vertical_mask_regularity(par): + """Test that vertical-reg mask produces regularly spaced lines""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + + nlines = 8 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="vertical-reg", + nlines=nlines, + perc_center=0.0, + fft_engine=par["fft_engine"], + dtype=np.complex128, + ) + mask_indices = Mop.mask + + # Check that indices are regularly spaced + if len(mask_indices) > 1: + steps = np.diff(np.sort(mask_indices)) + # All steps should be approximately equal (within rounding) + assert np.allclose(steps, steps[0], atol=1) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_vertical_uni(par, dtype): + """Dot-test and forward/adjoint for MRI2D operator with vertical-uni mask""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + nlines = 16 + perc_center = 0.1 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="vertical-uni", + nlines=nlines, + perc_center=perc_center, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + nlines_total = nlines + int(perc_center * par["nx"]) + assert len(Mop.mask) == nlines_total + assert dottest( + Mop, + par["ny"] * (nlines + int(perc_center * par["nx"])), + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x.ravel() + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.shape[0] == par["ny"] * nlines_total + assert xadj.shape[0] == par["ny"] * par["nx"] + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_vertical_uni_no_center(par, dtype): + """Test MRI2D operator with vertical mask and no center lines""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + nlines = 16 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="vertical-uni", + nlines=nlines, + perc_center=0.0, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + + assert dottest( + Mop, + par["ny"] * nlines, + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + assert len(Mop.mask) == nlines + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x.ravel() + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.shape[0] == par["ny"] * nlines + assert xadj.shape[0] == par["ny"] * par["nx"] + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_radial_reg(par, dtype): + """Dot-test and forward/adjoint for MRI2D operator with radial-reg mask""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + nlines = 8 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="radial-reg", + nlines=nlines, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + + # For radial masks, output size depends on the number of points in the mask + npoints = Mop.mask.shape[1] + assert dottest( + Mop, + npoints, + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + assert Mop.mask.shape[0] == 2 # x and y coordinates + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.size == npoints + assert xadj.shape == (par["ny"], par["nx"]) + + +@pytest.mark.skipif( + int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" +) +@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) +@pytest.mark.parametrize("dtype", [np.complex64, np.complex128]) +def test_MRI2D_radial_uni(par, dtype): + """Dot-test and forward/adjoint for MRI2D operator with radial-uni mask""" + if par["fft_engine"] == "mkl_fft" and not mkl_fft_enabled: + pytest.skip("mkl_fft is not installed") + np.random.seed(10) + rdtype = np.empty(0, dtype=dtype).real.dtype + + nlines = 8 + Mop = MRI2D( + dims=(par["ny"], par["nx"]), + mask="radial-uni", + nlines=nlines, + fft_engine=par["fft_engine"], + dtype=dtype, + ) + + # For radial masks, output size depends on the number of points in the mask + npoints = Mop.mask.shape[1] + assert dottest( + Mop, + npoints, + par["ny"] * par["nx"], + complexflag=2, + rtol=1e-4 if dtype == np.complex64 else 1e-6, + ) + assert Mop.mask.shape[0] == 2 # x and y coordinates + + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(rdtype) + y = Mop * x + xadj = Mop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert y.size == npoints + assert xadj.shape == (par["ny"], par["nx"]) diff --git a/pytests/test_nonstatconvolve.py b/pytests/test_nonstatconvolve.py index 4e80b48e2..b79e19304 100644 --- a/pytests/test_nonstatconvolve.py +++ b/pytests/test_nonstatconvolve.py @@ -102,13 +102,14 @@ @pytest.mark.parametrize("par", [(par_2d)]) def test_even_filter(par): """Check error is raised if filter has even size""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="must have odd length"): _ = NonStationaryConvolve1D( dims=par["nx"], hs=h1ns[..., :-1], ih=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), ) - with pytest.raises(ValueError): + + with pytest.raises(ValueError, match="must have odd length"): _ = NonStationaryConvolve2D( dims=(par["nx"], par["nz"]), hs=h2ns[..., :-1], @@ -116,13 +117,14 @@ def test_even_filter(par): ihz=(int(par["nz"] // 4), int(3 * par["nz"] // 4)), ) - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="must have odd length"): _ = NonStationaryFilters1D( inp=np.arange(par["nx"]), hsize=nfilts[0] - 1, ih=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), ) - with pytest.raises(ValueError): + + with pytest.raises(ValueError, match="must have odd length"): _ = NonStationaryFilters2D( inp=np.ones((par["nx"], par["nz"])), hshape=(nfilts[0] - 1, nfilts[1] - 1), @@ -134,13 +136,14 @@ def test_even_filter(par): @pytest.mark.parametrize("par", [(par_2d)]) def test_ih_irregular(par): """Check error is raised if ih (or ihx/ihz) are irregularly sampled""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="must be regularly sampled"): _ = NonStationaryConvolve1D( dims=par["nx"], hs=h1ns, ih=(10, 11, 15), ) - with pytest.raises(ValueError): + + with pytest.raises(ValueError, match="must be regularly sampled"): _ = NonStationaryConvolve2D( dims=(par["nx"], par["nz"]), hs=h2ns, @@ -152,7 +155,7 @@ def test_ih_irregular(par): @pytest.mark.parametrize("par", [(par_2d)]) def test_unknown_engine_2d(par): """Check error is raised if unknown engine is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`engine` must be numpy"): _ = NonStationaryConvolve2D( dims=(par["nx"], par["nz"]), hs=h2ns, @@ -160,7 +163,8 @@ def test_unknown_engine_2d(par): ihz=(int(par["nz"] // 3), int(2 * par["nz"] // 3)), engine="foo", ) - with pytest.raises(NotImplementedError): + + with pytest.raises(ValueError, match="`engine` must be numpy"): _ = NonStationaryFilters2D( inp=np.ones((par["nx"], par["nz"])), hshape=(nfilts[0] - 1, nfilts[1] - 1), @@ -171,23 +175,32 @@ def test_unknown_engine_2d(par): @pytest.mark.parametrize("par", [(par1_1d), (par2_1d)]) -def test_NonStationaryConvolve1D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_NonStationaryConvolve1D(par, dtype): """Dot-test and inversion for NonStationaryConvolve1D operator""" # 1D if par["axis"] == 0: Cop = NonStationaryConvolve1D( dims=par["nx"], - hs=h1ns, + hs=h1ns.astype(dtype), ih=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), - dtype="float64", + dtype=dtype, + ) + assert dottest( + Cop, + par["nx"], + par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(Cop, par["nx"], par["nx"], backend=backend) - x = np.zeros((par["nx"])) + x = np.zeros(par["nx"], dtype=dtype) x[par["nx"] // 2] = 1.0 + y = Cop * x + xadj = Cop.H * y xlsqr = lsqr( Cop, - Cop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -195,28 +208,39 @@ def test_NonStationaryConvolve1D(par): btol=1e-8, show=0, )[0] + + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal(x, xlsqr, decimal=1) # 1D on 2D nfilt = par["nx"] if par["axis"] == 0 else par["nz"] Cop = NonStationaryConvolve1D( dims=(par["nx"], par["nz"]), - hs=h1ns, + hs=h1ns.astype(dtype), ih=(int(nfilt // 4), int(2 * nfilt // 4), int(3 * nfilt // 4)), axis=par["axis"], - dtype="float64", + dtype=dtype, + ) + assert dottest( + Cop, + par["nx"] * par["nz"], + par["nx"] * par["nz"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(Cop, par["nx"] * par["nz"], par["nx"] * par["nz"], backend=backend) - x = np.zeros((par["nx"], par["nz"])) + x = np.zeros((par["nx"], par["nz"]), dtype=dtype) x[ int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), ] = 1.0 x = x.ravel() + y = Cop * x + xadj = Cop.H * y xlsqr = lsqr( Cop, - Cop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=400, @@ -224,6 +248,9 @@ def test_NonStationaryConvolve1D(par): btol=1e-8, show=0, )[0] + + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal(x, xlsqr, decimal=1) @@ -250,34 +277,46 @@ def test_StationaryConvolve1D(par): @pytest.mark.parametrize("par", [(par_2d)]) -def test_NonStationaryConvolve2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_NonStationaryConvolve2D(par, dtype): """Dot-test and inversion for NonStationaryConvolve2D operator""" Cop = NonStationaryConvolve2D( dims=(par["nx"], par["nz"]), - hs=h2ns, + hs=h2ns.astype(dtype), ihx=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), ihz=(int(par["nz"] // 4), int(3 * par["nz"] // 4)), engine="numpy" if backend == "numpy" else "cuda", - dtype="float64", + dtype=dtype, + ) + assert dottest( + Cop, + par["nx"] * par["nz"], + par["nx"] * par["nz"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(Cop, par["nx"] * par["nz"], par["nx"] * par["nz"], backend=backend) - x = np.zeros((par["nx"], par["nz"])) + x = np.zeros((par["nx"], par["nz"]), dtype=dtype) x[ int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), ] = 1.0 x = x.ravel() + y = Cop * x + xadj = Cop.H * y xlsqr = lsqr( Cop, - Cop * x, + y, x0=np.zeros_like(x), damp=1e-20, - niter=300, + niter=400, atol=1e-8, btol=1e-8, show=0, )[0] + + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal(x, xlsqr, decimal=1) @@ -310,21 +349,30 @@ def test_StationaryConvolve2D(par): (par1_1d), ], ) -def test_NonStationaryFilters1D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_NonStationaryFilters1D(par, dtype): """Dot-test and inversion for NonStationaryFilters2D operator""" - x = np.zeros((par["nx"])) + x = np.zeros(par["nx"], dtype=dtype) x[par["nx"] // 4], x[par["nx"] // 2], x[3 * par["nx"] // 4] = 1.0, 1.0, 1.0 Cop = NonStationaryFilters1D( inp=x, hsize=nfilts[0], ih=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), - dtype="float64", + dtype=dtype, ) - assert dottest(Cop, par["nx"], 3 * nfilts[0], backend=backend) + assert dottest( + Cop, + par["nx"], + 3 * nfilts[0], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + y = Cop * h1ns + h1adj = Cop.H * y + h1lsqr = lsqr(Cop, y, x0=np.zeros_like(h1ns), damp=1e-20, niter=200, show=0)[0] - h1lsqr = lsqr( - Cop, Cop * h1ns, x0=np.zeros_like(h1ns), damp=1e-20, niter=200, show=0 - )[0] + assert y.dtype == dtype + assert h1adj.dtype == dtype assert_array_almost_equal(h1ns, h1lsqr, decimal=1) @@ -332,9 +380,10 @@ def test_NonStationaryFilters1D(par): int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par_2d)]) -def test_NonStationaryFilters2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_NonStationaryFilters2D(par, dtype): """Dot-test and inversion for NonStationaryFilters2D operator""" - x = np.zeros((par["nx"], par["nz"])) + x = np.zeros((par["nx"], par["nz"]), dtype=dtype) x[int(par["nx"] // 4)] = 1.0 x[int(par["nx"] // 2)] = 1.0 x[int(3 * par["nx"] // 4)] = 1.0 @@ -344,49 +393,62 @@ def test_NonStationaryFilters2D(par): hshape=nfilts, ihx=(int(par["nx"] // 4), int(2 * par["nx"] // 4), int(3 * par["nx"] // 4)), ihz=(int(par["nz"] // 4), int(3 * par["nz"] // 4)), - dtype="float64", + dtype=dtype, ) assert dottest( - Cop, par["nx"] * par["nz"], 6 * nfilts[0] * nfilts[1], backend=backend + Cop, + par["nx"] * par["nz"], + 6 * nfilts[0] * nfilts[1], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) + y = Cop * h2ns.astype(dtype).ravel() + h2adj = Cop.H * y h2lsqr = lsqr( Cop, - Cop * h2ns.ravel(), + y, x0=np.zeros_like(h2ns).ravel(), damp=1e-20, niter=400, show=0, )[0] + + assert y.dtype == dtype + assert h2adj.dtype == dtype assert_array_almost_equal(h2ns.ravel(), h2lsqr, decimal=1) @pytest.mark.parametrize("par", [(par_2d)]) -def test_NonStationaryConvolve3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_NonStationaryConvolve3D(par, dtype): """Dot-test and inversion for NonStationaryConvolve3D operator""" Cop = NonStationaryConvolve3D( dims=(par["nx"], par["nx"], par["nz"]), - hs=h3ns, + hs=h3ns.astype(dtype), ihx=(int(par["nx"] // 4), int(3 * par["nx"] // 4)), ihy=(int(par["nx"] // 4), int(3 * par["nx"] // 4)), ihz=(int(par["nz"] // 4), int(3 * par["nz"] // 4)), engine="numpy" if backend == "numpy" else "cuda", - dtype="float64", + dtype=dtype, ) assert dottest( Cop, par["nx"] * par["nx"] * par["nz"], par["nx"] * par["nx"] * par["nz"], + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.zeros((par["nx"], par["nx"], par["nz"])) + x = np.zeros((par["nx"], par["nx"], par["nz"]), dtype=dtype) x[ int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), int(par["nx"] / 2 - 3) : int(par["nx"] / 2 + 3), int(par["nz"] / 2 - 3) : int(par["nz"] / 2 + 3), ] = 1.0 x = x.ravel() + y = Cop * x + xadj = Cop.H * y xlsqr = lsqr( Cop, Cop * x, @@ -397,6 +459,9 @@ def test_NonStationaryConvolve3D(par): btol=1e-8, show=0, )[0] + + assert y.dtype == dtype + assert xadj.dtype == dtype # given the size of the problem, we can only run few iterations and test accuracy up to 30% assert np.linalg.norm(x - xlsqr) / np.linalg.norm(x) < 0.3 diff --git a/pytests/test_oneway.py b/pytests/test_oneway.py index d9f576c28..dc4e32d5a 100644 --- a/pytests/test_oneway.py +++ b/pytests/test_oneway.py @@ -38,7 +38,6 @@ "nx": 10, "nt": 20, "kind": "p", - "dtype": "float32", "fftengine": "numpy", "kwargs_fft": {}, } # even, p, numpy @@ -47,7 +46,6 @@ "nx": 11, "nt": 21, "kind": "p", - "dtype": "float32", "fftengine": "numpy", "kwargs_fft": {}, } # odd, p, numpy @@ -56,7 +54,6 @@ "nx": 10, "nt": 20, "kind": "p", - "dtype": "float32", "fftengine": "scipy", "kwargs_fft": dict(workers=4), } # even, p, scipy @@ -65,7 +62,6 @@ "nx": 10, "nt": 20, "kind": "p", - "dtype": "float32", "fftengine": "fft", "kwargs_fft": {}, } # even, p, fftw @@ -74,14 +70,12 @@ "nx": 10, "nt": 20, "kind": "vz", - "dtype": "float32", } # even, vz, numpy par2v = { "ny": 9, "nx": 11, "nt": 21, "kind": "vz", - "dtype": "float32", } # odd, vz, numpy # deghosting params @@ -116,7 +110,8 @@ def create_data2D(datakind): @pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par1w)]) -def test_PhaseShift_2dsignal(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PhaseShift_2dsignal(par, dtype): """Dot-test for PhaseShift of 2d signal""" vel = 1500.0 zprop = 200 @@ -131,16 +126,27 @@ def test_PhaseShift_2dsignal(par): freq, kx, fftengine=par["fftengine"] if backend == "numpy" else "numpy", - dtype=par["dtype"], + dtype=dtype, **kwargs_fft, ) assert dottest( - Pop, par["nt"] * par["nx"], par["nt"] * par["nx"], rtol=1e-3, backend=backend + Pop, + par["nt"] * par["nx"], + par["nt"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) + x = np.ones((par["nt"], par["nx"]), dtype=dtype) + y = Pop * x.ravel() + xadj = Pop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_PhaseShift_3dsignal(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PhaseShift_3dsignal(par, dtype): """Dot-test for PhaseShift of 3d signal""" vel = 1500.0 zprop = 200 @@ -148,15 +154,21 @@ def test_PhaseShift_3dsignal(par): kx = np.fft.fftshift(np.fft.fftfreq(par["nx"], 1.0)) ky = np.fft.fftshift(np.fft.fftfreq(par["ny"], 1.0)) - Pop = PhaseShift(vel, zprop, par["nt"], freq, kx, ky, dtype=par["dtype"]) + Pop = PhaseShift(vel, zprop, par["nt"], freq, kx, ky, dtype=dtype) assert dottest( Pop, par["nt"] * par["nx"] * par["ny"], par["nt"] * par["nx"] * par["ny"], - rtol=1e-3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + x = np.ones((par["nt"], par["nx"], par["ny"]), dtype=dtype) + y = Pop * x.ravel() + xadj = Pop.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + @pytest.mark.parametrize("par", [(par1), (par2), (par1v), (par2v)]) def test_Deghosting_2dsignal(par): @@ -176,7 +188,7 @@ def test_Deghosting_2dsignal(par): npad=0, ntaper=0, solver=lsqr, - dtype=par["dtype"], + dtype=np.float32, **dict(damp=1e-10, niter=60), ) diff --git a/pytests/test_pad.py b/pytests/test_pad.py index 0c21fbd46..adbe47a0c 100644 --- a/pytests/test_pad.py +++ b/pytests/test_pad.py @@ -15,8 +15,8 @@ from pylops.basicoperators import Pad from pylops.utils import dottest -par1 = {"ny": 11, "nx": 11, "pad": ((0, 2), (4, 5)), "dtype": "float64"} # square -par2 = {"ny": 21, "nx": 11, "pad": ((3, 1), (0, 3)), "dtype": "float64"} # rectangular +par1 = {"ny": 11, "nx": 11, "pad": ((0, 2), (4, 5))} # square +par2 = {"ny": 21, "nx": 11, "pad": ((3, 1), (0, 3))} # rectangular np.random.seed(10) @@ -24,38 +24,58 @@ @pytest.mark.parametrize("par", [(par1)]) def test_Pad_1d_negative(par): """Check error is raised when pad has negative number""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="Padding must be positive"): _ = Pad(dims=par["ny"], pad=(-10, 0)) @pytest.mark.parametrize("par", [(par1)]) def test_Pad_2d_negative(par): """Check error is raised when pad has negative number for 2d""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="Padding must be positive"): _ = Pad(dims=(par["ny"], par["nx"]), pad=((-10, 0), (3, -5))) @pytest.mark.parametrize("par", [(par1)]) -def test_Pad1d(par): - """Dot-test and adjoint for Pad operator on 1d signal""" - Pop = Pad(dims=par["ny"], pad=par["pad"][0], dtype=par["dtype"]) - assert dottest(Pop, Pop.shape[0], Pop.shape[1], backend=backend) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Pad1d(par, dtype): + """Dot-test and forward/adjoint for Pad operator on 1d signal""" + Pop = Pad(dims=par["ny"], pad=par["pad"][0], dtype=dtype) + assert dottest( + Pop, + Pop.shape[0], + Pop.shape[1], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) - x = np.arange(par["ny"], dtype=par["dtype"]) + 1.0 + x = np.arange(par["ny"], dtype=dtype) + 1.0 y = Pop * x - xinv = Pop.H * y - assert_array_equal(x, xinv) + xadj = Pop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_equal(x, xadj) @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_Pad2d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Pad2d(par, dtype): """Dot-test and adjoint for Pad operator on 2d signal""" - Pop = Pad(dims=(par["ny"], par["nx"]), pad=par["pad"], dtype=par["dtype"]) - assert dottest(Pop, Pop.shape[0], Pop.shape[1], backend=backend) + Pop = Pad(dims=(par["ny"], par["nx"]), pad=par["pad"], dtype=dtype) + assert dottest( + Pop, + Pop.shape[0], + Pop.shape[1], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) - x = (np.arange(par["ny"] * par["nx"], dtype=par["dtype"]) + 1.0).reshape( + x = (np.arange(par["ny"] * par["nx"], dtype=dtype) + 1.0).reshape( par["ny"], par["nx"] ) y = Pop * x.ravel() xadj = Pop.H * y + + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_equal(x.ravel(), xadj) diff --git a/pytests/test_patching.py b/pytests/test_patching.py index b45f8249d..bb40ed23b 100644 --- a/pytests/test_patching.py +++ b/pytests/test_patching.py @@ -13,6 +13,7 @@ import pytest from pylops.basicoperators import MatrixMult +from pylops.optimization.basic import cgls from pylops.signalprocessing import Patch2D, Patch3D from pylops.signalprocessing.patch2d import patch2d_design from pylops.signalprocessing.patch3d import patch3d_design @@ -135,9 +136,13 @@ @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch2D(par): - """Dot-test and inverse for Patch2D operator""" - Op = MatrixMult(np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"]))) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch2D(par, dtype): + """Dot-test and forward/adjoint/inverse for Patch2D operator""" + Op = MatrixMult( + np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"]), dtype=dtype), + dtype=dtype, + ) nwins, dims, _, _ = patch2d_design( (par["npy"], par["npt"]), @@ -159,20 +164,28 @@ def test_Patch2D(par): Pop, par["npy"] * par["npt"], par["ny"] * par["nt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0] * par["nt"] * nwins[1])) + x = np.ones((nwins[0], nwins[1], par["ny"], par["nt"]), dtype=dtype) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par4)]) -def test_Patch2D_scalings(par): - """Dot-test and inverse for Patch2D operator with scalings""" - Op = MatrixMult(np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"]))) - scalings = np.arange(par["nwiny"] * par["nwint"]) + 1.0 +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch2D_scalings(par, dtype): + """Dot-test and forward/adjoint/inverse for Patch2D operator with scalings""" + Op = MatrixMult( + np.ones((par["nwiny"] * par["nwint"], par["ny"] * par["nt"]), dtype=dtype), + dtype=dtype, + ) + scalings = np.arange(par["nwiny"] * par["nwint"], dtype=dtype) + 1.0 nwins, dims, _, _ = patch2d_design( (par["npy"], par["npt"]), @@ -195,19 +208,27 @@ def test_Patch2D_scalings(par): Pop, par["npy"] * par["npt"], par["ny"] * par["nt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0] * par["nt"] * nwins[1])) + x = np.ones((nwins[0], nwins[1], par["ny"], par["nt"]), dtype=dtype) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par4)]) -def test_Patch2D_singlepatch1(par): - """Dot-test and inverse for Patch2D operator with single patch in fist dimension""" - Op = MatrixMult(np.ones((par["npy"] * par["nwint"], par["npy"] * par["nt"]))) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch2D_singlepatch1(par, dtype): + """Dot-test and inverse for Patch2D operator with single patch in first dimension""" + Op = MatrixMult( + np.ones((par["npy"] * par["nwint"], par["npy"] * par["nt"]), dtype=dtype), + dtype=dtype, + ) nwins, dims, _, _ = patch2d_design( (par["npy"], par["npt"]), @@ -231,19 +252,27 @@ def test_Patch2D_singlepatch1(par): Pop, par["npy"] * par["npt"], par["npy"] * par["nt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["npy"] * nwins[0] * par["nt"] * nwins[1])) + x = np.ones((nwins[0], nwins[1], par["npy"], par["nt"]), dtype=dtype) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch2D_singlepatch2(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch2D_singlepatch2(par, dtype): """Dot-test and inverse for Patch2D operator with single patch in second dimension""" - Op = MatrixMult(np.ones((par["nwiny"] * par["npt"], par["ny"] * par["npt"]))) + Op = MatrixMult( + np.ones((par["nwiny"] * par["npt"], par["ny"] * par["npt"]), dtype=dtype), + dtype=dtype, + ) nwins, dims, _, _ = patch2d_design( (par["npy"], par["npt"]), @@ -266,25 +295,32 @@ def test_Patch2D_singlepatch2(par): Pop, par["npy"] * par["npt"], par["ny"] * par["npt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0] * par["npt"] * nwins[1])) + x = np.ones((nwins[0], nwins[1], par["ny"], par["nt"]), dtype=dtype) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch3D(par, dtype): """Dot-test and inverse for Patch3D operator""" Op = MatrixMult( np.ones( ( par["nwiny"] * par["nwinx"] * par["nwint"], par["ny"] * par["nx"] * par["nt"], - ) - ) + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims, _, _ = patch3d_design( @@ -312,25 +348,34 @@ def test_Patch3D(par): Pop, par["npy"] * par["npx"] * par["npt"], par["ny"] * par["nx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0], par["nx"] * nwins[1], par["nt"] * nwins[2])) + x = np.ones( + (nwins[0], nwins[1], nwins[2], par["ny"], par["nx"], par["nt"]), + ) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch3D_singlepatch1(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch3D_singlepatch1(par, dtype): """Dot-test and inverse for Patch3D operator with single patch in fist dimension""" Op = MatrixMult( np.ones( ( par["npy"] * par["nwinx"] * par["nwint"], par["npy"] * par["nx"] * par["nt"], - ) - ) + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims, _, _ = patch3d_design( @@ -355,25 +400,34 @@ def test_Patch3D_singlepatch1(par): Pop, par["npy"] * par["npx"] * par["npt"], par["npy"] * par["nx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["npy"] * nwins[0], par["nx"] * nwins[1], par["nt"] * nwins[2])) + x = np.ones( + (nwins[0], nwins[1], nwins[2], par["npy"], par["nx"], par["nt"]), + ) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch3D_singlepatch2(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch3D_singlepatch2(par, dtype): """Dot-test and inverse for Patch3D operator with single patch in second dimension""" Op = MatrixMult( np.ones( ( par["nwiny"] * par["npx"] * par["nwint"], par["ny"] * par["npx"] * par["nt"], - ) - ) + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims, _, _ = patch3d_design( @@ -398,17 +452,24 @@ def test_Patch3D_singlepatch2(par): Pop, par["npy"] * par["npx"] * par["npt"], par["ny"] * par["npx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0], par["npx"] * nwins[1], par["nt"] * nwins[2])) + x = np.ones( + (nwins[0], nwins[1], nwins[2], par["ny"], par["npx"], par["nt"]), + ) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch3D_singlepatch12(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch3D_singlepatch12(par, dtype): """Dot-test and inverse for Patch3D operator with single patch in fist and second dimensions""" Op = MatrixMult( @@ -416,8 +477,10 @@ def test_Patch3D_singlepatch12(par): ( par["npy"] * par["npx"] * par["nwint"], par["npy"] * par["npx"] * par["nt"], - ) - ) + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims, _, _ = patch3d_design( @@ -443,25 +506,35 @@ def test_Patch3D_singlepatch12(par): Pop, par["npy"] * par["npx"] * par["npt"], par["npy"] * par["npx"] * par["nt"] * nwins[0] * nwins[1] * nwins[2], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["npy"] * nwins[0], par["npx"] * nwins[1], par["nt"] * nwins[2])) + x = np.ones( + (nwins[0], nwins[1], nwins[2], par["npy"], par["npx"], par["nt"]), + dtype=dtype, + ) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Patch3D_singlepatch3(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Patch3D_singlepatch3(par, dtype): """Dot-test and inverse for Patch3D operator with single patch in third dimension""" Op = MatrixMult( np.ones( ( par["nwiny"] * par["nwinx"] * par["npt"], par["ny"] * par["nx"] * par["npt"], - ) - ) + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims, _, _ = patch3d_design( @@ -485,10 +558,16 @@ def test_Patch3D_singlepatch3(par): Pop, par["npy"] * par["npx"] * par["npt"], par["ny"] * par["nx"] * par["npt"] * nwins[0] * nwins[1] * nwins[2], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * nwins[0], par["nx"] * nwins[1], par["npt"] * nwins[2])) + x = np.ones( + (nwins[0], nwins[1], nwins[2], par["ny"], par["nx"], par["npt"]), + ) y = Pop * x.ravel() + xadj = Pop.H * y + xinv = cgls(Pop, y, niter=50)[0] - xinv = Pop / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) diff --git a/pytests/test_poststack.py b/pytests/test_poststack.py index e54374e28..74636968e 100644 --- a/pytests/test_poststack.py +++ b/pytests/test_poststack.py @@ -101,27 +101,50 @@ @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_PoststackLinearModelling1d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PoststackLinearModelling1d(par, dtype): """Dot-test, comparison of dense vs lop implementation and inversion for PoststackLinearModelling in 1d with stationary wavelet """ # Dense - PPop_dense = PoststackLinearModelling(wav, nt0=nt0, explicit=True) - assert dottest(PPop_dense, nt0, nt0, rtol=1e-4, backend=backend) + PPop_dense = PoststackLinearModelling(wav.astype(dtype), nt0=nt0, explicit=True) + assert dottest( + PPop_dense, + nt0, + nt0, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Linear operator - PPop = PoststackLinearModelling(wav, nt0=nt0, explicit=False) - assert dottest(PPop, nt0, nt0, rtol=1e-4, backend=backend) + PPop = PoststackLinearModelling(wav.astype(dtype), nt0=nt0, explicit=False) + assert dottest( + PPop, nt0, nt0, rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend + ) - # Compare data - d = PPop * m.ravel() - d_dense = PPop_dense * m.T.ravel() + # Compare data (dense vs lop) and check dtype + d = PPop * m.astype(dtype) + d_dense = PPop_dense * m.astype(dtype) + madj = PPop.H * d + madj_dense = PPop_dense.H * d_dense + assert d.dtype == dtype + assert d_dense.dtype == dtype + assert madj.dtype == dtype + assert madj_dense.dtype == dtype assert_array_almost_equal(d, d_dense, decimal=4) + assert_array_almost_equal(madj, madj_dense, decimal=4) - # Inversion - for explicit in [True, False]: + # Inversion (note that since the operator is ill-conditioned, we cannot + # expect a perfect reconstruction, hence the large relative error threshold) + for explicit, data in zip([True, False], [d_dense, d], strict=True): if par["epsR"] is None: - dict_inv = {} + dict_inv = ( + dict() + if not explicit + else dict(rcond=1e-6) + if int(os.environ.get("TEST_CUPY_PYLOPS", 0)) + else dict(cond=1e-6) + ) # to avoid instability (cond for scipy abd rcond for cupy) else: dict_inv = ( dict(damp=0 if par["epsI"] is None else par["epsI"], iter_lim=80) @@ -130,40 +153,62 @@ def test_PoststackLinearModelling1d(par): ) minv = PoststackInversion( - d, - wav, - m0=mback, + data, + wav.astype(dtype), + m0=mback.astype(dtype), explicit=explicit, epsR=par["epsR"], epsI=par["epsI"], simultaneous=par["simultaneous"], - **dict_inv + **dict_inv, )[0] - assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2 + err = 1e-2 if dtype == np.float32 else 8e-3 + assert np.linalg.norm(m - minv) / np.linalg.norm(m) < err @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_PoststackLinearModelling1d_nonstationary(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PoststackLinearModelling1d_nonstationary(par, dtype): """Dot-test, comparison of dense vs lop implementation and inversion for PoststackLinearModelling in 1d with nonstationary wavelet """ # Dense - PPop_dense = PoststackLinearModelling(wavs, nt0=nt0, explicit=True) - assert dottest(PPop_dense, nt0, nt0, rtol=1e-4, backend=backend) + PPop_dense = PoststackLinearModelling(wavs.astype(dtype), nt0=nt0, explicit=True) + assert dottest( + PPop_dense, + nt0, + nt0, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Linear operator - PPop = PoststackLinearModelling(wavs, nt0=nt0, explicit=False) - assert dottest(PPop, nt0, nt0, rtol=1e-4, backend=backend) + PPop = PoststackLinearModelling(wavs.astype(dtype), nt0=nt0, explicit=False) + assert dottest( + PPop, nt0, nt0, rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend + ) - # Compare data - d = PPop * m.ravel() - d_dense = PPop_dense * m.T.ravel() + # Compare data (dense vs lop) and check dtype + d = PPop * m.astype(dtype) + d_dense = PPop_dense * m.astype(dtype) + madj = PPop.H * d + madj_dense = PPop_dense.H * d_dense + assert d.dtype == dtype + assert d_dense.dtype == dtype + assert madj.dtype == dtype + assert madj_dense.dtype == dtype assert_array_almost_equal(d, d_dense, decimal=4) # Inversion - for explicit in [True, False]: + for explicit, data in zip([True, False], [d_dense, d], strict=True): if par["epsR"] is None: - dict_inv = {} + dict_inv = ( + dict() + if not explicit + else dict(rcond=1e-6) + if int(os.environ.get("TEST_CUPY_PYLOPS", 0)) + else dict(cond=1e-6) + ) # to avoid instability (cond for scipy abd rcond for cupy) else: dict_inv = ( dict(damp=0 if par["epsI"] is None else par["epsI"], iter_lim=80) @@ -171,41 +216,71 @@ def test_PoststackLinearModelling1d_nonstationary(par): else dict(damp=0 if par["epsI"] is None else par["epsI"], niter=80) ) minv = PoststackInversion( - d, - wavs, - m0=mback, + data, + wavs.astype(dtype), + m0=mback.astype(dtype), explicit=explicit, epsR=par["epsR"], epsI=par["epsI"], simultaneous=par["simultaneous"], - **dict_inv + **dict_inv, )[0] - assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 1e-2 + err = 1e-2 if dtype == np.float32 else 8e-3 + assert np.linalg.norm(m - minv) / np.linalg.norm(m) < err @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7)] ) -def test_PoststackLinearModelling2d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PoststackLinearModelling2d(par, dtype): """Dot-test and inversion for PoststackLinearModelling in 2d""" # Dense - PPop_dense = PoststackLinearModelling(wav, nt0=nz, spatdims=nx, explicit=True) - assert dottest(PPop_dense, nz * nx, nz * nx, rtol=1e-4, backend=backend) + PPop_dense = PoststackLinearModelling( + wav.astype(dtype), nt0=nz, spatdims=nx, explicit=True + ) + assert dottest( + PPop_dense, + nz * nx, + nz * nx, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Linear operator - PPop = PoststackLinearModelling(wav, nt0=nz, spatdims=nx, explicit=False) - assert dottest(PPop, nz * nx, nz * nx, rtol=1e-4, backend=backend) + PPop = PoststackLinearModelling( + wav.astype(dtype), nt0=nz, spatdims=nx, explicit=False + ) + assert dottest( + PPop, + nz * nx, + nz * nx, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Compare data - d = (PPop * m2d.ravel()).reshape(nz, nx) - d_dense = (PPop_dense * m2d.ravel()).reshape(nz, nx) + d = PPop * m2d.astype(dtype) + d_dense = PPop_dense * m2d.astype(dtype) + madj = PPop.H * d + madj_dense = PPop_dense.H * d_dense + assert d.dtype == dtype + assert d_dense.dtype == dtype + assert madj.dtype == dtype + assert madj_dense.dtype == dtype assert_array_almost_equal(d, d_dense, decimal=4) # Inversion - for explicit in [True, False]: + for explicit, data in zip([True, False], [d_dense, d], strict=True): if explicit and not par["simultaneous"] and par["epsR"] is None: - dict_inv = {} + dict_inv = ( + dict() + if not explicit + else dict(rcond=1e-6) + if int(os.environ.get("TEST_CUPY_PYLOPS", 0)) + else dict(cond=1e-6) + ) # to avoid instability (cond for scipy abd rcond for cupy) elif explicit and not par["simultaneous"] and par["epsR"] is not None: dict_inv = ( dict(damp=0 if par["epsI"] is None else par["epsI"], iter_lim=10) @@ -219,14 +294,15 @@ def test_PoststackLinearModelling2d(par): else dict(damp=0 if par["epsI"] is None else par["epsI"], niter=10) ) minv2d = PoststackInversion( - d, - wav, - m0=mback2d, + data, + wav.astype(dtype), + m0=mback2d.astype(dtype), explicit=explicit, epsI=par["epsI"], epsR=par["epsR"], epsRL1=par["epsRL1"], simultaneous=par["simultaneous"], - **dict_inv + **dict_inv, )[0] - assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(m2d) < 1e-1 + err = 5e-1 if dtype == np.float32 else 1e-1 + assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(m2d) < err diff --git a/pytests/test_prestack.py b/pytests/test_prestack.py index fcccfd82c..ff32abcdf 100644 --- a/pytests/test_prestack.py +++ b/pytests/test_prestack.py @@ -237,15 +237,18 @@ (par3b), ], ) -def test_PrestackLinearModelling(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PrestackLinearModelling(par, dtype): """Dot-test, comparison of dense vs lop implementation and inversion for PrestackLinearModelling """ # Dense PPop_dense = PrestackLinearModelling( - wav, - theta, - vsvp=par["vsvp"], + wav.astype(dtype), + theta.astype(dtype), + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), nt0=nt0, linearization=par["linearization"], explicit=True, @@ -255,41 +258,47 @@ def test_PrestackLinearModelling(par): PPop_dense, nt0 * ntheta, nt0 * _linearizations[par["linearization"]], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) # Linear operator PPop = PrestackLinearModelling( - wav, - theta, - vsvp=par["vsvp"], + wav.astype(dtype), + theta.astype(dtype), + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), nt0=nt0, linearization=par["linearization"], explicit=False, kind=par["kind"], ) assert dottest( - PPop, nt0 * ntheta, nt0 * _linearizations[par["linearization"]], backend=backend + PPop, + nt0 * ntheta, + nt0 * _linearizations[par["linearization"]], + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, ) # Compare data - d = PPop * m.ravel() + d = PPop * m.astype(dtype).ravel() d = d.reshape(nt0, ntheta) - d_dense = PPop_dense * m.T.ravel() + d_dense = PPop_dense * m.astype(dtype).T.ravel() d_dense = d_dense.reshape(ntheta, nt0).T + madj = PPop.H * d.ravel() + madj = madj.reshape(nt0, _linearizations[par["linearization"]]) + madj_dense = PPop_dense.H * d_dense.T.ravel() + madj_dense = madj_dense.reshape(_linearizations[par["linearization"]], nt0).T + assert d.dtype == dtype + assert d_dense.dtype == dtype + assert madj.dtype == dtype + assert madj_dense.dtype == dtype assert_array_almost_equal(d, d_dense, decimal=4) + assert_array_almost_equal(madj, madj_dense, decimal=4) # Inversion - par3b = { - "vsvp": np.linspace(0.4, 0.6, nt0), - "linearization": "akirich", - "epsR": 1e-4, - "epsRL1": 1e-2, - "epsI": 1e-6, - "simultaneous": True, - "kind": "forward", - } - for explicit in [True, False]: dict_inv = dict(iter_lim=10) if backend == "numpy" else dict(niter=10) if not par["simultaneous"]: @@ -304,47 +313,67 @@ def test_PrestackLinearModelling(par): ) minv = PrestackInversion( d, - theta, - wav, - m0=mback, + theta.astype(dtype), + wav.astype(dtype), + m0=mback.astype(dtype), explicit=explicit, epsI=par["epsI"], epsR=par["epsR"], epsRL1=par["epsRL1"], simultaneous=par["simultaneous"], kind=par["kind"], - **dict_inv + **dict_inv, ) - assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < 4e-2 + err = 1e-1 if dtype == np.float32 else 5e-2 + assert np.linalg.norm(m - minv) / np.linalg.norm(minv) < err @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_PrestackWaveletModelling(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PrestackWaveletModelling(par, dtype): """Dot-test and inversion for PrestackWaveletModelling""" # Operators Wavestop = PrestackWaveletModelling( - m, - theta, + m.astype(dtype), + theta.astype(dtype), nwav=ntwav, wavc=wavc, - vsvp=par["vsvp"], + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), linearization=par["linearization"], ) - assert dottest(Wavestop, nt0 * ntheta, ntwav, backend=backend) + assert dottest( + Wavestop, + nt0 * ntheta, + ntwav, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) Wavestop_phase = PrestackWaveletModelling( - m, - theta, + m.astype(dtype), + theta.astype(dtype), nwav=ntwav, wavc=wavc, - vsvp=par["vsvp"], + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), linearization=par["linearization"], ) - assert dottest(Wavestop_phase, nt0 * ntheta, ntwav, backend=backend) + assert dottest( + Wavestop_phase, + nt0 * ntheta, + ntwav, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Create data d = (Wavestop * wav).reshape(ntheta, nt0).T d_phase = (Wavestop_phase * wav_phase).reshape(ntheta, nt0).T + assert d.dtype == dtype + assert d_phase.dtype == dtype # Estimate wavelet wav_est = lsqr( @@ -377,38 +406,59 @@ def test_PrestackWaveletModelling(par): @pytest.mark.parametrize( "par", [(par1), (par3), (par2s), (par4s), (par1r), (par3r), (par1b), (par3b)] ) -def test_PrestackLinearModelling2d(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PrestackLinearModelling2d(par, dtype): """Dot-test and inversion for PoststackLinearModelling in 2d""" nm = _linearizations[par["linearization"]] # Dense PPop_dense = PrestackLinearModelling( - wav, - theta, - vsvp=par["vsvp"], + wav.astype(dtype), + theta.astype(dtype), + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), nt0=nz, spatdims=(nx,), linearization=par["linearization"], explicit=True, ) - assert dottest(PPop_dense, nz * ntheta * nx, nz * nm * nx, backend=backend) + assert dottest( + PPop_dense, + nz * ntheta * nx, + nz * nm * nx, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Linear operator PPop = PrestackLinearModelling( - wav, - theta, - vsvp=par["vsvp"], + wav.astype(dtype), + theta.astype(dtype), + vsvp=par["vsvp"] + if isinstance(par["vsvp"], float) + else par["vsvp"].astype(dtype), nt0=nz, spatdims=(nx,), linearization=par["linearization"], explicit=False, ) - assert dottest(PPop_dense, nz * ntheta * nx, nz * nm * nx, backend=backend) + assert dottest( + PPop_dense, + nz * ntheta * nx, + nz * nm * nx, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) # Compare data - d = (PPop * m2d.ravel()).reshape(nz, ntheta, nx) + d = (PPop * m2d.astype(dtype).ravel()).reshape(nz, ntheta, nx) d_dense = ( - (PPop_dense * m2d.swapaxes(0, 1).ravel()).reshape(ntheta, nz, nx).swapaxes(0, 1) + (PPop_dense * m2d.astype(dtype).swapaxes(0, 1).ravel()) + .reshape(ntheta, nz, nx) + .swapaxes(0, 1) ) + assert d.dtype == dtype + assert d_dense.dtype == dtype assert_array_almost_equal(d, d_dense, decimal=4) # Inversion @@ -426,14 +476,15 @@ def test_PrestackLinearModelling2d(par): ) minv2d = PrestackInversion( d, - theta, - wav, - m0=mback2d, + theta.astype(dtype), + wav.astype(dtype), + m0=mback2d.astype(dtype), explicit=explicit, epsI=par["epsI"], epsR=par["epsR"], epsRL1=par["epsRL1"], simultaneous=par["simultaneous"], - **dict_inv + **dict_inv, ) - assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(minv2d) < 2e-1 + err = 1e-1 if dtype == np.float32 else 5e-2 + assert np.linalg.norm(m2d - minv2d) / np.linalg.norm(minv2d) < err diff --git a/pytests/test_pwd.py b/pytests/test_pwd.py index 399379176..e4b56cd0c 100644 --- a/pytests/test_pwd.py +++ b/pytests/test_pwd.py @@ -9,12 +9,10 @@ par1 = { "nx": 16, "nt": 30, - "dtype": "float64", } # even par2 = { "nx": 17, "nt": 31, - "dtype": "float64", } # odd np.random.seed(10) @@ -24,29 +22,53 @@ int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_PWSprayer2D(par): - """Dot-test for PWSprayer2D""" - sigma = np.zeros((par["nx"], par["nt"]), dtype=par["dtype"]) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PWSprayer2D(par, dtype): + """Dot-test and forward/adjoint for PWSprayer2D""" + sigma = np.zeros((par["nx"], par["nt"]), dtype=dtype) Sop = PWSprayer2D( dims=(par["nx"], par["nt"]), sigma=sigma, - dtype=par["dtype"], + dtype=dtype, ) - dottest(Sop, Sop.shape[0], par["nx"] * par["nt"]) + dottest( + Sop, + Sop.shape[0], + par["nx"] * par["nt"], + rtol=1e-3 if dtype == np.float32 else 1e-6, + ) + + x = np.ones(par["nx"] * par["nt"], dtype=dtype) + y = Sop * x + xadj = Sop.H * x + assert y.dtype == dtype + assert xadj.dtype == dtype @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2)]) -def test_PWSmoother2D(par): - """Dot-test for PWSmoother2D""" - sigma = np.zeros((par["nx"], par["nt"]), dtype=par["dtype"]) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_PWSmoother2D(par, dtype): + """Dot-test and forward/adjoint for PWSmoother2D""" + sigma = np.zeros((par["nx"], par["nt"]), dtype=dtype) Sop = PWSmoother2D( dims=(par["nx"], par["nt"]), sigma=sigma, - dtype=par["dtype"], + dtype=dtype, ) - dottest(Sop, Sop.shape[0], par["nx"] * par["nt"]) + dottest( + Sop, + Sop.shape[0], + par["nx"] * par["nt"], + rtol=1e-3 if dtype == np.float32 else 1e-6, + ) + + x = np.ones(par["nx"] * par["nt"], dtype=dtype) + y = Sop * x + xadj = Sop.H * x + assert y.dtype == dtype + assert xadj.dtype == dtype diff --git a/pytests/test_pytensoroperator.py b/pytests/test_pytensoroperator.py index 02a3431a4..4b4167663 100644 --- a/pytests/test_pytensoroperator.py +++ b/pytests/test_pytensoroperator.py @@ -18,8 +18,8 @@ pytensor.config.gcc__cxxflags = "-Wno-c++11-narrowing" -par1 = {"ny": 11, "nx": 11, "dtype": np.float32} # square -par2 = {"ny": 21, "nx": 11, "dtype": np.float32} # overdetermined +par1 = {"ny": 11, "nx": 11} # square +par2 = {"ny": 21, "nx": 11} # overdetermined np.random.seed(0) rng = np.random.default_rng() @@ -28,7 +28,7 @@ @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1)]) +@pytest.mark.parametrize("par", [(par1), (par2)]) def test_PyTensorOperator(par): """Verify output and gradient of PyTensor function obtained from a LinearOperator.""" Dop = MatrixMult(np.random.normal(0.0, 1.0, (par["ny"], par["nx"]))) @@ -48,7 +48,7 @@ def test_PyTensorOperator(par): @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) -@pytest.mark.parametrize("par", [(par1)]) +@pytest.mark.parametrize("par", [(par1), (par2)]) def test_PyTensorOperator_nd(par): """Verify output and gradient of PyTensor function obtained from a LinearOperator using an ND-array.""" diff --git a/pytests/test_radon.py b/pytests/test_radon.py index 0f88e224a..787fa635d 100644 --- a/pytests/test_radon.py +++ b/pytests/test_radon.py @@ -119,9 +119,10 @@ ) def test_unknown_engine(): """Check error is raised if unknown engine is passed""" - with pytest.raises(KeyError): + with pytest.raises(ValueError, match="`engine` must be numpy"): _ = Radon2D(None, None, None, engine="foo") - with pytest.raises(KeyError): + + with pytest.raises(ValueError, match="`engine` must be numpy"): _ = Radon3D(None, None, None, None, None, engine="foo") @@ -131,15 +132,16 @@ def test_unknown_engine(): @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)] ) -def test_Radon2D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Radon2D(par, dtype): """Dot-test, forward and adjoint consistency check (for onthefly parameter), and sparse inverse for Radon2D operator """ dt, dh = 0.005, 1 - t = np.arange(par["nt"]) * dt - h = np.arange(par["nhx"]) * dh - px = np.linspace(0, par["pxmax"], par["npx"]) - x = np.zeros((par["npx"], par["nt"])) + t = np.arange(par["nt"], dtype=dtype) * dt + h = np.arange(par["nhx"], dtype=dtype) * dh + px = np.linspace(0, par["pxmax"], par["npx"], dtype=dtype) + x = np.zeros((par["npx"], par["nt"]), dtype=dtype) x[2, par["nt"] // 2] = 1 Rop = Radon2D( @@ -151,7 +153,7 @@ def test_Radon2D(par): kind=par["kind"], onthefly=False, engine=par["engine"], - dtype="float64", + dtype=dtype, ) R1op = Radon2D( t, @@ -162,16 +164,25 @@ def test_Radon2D(par): kind=par["kind"], onthefly=True, engine=par["engine"], - dtype="float64", + dtype=dtype, + ) + assert dottest( + Rop, + par["nhx"] * par["nt"], + par["npx"] * par["nt"], + rtol=1e-3 if dtype == np.float32 else 1e-6, ) - assert dottest(Rop, par["nhx"] * par["nt"], par["npx"] * par["nt"], rtol=1e-3) y = Rop * x.ravel() y1 = R1op * x.ravel() + assert y.dtype == dtype + assert y1.dtype == dtype assert_array_almost_equal(y, y1, decimal=4) xadj = Rop.H * y xadj1 = R1op.H * y + assert xadj.dtype == dtype + assert xadj1.dtype == dtype assert_array_almost_equal(xadj, xadj1, decimal=4) xinv, _, _ = fista(Rop, y, niter=30, eps=1e0) @@ -184,17 +195,18 @@ def test_Radon2D(par): @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)] ) -def test_Radon3D(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Radon3D(par, dtype): """Dot-test, forward and adjoint consistency check (for onthefly parameter), and sparse inverse for Radon3D operator """ dt, dhy, dhx = 0.005, 1, 1 - t = np.arange(par["nt"]) * dt - hy = np.arange(par["nhy"]) * dhy - hx = np.arange(par["nhx"]) * dhx - py = np.linspace(0, par["pymax"], par["npy"]) - px = np.linspace(0, par["pxmax"], par["npx"]) - x = np.zeros((par["npy"], par["npx"], par["nt"])) + t = np.arange(par["nt"], dtype=dtype) * dt + hy = np.arange(par["nhy"], dtype=dtype) * dhy + hx = np.arange(par["nhx"], dtype=dtype) * dhx + py = np.linspace(0, par["pymax"], par["npy"], dtype=dtype) + px = np.linspace(0, par["pxmax"], par["npx"], dtype=dtype) + x = np.zeros((par["npy"], par["npx"], par["nt"]), dtype=dtype) x[3, 2, par["nt"] // 2] = 1 Rop = Radon3D( @@ -208,7 +220,7 @@ def test_Radon3D(par): kind=par["kind"], onthefly=False, engine=par["engine"], - dtype="float64", + dtype=dtype, ) R1op = Radon3D( t, @@ -221,21 +233,25 @@ def test_Radon3D(par): kind=par["kind"], onthefly=True, engine=par["engine"], - dtype="float64", + dtype=dtype, ) - assert dottest( Rop, par["nhy"] * par["nhx"] * par["nt"], par["npy"] * par["npx"] * par["nt"], - rtol=1e-3, + rtol=1e-3 if dtype == np.float32 else 1e-6, ) + y = Rop * x.ravel() y1 = R1op * x.ravel() + assert y.dtype == dtype + assert y1.dtype == dtype assert_array_almost_equal(y, y1, decimal=4) xadj = Rop.H * y xadj1 = R1op.H * y + assert xadj.dtype == dtype + assert xadj1.dtype == dtype assert_array_almost_equal(xadj, xadj1, decimal=4) if Rop.engine == "numba": # as numpy is too slow here... diff --git a/pytests/test_restriction.py b/pytests/test_restriction.py index d3f40deac..4f2893447 100644 --- a/pytests/test_restriction.py +++ b/pytests/test_restriction.py @@ -22,8 +22,16 @@ "imag": 0, "dtype": "float64", "inplace": "True", -} # real, inplace -par2 = { +} # real (fp64), inplace +par1s = { + "ny": 21, + "nx": 11, + "nt": 20, + "imag": 0, + "dtype": "float32", + "inplace": "True", +} # real (fp32), inplace +par1j = { "ny": 21, "nx": 11, "nt": 20, @@ -31,15 +39,23 @@ "dtype": "complex128", "inplace": "True", } # complex, inplace -par3 = { +par2 = { "ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float64", "inplace": "False", -} # real, out of place -par4 = { +} # real (fp64), out of place +par2s = { + "ny": 21, + "nx": 11, + "nt": 20, + "imag": 0, + "dtype": "float32", + "inplace": "False", +} # real (fp32), out of place +par2j = { "ny": 21, "nx": 11, "nt": 20, @@ -52,47 +68,59 @@ perc_subsampling = 0.4 -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j), (par2), (par2s), (par2j)]) def test_Restriction_1dsignal(par): """Dot-test, forward and adjoint for Restriction operator for 1d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype Nsub = int(np.round(par["nx"] * perc_subsampling)) iava = np.sort(np.random.permutation(np.arange(par["nx"]))[:Nsub]) - Rop = Restriction(par["nx"], iava, inplace=par["dtype"], dtype=par["dtype"]) + Rop = Restriction(par["nx"], iava, inplace=par["inplace"], dtype=par["dtype"]) assert dottest( - Rop, Nsub, par["nx"], complexflag=0 if par["imag"] == 0 else 3, backend=backend + Rop, + Nsub, + par["nx"], + complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - x = np.ones(par["nx"]) + par["imag"] * np.ones(par["nx"]) + x = np.ones(par["nx"], dtype=dtype) + par["imag"] * np.ones(par["nx"], dtype=dtype) y = Rop * x x1 = Rop.H * y y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, y1[iava]) assert_array_almost_equal(x[iava], x1[iava]) -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j), (par2), (par2s), (par2j)]) def test_Restriction_2dsignal(par): """Dot-test, forward and adjoint for Restriction operator for 2d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - x = np.ones((par["nx"], par["nt"])) + par["imag"] * np.ones((par["nx"], par["nt"])) + x = np.ones((par["nx"], par["nt"]), dtype=dtype) + par["imag"] * np.ones( + (par["nx"], par["nt"]), dtype=dtype + ) # 1st direction Nsub = int(np.round(par["nx"] * perc_subsampling)) iava = np.sort(np.random.permutation(np.arange(par["nx"]))[:Nsub]) Rop = Restriction( - (par["nx"], par["nt"]), iava, axis=0, inplace=par["dtype"], dtype=par["dtype"] + (par["nx"], par["nt"]), iava, axis=0, inplace=par["inplace"], dtype=par["dtype"] ) assert dottest( Rop, Nsub * par["nt"], par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -101,6 +129,8 @@ def test_Restriction_2dsignal(par): y1_fromflat = np.asarray(Rop.mask(x.ravel())) y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, y1_fromflat.reshape(par["nx"], par["nt"])[iava]) assert_array_almost_equal(y, y1[iava]) assert_array_almost_equal(x[iava], x1[iava]) @@ -110,13 +140,14 @@ def test_Restriction_2dsignal(par): iava = np.sort(np.random.permutation(np.arange(par["nt"]))[:Nsub]) Rop = Restriction( - (par["nx"], par["nt"]), iava, axis=1, inplace=par["dtype"], dtype=par["dtype"] + (par["nx"], par["nt"]), iava, axis=1, inplace=par["inplace"], dtype=par["dtype"] ) assert dottest( Rop, par["nx"] * Nsub, par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -125,18 +156,21 @@ def test_Restriction_2dsignal(par): y1_fromflat = np.asarray(Rop.mask(x.ravel())) y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, y1_fromflat[:, iava]) assert_array_almost_equal(y, y1[:, iava]) assert_array_almost_equal(x[:, iava], x1[:, iava]) -@pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j), (par2), (par2s), (par2j)]) def test_Restriction_3dsignal(par): """Dot-test, forward and adjoint for Restriction operator for 3d signal""" np.random.seed(10) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype - x = np.ones((par["ny"], par["nx"], par["nt"])) + par["imag"] * np.ones( - (par["ny"], par["nx"], par["nt"]) + x = np.ones((par["ny"], par["nx"], par["nt"]), dtype=dtype) + par["imag"] * np.ones( + (par["ny"], par["nx"], par["nt"]), dtype=dtype ) # 1st direction @@ -147,7 +181,7 @@ def test_Restriction_3dsignal(par): (par["ny"], par["nx"], par["nt"]), iava, axis=0, - inplace=par["dtype"], + inplace=par["inplace"], dtype=par["dtype"], ) assert dottest( @@ -155,6 +189,7 @@ def test_Restriction_3dsignal(par): Nsub * par["nx"] * par["nt"], par["ny"] * par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -163,6 +198,8 @@ def test_Restriction_3dsignal(par): y1_fromflat = np.asarray(Rop.mask(x.ravel())) y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal( y, y1_fromflat.reshape(par["ny"], par["nx"], par["nt"])[iava] ) @@ -177,7 +214,7 @@ def test_Restriction_3dsignal(par): (par["ny"], par["nx"], par["nt"]), iava, axis=1, - inplace=par["dtype"], + inplace=par["inplace"], dtype=par["dtype"], ) assert dottest( @@ -185,6 +222,7 @@ def test_Restriction_3dsignal(par): par["ny"] * Nsub * par["nt"], par["ny"] * par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -193,6 +231,8 @@ def test_Restriction_3dsignal(par): y1_fromflat = np.asarray(Rop.mask(x.ravel())) y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, y1_fromflat[:, iava]) assert_array_almost_equal(y, y1[:, iava]) assert_array_almost_equal(x[:, iava], x1[:, iava]) @@ -205,7 +245,7 @@ def test_Restriction_3dsignal(par): (par["ny"], par["nx"], par["nt"]), iava, axis=2, - inplace=par["dtype"], + inplace=par["inplace"], dtype=par["dtype"], ) assert dottest( @@ -213,6 +253,7 @@ def test_Restriction_3dsignal(par): par["ny"] * par["nx"] * Nsub, par["ny"] * par["nx"] * par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -221,6 +262,8 @@ def test_Restriction_3dsignal(par): y1_fromflat = np.asarray(Rop.mask(x.ravel())) y1 = np.asarray(Rop.mask(x)) + assert y.dtype == par["dtype"] + assert x1.dtype == par["dtype"] assert_array_almost_equal(y, y1_fromflat[:, :, iava]) assert_array_almost_equal(y, y1[:, :, iava]) assert_array_almost_equal(x[:, :, iava], x1[:, :, iava]) diff --git a/pytests/test_seislet.py b/pytests/test_seislet.py index 0e57ec16f..8e4869ab3 100644 --- a/pytests/test_seislet.py +++ b/pytests/test_seislet.py @@ -15,7 +15,6 @@ "dx": 10, "dt": 0.004, "level": None, - "dtype": "float32", } # nx power of 2, max level par2 = { "nx": 16, @@ -23,7 +22,6 @@ "dx": 10, "dt": 0.004, "level": 2, - "dtype": "float32", } # nx power of 2, smaller level par3 = { "nx": 13, @@ -31,7 +29,6 @@ "dx": 10, "dt": 0.004, "level": 2, - "dtype": "float32", } # nx not power of 2, max level np.random.seed(10) @@ -46,8 +43,10 @@ def test_predict_trace(par): t = np.arange(par["nt"]) * par["dt"] for slope in [-0.2, 0.0, 0.3]: Fop = FunctionOperator( - lambda x: _predict_trace(x, t, par["dt"], par["dx"], slope), - lambda x: _predict_trace(x, t, par["dt"], par["dx"], slope, adj=True), + lambda x, slope=slope: _predict_trace(x, t, par["dt"], par["dx"], slope), + lambda x, slope=slope: _predict_trace( + x, t, par["dt"], par["dx"], slope, adj=True + ), par["nt"], par["nt"], ) @@ -79,7 +78,10 @@ def _predict_reshape( slope = np.random.normal(0, 0.1, (2 ** (repeat + 1) * par["nx"], par["nt"])) for backward in (False, True): Fop = FunctionOperator( - lambda x: _predict_reshape( + lambda x, + predictor=predictor, + slope=slope, + backward=backward: _predict_reshape( predictor, x, par["nt"], @@ -89,7 +91,10 @@ def _predict_reshape( slope, backward=backward, ), - lambda x: _predict_reshape( + lambda x, + predictor=predictor, + slope=slope, + backward=backward: _predict_reshape( predictor, x, par["nt"], @@ -110,9 +115,10 @@ def _predict_reshape( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3)]) -def test_Seislet(par): - """Dot-test and forward-inverse for Seislet""" - slope = np.random.normal(0, 0.1, (par["nx"], par["nt"])) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Seislet(par, dtype): + """Dot-test and forward/adjoint/inverse for Seislet""" + slope = np.random.normal(0, 0.1, (par["nx"], par["nt"])).astype(dtype) for kind in ("haar", "linear"): Sop = Seislet( @@ -120,11 +126,19 @@ def test_Seislet(par): sampling=(par["dx"], par["dt"]), level=par["level"], kind=kind, - dtype=par["dtype"], + dtype=dtype, + ) + dottest( + Sop, + Sop.shape[0], + par["nx"] * par["nt"], + rtol=1e-3 if dtype == np.float32 else 1e-6, ) - dottest(Sop, Sop.shape[0], par["nx"] * par["nt"]) - x = np.random.normal(0, 0.1, par["nx"] * par["nt"]) + x = np.random.normal(0, 0.1, par["nx"] * par["nt"]).astype(dtype) y = Sop * x + xadj = Sop.H * y xinv = Sop.inverse(y) - assert_array_almost_equal(x, xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 6) diff --git a/pytests/test_shift.py b/pytests/test_shift.py index 1d9dfb278..5311ff833 100644 --- a/pytests/test_shift.py +++ b/pytests/test_shift.py @@ -24,14 +24,28 @@ "ny": 11, "imag": 0, "dtype": "float64", -} # square real +} # square real (fp64) par2 = { "nt": 41, "nx": 21, "ny": 11, "imag": 0, "dtype": "float64", -} # overdetermined real +} # overdetermined real (fp64) +par1s = { + "nt": 41, + "nx": 41, + "ny": 11, + "imag": 0, + "dtype": "float32", +} # square real (fp32) +par2s = { + "nt": 41, + "nx": 21, + "ny": 11, + "imag": 0, + "dtype": "float32", +} # overdetermined real (fp32) par1j = { "nt": 41, "nx": 41, @@ -51,7 +65,7 @@ @pytest.mark.parametrize("par", [(par1)]) def test_unknown_engine(par): """Check error is raised if unknown engine is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`engine` must be numpy"): _ = Shift( par["nt"], 1.0, @@ -59,14 +73,16 @@ def test_unknown_engine(par): ) -@pytest.mark.parametrize("par", [(par1), (par1j)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Shift1D(par): - """Dot-test and inversion for Shift operator on 1d data""" + """Dot-test and forward/adjoint/inversion for Shift operator on 1d data""" np.random.seed(0) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + shift = 5.5 x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) Sop = Shift( @@ -77,12 +93,15 @@ def test_Shift1D(par): par["nt"], par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Sop * x + xadj = Sop.H * y xlsqr = lsqr( Sop, - Sop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -90,22 +109,27 @@ def test_Shift1D(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="SciPy engine not compatible with CuPy", ) -@pytest.mark.parametrize("par", [(par1), (par1j)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Shift1D_scipy(par): - """Dot-test and inversion for Shift operator on 1d data + """Dot-test and forward/adjoint/inversion for Shift operator on 1d data with scipy engine and workers""" np.random.seed(0) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + shift = 5.5 x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) Sop = Shift( @@ -121,12 +145,15 @@ def test_Shift1D_scipy(par): par["nt"], par["nt"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + y = Sop * x + xadj = Sop.H * y xlsqr = lsqr( Sop, - Sop * x, + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -134,21 +161,26 @@ def test_Shift1D_scipy(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_Shift2D(par): - """Dot-test and inversion for Shift operator on 2d data""" + """Dot-test and forward/adjoint/inversion for Shift operator on 2d data""" np.random.seed(0) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + shift = 5.5 # 1st axis x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) - x = np.outer(x, np.ones(par["nx"])) + x = np.outer(x, np.ones(par["nx"], dtype=dtype)) Sop = Shift( (par["nt"], par["nx"]), shift, @@ -161,11 +193,15 @@ def test_Shift2D(par): par["nt"] * par["nx"], par["nt"] * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + y = Sop * x.ravel() + xadj = Sop.H * y xlsqr = lsqr( Sop, - Sop * x.ravel(), + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -173,14 +209,17 @@ def test_Shift2D(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) # 2nd axis x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) - x = np.outer(x, np.ones(par["nx"])).T + x = np.outer(x, np.ones(par["nx"], dtype=dtype)).T Sop = Shift( (par["nx"], par["nt"]), shift, @@ -193,11 +232,15 @@ def test_Shift2D(par): par["nt"] * par["nx"], par["nt"] * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + y = Sop * x.ravel() + xadj = Sop.H * y xlsqr = lsqr( Sop, - Sop * x.ravel(), + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -205,21 +248,26 @@ def test_Shift2D(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) -@pytest.mark.parametrize("par", [(par1), (par2), (par1j), (par2j)]) +@pytest.mark.parametrize("par", [(par1), (par2), (par1s), (par2s), (par1j), (par2j)]) def test_Shift2Dvariable(par): - """Dot-test and inversion for Shift operator on 2d data with variable shift""" + """Dot-test and forward/adjoint/inversion for Shift operator on 2d data with variable shift""" np.random.seed(0) + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + shift = npp.arange(par["nx"]) # 1st axis x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) - x = np.outer(x, np.ones(par["nx"])) + x = np.outer(x, np.ones(par["nx"], dtype=dtype)) Sop = Shift( (par["nt"], par["nx"]), shift, @@ -232,11 +280,15 @@ def test_Shift2Dvariable(par): par["nt"] * par["nx"], par["nt"] * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + y = Sop * x.ravel() + xadj = Sop.H * y xlsqr = lsqr( Sop, - Sop * x.ravel(), + y, x0=np.zeros_like(x), damp=1e-20, niter=200, @@ -244,14 +296,17 @@ def test_Shift2Dvariable(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) # 2nd axis x = np.asarray( - gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] - + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0] + gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) + + par["imag"] * gaussian(np.arange(par["nt"] // 2 + 1), 2.0)[0].astype(dtype) ) - x = np.outer(x, np.ones(par["nx"])).T + x = np.outer(x, np.ones(par["nx"], dtype=dtype)).T Sop = Shift( (par["nx"], par["nt"]), shift, @@ -264,8 +319,12 @@ def test_Shift2Dvariable(par): par["nt"] * par["nx"], par["nt"] * par["nx"], complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) + + y = Sop * x.ravel() + xadj = Sop.H * y xlsqr = lsqr( Sop, Sop * x.ravel(), @@ -276,4 +335,7 @@ def test_Shift2Dvariable(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=1) + + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] + assert_array_almost_equal(x, xlsqr, decimal=2 if dtype == np.float32 else 4) diff --git a/pytests/test_sliding.py b/pytests/test_sliding.py index de0141b11..73e5404fa 100644 --- a/pytests/test_sliding.py +++ b/pytests/test_sliding.py @@ -13,6 +13,7 @@ import pytest from pylops.basicoperators import Identity, MatrixMult +from pylops.optimization.basic import cgls from pylops.signalprocessing import Sliding1D, Sliding2D, Sliding3D from pylops.signalprocessing.sliding1d import sliding1d_design from pylops.signalprocessing.sliding2d import sliding2d_design @@ -112,9 +113,10 @@ @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Sliding1D(par): - """Dot-test and inverse for Sliding1D operator""" - Op = MatrixMult(np.ones((par["nwiny"], par["ny"]))) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding1D(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding1D operator""" + Op = MatrixMult(np.ones((par["nwiny"], par["ny"]), dtype=dtype), dtype=dtype) nwins, dim = sliding1d_design(par["npy"], par["nwiny"], par["novery"], par["ny"])[ :2 @@ -129,27 +131,38 @@ def test_Sliding1D(par): tapertype=par["tapertype"], savetaper=par["savetaper"], ) - assert dottest(Slid, par["npy"], par["ny"] * nwins, backend=backend) - x = np.ones(par["ny"] * nwins) + assert dottest( + Slid, + par["npy"], + par["ny"] * nwins, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + x = np.ones((nwins, par["ny"]), dtype=dtype) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_Sliding1D_simOp(par): - """Dot-test and inverse for Sliding1D operator with +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding1D_simOp(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding1D operator with Op applied to all windows simultaneously """ nwins, dim = sliding1d_design( par["npy"], par["nwiny"], par["novery"], par["nwiny"] )[:2] - Op = Identity((nwins, par["nwiny"])) + Op = Identity((nwins, par["nwiny"]), dtype=dtype) Slid = Sliding1D( Op, @@ -160,18 +173,30 @@ def test_Sliding1D_simOp(par): tapertype=par["tapertype"], savetaper=par["savetaper"], ) - assert dottest(Slid, par["npy"], par["nwiny"] * nwins) - x = np.ones(par["nwiny"] * nwins) + assert dottest( + Slid, + par["npy"], + par["nwiny"] * nwins, + rtol=1e-3 if dtype == np.float32 else 1e-6, + ) + x = np.ones((nwins, par["nwiny"]), dtype=dtype) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Sliding2D(par): - """Dot-test and inverse for Sliding2D operator""" - Op = MatrixMult(np.ones((par["nwiny"] * par["nt"], par["ny"] * par["nt"]))) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding2D(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding2D operator""" + Op = MatrixMult( + np.ones((par["nwiny"] * par["nt"], par["ny"] * par["nt"]), dtype=dtype), + dtype=dtype, + ) nwins, dims = sliding2d_design( (par["npy"], par["nt"]), par["nwiny"], par["novery"], (par["ny"], par["nt"]) @@ -186,28 +211,36 @@ def test_Sliding2D(par): savetaper=par["savetaper"], ) assert dottest( - Slid, par["npy"] * par["nt"], par["ny"] * par["nt"] * nwins, backend=backend + Slid, + par["npy"] * par["nt"], + par["ny"] * par["nt"] * nwins, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, ) - x = np.ones((par["ny"] * nwins, par["nt"])) + x = np.ones((nwins, par["ny"], par["nt"]), dtype=dtype) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_Sliding2D_simOp(par): - """Dot-test and inverse for Sliding2D operator with +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding2D_simOp(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding2D operator with Op applied to all windows simultaneously """ nwins, dims = sliding2d_design( (par["npy"], par["nt"]), par["nwiny"], par["novery"], (par["nwiny"], par["nt"]) )[:2] - Op = Identity((nwins, par["nwiny"], par["nt"])) + Op = Identity((nwins, par["nwiny"], par["nt"]), dtype=dtype) Slid = Sliding2D( Op, @@ -218,20 +251,37 @@ def test_Sliding2D_simOp(par): tapertype=par["tapertype"], savetaper=par["savetaper"], ) - x = np.ones((nwins, par["nwiny"], par["nt"])) + assert dottest( + Slid, + par["npy"] * par["nt"], + par["nwiny"] * par["nt"] * nwins, + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + x = np.ones((nwins, par["nwiny"], par["nt"]), dtype=dtype) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Sliding3D(par): - """Dot-test and inverse for Sliding3D operator""" +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding3D(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding3D operator""" Op = MatrixMult( np.ones( - (par["nwiny"] * par["nwinx"] * par["nt"], par["ny"] * par["nx"] * par["nt"]) - ) + ( + par["nwiny"] * par["nwinx"] * par["nt"], + par["ny"] * par["nx"] * par["nt"], + ), + dtype=dtype, + ), + dtype=dtype, ) nwins, dims = sliding3d_design( @@ -255,21 +305,27 @@ def test_Sliding3D(par): Slid, par["npy"] * par["npx"] * par["nt"], par["ny"] * par["nx"] * par["nt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - x = np.ones((par["ny"] * par["nx"] * nwins[0] * nwins[1], par["nt"])) + + x = np.ones((nwins[0], nwins[1], par["ny"], par["nx"], par["nt"]), dtype=dtype) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) @pytest.mark.skipif( int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled" ) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_Sliding3D_simOp(par): - """Dot-test and inverse for Sliding3D operator with +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Sliding3D_simOp(par, dtype): + """Dot-test and forward/adjoint/inverse for Sliding3D operator with Op applied to all windows simultaneously """ nwins, dims = sliding3d_design( @@ -279,7 +335,7 @@ def test_Sliding3D_simOp(par): (par["nwiny"], par["nwinx"], par["nt"]), )[:2] - Op = Identity((*nwins, par["nwiny"], par["nwinx"], par["nt"])) + Op = Identity((*nwins, par["nwiny"], par["nwinx"], par["nt"]), dtype=dtype) Slid = Sliding3D( Op, @@ -295,9 +351,16 @@ def test_Sliding3D_simOp(par): Slid, par["npy"] * par["npx"] * par["nt"], par["nwiny"] * par["nwinx"] * par["nt"] * nwins[0] * nwins[1], + rtol=1e-3 if dtype == np.float32 else 1e-6, + ) + + x = np.ones( + (nwins[0], nwins[1], par["nwiny"], par["nwinx"], par["nt"]), dtype=dtype ) - x = np.ones((par["nwiny"] * par["nwinx"] * nwins[0] * nwins[1], par["nt"])) y = Slid * x.ravel() + xadj = Slid.H * y + xinv = cgls(Slid, y, niter=50)[0] - xinv = Slid / y - assert_array_almost_equal(x.ravel(), xinv) + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xinv, decimal=3 if dtype == np.float32 else 8) diff --git a/pytests/test_smoothing.py b/pytests/test_smoothing.py index 12d1f5bf1..8caf94e71 100644 --- a/pytests/test_smoothing.py +++ b/pytests/test_smoothing.py @@ -12,7 +12,7 @@ backend = "numpy" import pytest -from pylops.basicoperators import Smoothing1D, Smoothing2D +from pylops.basicoperators import Smoothing1D, Smoothing2D, SmoothingND from pylops.optimization.basic import lsqr from pylops.utils import dottest @@ -27,14 +27,23 @@ @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4)]) -def test_Smoothing1D(par): - """Dot-test and inversion for smoothing""" +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Smoothing1D(par, dtype): + """Dot-test and forward/adjoint/inversion for Smoothing1D""" + # 1d kernel on 1d signal - D1op = Smoothing1D(nsmooth=5, dims=par["nx"], dtype="float64") - assert dottest(D1op, par["nx"], par["nx"], backend=backend) + D1op = Smoothing1D(nsmooth=5, dims=par["nx"], dtype=dtype) + assert dottest( + D1op, + par["nx"], + par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) - x = np.random.normal(0, 1, par["nx"]) + x = np.random.normal(0, 1, par["nx"]).astype(dtype) y = D1op * x + xadj = D1op.H * y xlsqr = lsqr( D1op, y, @@ -45,16 +54,26 @@ def test_Smoothing1D(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=3) + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xlsqr, decimal=1 if dtype == np.float32 else 3) # 1d kernel on 2d signal D1op = Smoothing1D( - nsmooth=5, dims=(par["ny"], par["nx"]), axis=par["axis"], dtype="float64" + nsmooth=5, dims=(par["ny"], par["nx"]), axis=par["axis"], dtype=dtype + ) + assert dottest( + D1op, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) - assert dottest(D1op, par["ny"] * par["nx"], par["ny"] * par["nx"], backend=backend) - x = np.random.normal(0, 1, (par["ny"], par["nx"])).ravel() + x = np.random.normal(0, 1, (par["ny"], par["nx"])).astype(dtype).ravel() y = D1op * x + xadj = D1op.H * y xlsqr = lsqr( D1op, y, @@ -65,51 +84,68 @@ def test_Smoothing1D(par): btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=3) + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xlsqr, decimal=1 if dtype == np.float32 else 3) # 1d kernel on 3d signal D1op = Smoothing1D( nsmooth=5, dims=(par["nz"], par["ny"], par["nx"]), axis=par["axis"], - dtype="float64", + dtype=dtype, ) assert dottest( D1op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"], - rtol=1e-3, + rtol=1e-4 if dtype == np.float32 else 1e-6, ) - x = np.random.normal(0, 1, (par["nz"], par["ny"], par["nx"])).ravel() + x = np.random.normal(0, 1, (par["nz"], par["ny"], par["nx"])).astype(dtype).ravel() y = D1op * x + xadj = D1op.H * y xlsqr = lsqr( D1op, y, x0=np.zeros_like(x), damp=1e-10, - niter=100, + niter=200, atol=1e-8, btol=1e-8, show=0, )[0] - assert_array_almost_equal(x, xlsqr, decimal=3) + + assert y.dtype == dtype + assert xadj.dtype == dtype + assert_array_almost_equal(x, xlsqr, decimal=1 if dtype == np.float32 else 3) @pytest.mark.parametrize("par", [(par1), (par2), (par3), (par4), (par5), (par6)]) -def test_Smoothing2D(par): - """Dot-test for smoothing""" +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_Smoothing2D(par, dtype): + """Dot-test for Smoothing2D""" # 2d kernel on 2d signal if par["axis"] < 2: - D2op = Smoothing2D(nsmooth=(5, 5), dims=(par["ny"], par["nx"]), dtype="float64") - assert dottest(D2op, par["ny"] * par["nx"], par["ny"] * par["nx"], rtol=1e-3) + D2op = Smoothing2D(nsmooth=(5, 5), dims=(par["ny"], par["nx"]), dtype=dtype) + assert dottest( + D2op, + par["ny"] * par["nx"], + par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) # forward - x = np.zeros((par["ny"], par["nx"])) + x = np.zeros((par["ny"], par["nx"]), dtype=dtype) x[par["ny"] // 2, par["nx"] // 2] = 1.0 x = x.ravel() y = D2op * x + xadj = D2op.H * y y = y.reshape(par["ny"], par["nx"]) + assert y.dtype == dtype + assert xadj.dtype == dtype assert_array_almost_equal( y[par["ny"] // 2 - 2 : par["ny"] // 2 + 3 :, par["nx"] // 2], np.ones(5) / 25, @@ -137,45 +173,52 @@ def test_Smoothing2D(par): nsmooth=(5, 5), dims=(par["nz"], par["ny"], par["nx"]), axes=axes, - dtype="float64", + dtype=dtype, ) assert dottest( - D2op, par["nz"] * par["ny"] * par["nx"], par["nz"] * par["ny"] * par["nx"] + D2op, + par["nz"] * par["ny"] * par["nx"], + par["nz"] * par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, ) # forward - x = np.zeros((par["nz"], par["ny"], par["nx"])) + x = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) x[par["nz"] // 2, par["ny"] // 2, par["nx"] // 2] = 1.0 x = x.ravel() y = D2op * x - y = y.reshape(par["nz"], par["ny"], par["nx"]) + xadj = D2op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + y = y.reshape(par["nz"], par["ny"], par["nx"]) if par["axis"] == 0: assert_array_almost_equal( - y[par["nz"] // 2, par["ny"] // 2 - 2 : par["ny"] // 2 + 3, par["nx"] // 2], - np.ones(5) / 25, - ) - assert_array_almost_equal( - y[par["nz"] // 2, par["ny"] // 2, par["nx"] // 2 - 2 : par["nx"] // 2 + 3], - np.ones(5) / 25, + y[ + par["nz"] // 2, + par["ny"] // 2 - 2 : par["ny"] // 2 + 3, + par["nx"] // 2 - 2 : par["nx"] // 2 + 3, + ], + np.ones((5, 5)) / 25, ) elif par["axis"] == 1: assert_array_almost_equal( - y[par["nz"] // 2 - 2 : par["nz"] // 2 + 3, par["ny"] // 2, par["nx"] // 2], - np.ones(5) / 25, - ) - assert_array_almost_equal( - y[par["nz"] // 2, par["ny"] // 2, par["nx"] // 2 - 2 : par["nx"] // 2 + 3], - np.ones(5) / 25, + y[ + par["nz"] // 2 - 2 : par["nz"] // 2 + 3, + par["ny"] // 2, + par["nx"] // 2 - 2 : par["nx"] // 2 + 3, + ], + np.ones((5, 5)) / 25, ) elif par["axis"] == 2: assert_array_almost_equal( - y[par["nz"] // 2 - 2 : par["nz"] // 2 + 3, par["ny"] // 2, par["nx"] // 2], - np.ones(5) / 25, - ) - assert_array_almost_equal( - y[par["nz"] // 2, par["ny"] // 2 - 2 : par["ny"] // 2 + 3, par["nx"] // 2], - np.ones(5) / 25, + y[ + par["nz"] // 2 - 2 : par["nz"] // 2 + 3, + par["ny"] // 2 - 2 : par["ny"] // 2 + 3, + par["nx"] // 2, + ], + np.ones((5, 5)) / 25, ) # inverse @@ -190,3 +233,64 @@ def test_Smoothing2D(par): show=0, )[0] assert_array_almost_equal(x, xlsqr, decimal=1) + + +@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_SmoothingND(par, dtype): + """Dot-test for SmoothingND""" + # 3d signal + axes = list(range(3)) + D3op = SmoothingND( + nsmooth=(3, 3, 3), + dims=(par["nz"], par["ny"], par["nx"]), + axes=axes, + dtype=dtype, + ) + assert dottest( + D3op, + par["nz"] * par["ny"] * par["nx"], + par["nz"] * par["ny"] * par["nx"], + rtol=1e-4 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + # forward + x = np.zeros((par["nz"], par["ny"], par["nx"]), dtype=dtype) + x[par["nz"] // 2, par["ny"] // 2, par["nx"] // 2] = 1.0 + x = x.ravel() + y = D3op * x + xadj = D3op.H * y + assert y.dtype == dtype + assert xadj.dtype == dtype + + y = y.reshape(par["nz"], par["ny"], par["nx"]) + assert_array_almost_equal( + y[ + par["nz"] // 2 - 1 : par["nz"] // 2 + 2, + par["ny"] // 2 - 1 : par["ny"] // 2 + 2, + par["nx"] // 2 - 1 : par["nx"] // 2 + 2, + ], + np.ones((3, 3, 3)) / 27, + ) + assert_array_almost_equal( + y[par["nz"] // 2, par["ny"] // 2 - 1 : par["ny"] // 2 + 2, par["nx"] // 2], + np.ones(3) / 27, + ) + assert_array_almost_equal( + y[par["nz"] // 2, par["ny"] // 2, par["nx"] // 2 - 1 : par["nx"] // 2 + 2], + np.ones(3) / 27, + ) + + # inverse + xlsqr = lsqr( + D3op, + y.ravel(), + x0=np.zeros_like(x), + damp=1e-10, + niter=400, + atol=1e-8, + btol=1e-8, + show=0, + )[0] + assert_array_almost_equal(x, xlsqr, decimal=1) diff --git a/pytests/test_sparsity.py b/pytests/test_sparsity.py index 90eb59629..54e3a1ee7 100644 --- a/pytests/test_sparsity.py +++ b/pytests/test_sparsity.py @@ -95,7 +95,7 @@ def test_IRLS_unknown_kind(): """Check error is raised if unknown kind is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(NotImplementedError, match="`kind` must be model"): _ = irls(Identity(5), np.ones(5), 10, kind="foo") @@ -331,17 +331,19 @@ def test_OMP_stopping(par): def test_ISTA_FISTA_unknown_threshkind(): """Check error is raised if unknown threshkind is passed""" - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError, match="`threshkind` must be"): _ = ista(Identity(5), np.ones(5), 10, threshkind="foo") - with pytest.raises(NotImplementedError): + + with pytest.raises(ValueError, match="`threshkind` must be"): _ = fista(Identity(5), np.ones(5), 10, threshkind="foo") def test_ISTA_FISTA_missing_perc(): """Check error is raised if perc=None and threshkind is percentile based""" - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="Provide a percentile"): _ = ista(Identity(5), np.ones(5), 10, perc=None, threshkind="soft-percentile") - with pytest.raises(ValueError): + + with pytest.raises(ValueError, match="Provide a percentile"): _ = fista(Identity(5), np.ones(5), 10, perc=None, threshkind="soft-percentile") @@ -361,7 +363,7 @@ def test_ISTA_FISTA_alpha_too_high(par): for solver in [ista, fista]: # check that exception is raised - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="due to residual increasing"): _, _, _ = solver( Aop, y, diff --git a/pytests/test_torchoperator.py b/pytests/test_torchoperator.py index 2fddd3bb4..a3690c333 100644 --- a/pytests/test_torchoperator.py +++ b/pytests/test_torchoperator.py @@ -17,28 +17,31 @@ from pylops import MatrixMult, TorchOperator from pylops.utils.backend import to_numpy -par1 = {"ny": 11, "nx": 11, "dtype": np.float32} # square -par2 = {"ny": 21, "nx": 11, "dtype": np.float32} # overdetermined +par1 = {"ny": 11, "nx": 11} # square +par2 = {"ny": 21, "nx": 11} # overdetermined np.random.seed(0) @pytest.mark.skipif(platform.system() == "Darwin", reason="Not OSX enabled") @pytest.mark.parametrize("par", [(par1)]) -def test_TorchOperator(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_TorchOperator(par, dtype): """Apply forward and gradient. As for linear operators the gradient must equal the adjoint of operator applied to the same vector, the two results are also checked to be the same. """ device = "cpu" if backend == "numpy" else "cuda" - Dop = MatrixMult(np.random.normal(0.0, 1.0, (par["ny"], par["nx"]))) + Dop = MatrixMult( + np.random.normal(0.0, 1.0, (par["ny"], par["nx"])).astype(dtype), dtype=dtype + ) Top = TorchOperator(Dop, batch=False, device="cpu" if backend == "numpy" else "gpu") - x = np.random.normal(0.0, 1.0, par["nx"]) + x = np.random.normal(0.0, 1.0, par["nx"]).astype(dtype) xt = torch.from_numpy(to_numpy(x)).to(device).view(-1) xt.requires_grad = True - v = np.random.normal(0.0, 1.0, par["ny"]) + v = np.random.normal(0.0, 1.0, par["ny"]).astype(dtype) vt = torch.from_numpy(to_numpy(v)).to(device).view(-1) # pylops operator @@ -48,46 +51,61 @@ def test_TorchOperator(par): # torch operator yt = Top.apply(xt) yt.backward(vt, retain_graph=True) + yt = yt.detach().cpu().numpy() + xadjt = xt.grad.cpu().numpy() - assert_array_equal(y, yt.detach().cpu().numpy()) - assert_array_equal(xadj, xt.grad.cpu().numpy()) + assert yt.dtype == x.dtype + assert xadjt.dtype == x.dtype + assert_array_equal(y, yt) + assert_array_equal(xadj, xadjt) @pytest.mark.skipif(platform.system() == "Darwin", reason="Not OSX enabled") @pytest.mark.parametrize("par", [(par1)]) -def test_TorchOperator_batch(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_TorchOperator_batch(par, dtype): """Apply forward for input with multiple samples (= batch) and flattened arrays""" device = "cpu" if backend == "numpy" else "cuda" - Dop = MatrixMult(np.random.normal(0.0, 1.0, (par["ny"], par["nx"]))) + Dop = MatrixMult( + np.random.normal(0.0, 1.0, (par["ny"], par["nx"])).astype(dtype), dtype=dtype + ) Top = TorchOperator(Dop, batch=True, device="cpu" if backend == "numpy" else "gpu") - x = np.random.normal(0.0, 1.0, (4, par["nx"])) + x = np.random.normal(0.0, 1.0, (4, par["nx"])).astype(dtype) xt = torch.from_numpy(to_numpy(x)).to(device) xt.requires_grad = True y = Dop.matmat(x.T).T yt = Top.apply(xt) - - assert_array_equal(y, yt.detach().cpu().numpy()) + yt = yt.detach().cpu().numpy() + assert yt.dtype == x.dtype + assert_array_equal(y, yt) @pytest.mark.skipif(platform.system() == "Darwin", reason="Not OSX enabled") @pytest.mark.parametrize("par", [(par1)]) -def test_TorchOperator_batch_nd(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_TorchOperator_batch_nd(par, dtype): """Apply forward for input with multiple samples (= batch) and nd-arrays""" device = "cpu" if backend == "numpy" else "cuda" - Dop = MatrixMult(np.random.normal(0.0, 1.0, (par["ny"], par["nx"])), otherdims=(2,)) + Dop = MatrixMult( + np.random.normal(0.0, 1.0, (par["ny"], par["nx"])).astype(dtype), + otherdims=(2,), + dtype=dtype, + ) Top = TorchOperator( Dop, batch=True, flatten=False, device="cpu" if backend == "numpy" else "cuda" ) - x = np.random.normal(0.0, 1.0, (4, par["nx"], 2)) + x = np.random.normal(0.0, 1.0, (4, par["nx"], 2)).astype(dtype) xt = torch.from_numpy(to_numpy(x)).to(device) xt.requires_grad = True y = (Dop @ x.transpose(1, 2, 0)).transpose(2, 0, 1) yt = Top.apply(xt) + yt = yt.detach().cpu().numpy() - assert_array_equal(y, yt.detach().cpu().numpy()) + assert yt.dtype == dtype + assert_array_equal(y, yt) diff --git a/pytests/test_transpose.py b/pytests/test_transpose.py index f143b1a87..9dbb92192 100644 --- a/pytests/test_transpose.py +++ b/pytests/test_transpose.py @@ -16,19 +16,22 @@ from pylops.basicoperators import Transpose from pylops.utils import dottest -par1 = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float64"} # real -par2 = {"ny": 21, "nx": 11, "nt": 20, "imag": 1j, "dtype": "complex128"} # complex +par1 = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float64"} # real (fp64) +par1s = {"ny": 21, "nx": 11, "nt": 20, "imag": 0, "dtype": "float32"} # real (fp32) +par1j = {"ny": 21, "nx": 11, "nt": 20, "imag": 1j, "dtype": "complex128"} # complex np.random.seed(10) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Transpose_2dsignal(par): """Dot-test and adjoint for Transpose operator for 2d signals""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + dims = (par["ny"], par["nx"]) - x = np.arange(par["ny"] * par["nx"]).reshape(dims) + par["imag"] * np.arange( - par["ny"] * par["nx"] - ).reshape(dims) + x = np.arange(par["ny"] * par["nx"], dtype=dtype).reshape(dims) + par[ + "imag" + ] * np.arange(par["ny"] * par["nx"], dtype=dtype).reshape(dims) Top = Transpose(dims=dims, axes=(1, 0), dtype=par["dtype"]) assert dottest( @@ -36,6 +39,7 @@ def test_Transpose_2dsignal(par): npp.prod(dims), npp.prod(dims), complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) y = Top * x.ravel() @@ -44,24 +48,29 @@ def test_Transpose_2dsignal(par): y = y.reshape(Top.dimsd) xadj = xadj.reshape(Top.dims) + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x, xadj) assert_array_equal(y, x.T) -@pytest.mark.parametrize("par", [(par1), (par2)]) +@pytest.mark.parametrize("par", [(par1), (par1s), (par1j)]) def test_Transpose_3dsignal(par): """Dot-test and adjoint for Transpose operator for 3d signals""" + dtype = np.empty(0, dtype=par["dtype"]).real.dtype + dims = (par["ny"], par["nx"], par["nt"]) - x = np.arange(par["ny"] * par["nx"] * par["nt"]).reshape(dims) + par[ + x = np.arange(par["ny"] * par["nx"] * par["nt"], dtype=dtype).reshape(dims) + par[ "imag" - ] * np.arange(par["ny"] * par["nx"] * par["nt"]).reshape(dims) + ] * np.arange(par["ny"] * par["nx"] * par["nt"], dtype=dtype).reshape(dims) - Top = Transpose(dims=dims, axes=(2, 1, 0)) + Top = Transpose(dims=dims, axes=(2, 1, 0), dtype=par["dtype"]) assert dottest( Top, npp.prod(dims), npp.prod(dims), complexflag=0 if par["imag"] == 0 else 3, + rtol=1e-4 if dtype == np.float32 else 1e-6, backend=backend, ) @@ -71,4 +80,6 @@ def test_Transpose_3dsignal(par): y = y.reshape(Top.dimsd) xadj = xadj.reshape(Top.dims) + assert y.dtype == par["dtype"] + assert xadj.dtype == par["dtype"] assert_array_equal(x, xadj) diff --git a/pytests/test_twoway.py b/pytests/test_twoway.py index 3df5d8f4c..ffa7ae2af 100644 --- a/pytests/test_twoway.py +++ b/pytests/test_twoway.py @@ -61,3 +61,9 @@ def test_acwave2d(): assert dottest( Dop, par["ns"] * par["nr"] * Dop.geometry.nt, par["nz"] * par["nx"], atol=1e-1 ) + + x = np.ones(par["nz"] * par["nx"], dtype="float32") + y = Dop * x + xadj = Dop.H * y + assert y.dtype == "float32" + assert xadj.dtype == "float32" diff --git a/pytests/test_waveeqprocessing.py b/pytests/test_waveeqprocessing.py index c943ef2b4..c4457a798 100644 --- a/pytests/test_waveeqprocessing.py +++ b/pytests/test_waveeqprocessing.py @@ -140,9 +140,12 @@ def create_data(par, nv): @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)] ) -def test_MDC_1virtualsource(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_MDC_1virtualsource(par, dtype): """Dot-test and inversion for MDC operator of 1 virtual source""" + cdtype = (np.empty(0, dtype=dtype) + 1j * np.empty(0, dtype=dtype)).dtype nt2, wav, mwav, Gwav, Gwav_fft = create_data(par, 1) + Gwav_fft = Gwav_fft.astype(cdtype) MDCop = MDC( np.asarray(Gwav_fft).transpose(2, 0, 1), @@ -152,12 +155,20 @@ def test_MDC_1virtualsource(par): dr=parmod["dx"], twosided=par["twosided"], ) - dottest(MDCop, nt2 * parmod["ny"], nt2 * parmod["nx"], backend=backend) - mwav = np.asarray(mwav).T + dottest( + MDCop, + nt2 * parmod["ny"], + nt2 * parmod["nx"], + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + mwav = np.asarray(mwav.astype(dtype)).T d = MDCop * mwav.ravel() d = d.reshape(nt2, parmod["ny"]) + assert d.dtype == dtype - for it, amp in zip(it0_G, amp_G): + for it, amp in zip(it0_G, amp_G, strict=True): ittot = it0_m + it if par["twosided"]: ittot += par["nt"] - 1 @@ -201,9 +212,12 @@ def test_MDC_1virtualsource(par): @pytest.mark.parametrize( "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)] ) -def test_MDC_Nvirtualsources(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_MDC_Nvirtualsources(par, dtype): """Dot-test and inversion for MDC operator of N virtual source""" + cdtype = (np.empty(0, dtype=dtype) + 1j * np.empty(0, dtype=dtype)).dtype nt2, _, mwav, Gwav, Gwav_fft = create_data(par, parmod["nx"]) + Gwav_fft = Gwav_fft.astype(cdtype) MDCop = MDC( np.asarray(Gwav_fft).transpose(2, 0, 1), @@ -217,14 +231,16 @@ def test_MDC_Nvirtualsources(par): MDCop, nt2 * parmod["ny"] * parmod["nx"], nt2 * parmod["nx"] * parmod["nx"], + rtol=1e-3 if dtype == np.float32 else 1e-6, backend=backend, ) - mwav = np.asarray(mwav).transpose(2, 0, 1) + mwav = np.asarray(mwav.astype(dtype)).transpose(2, 0, 1) d = MDCop * mwav.ravel() d = d.reshape(nt2, parmod["ny"], parmod["nx"]) + assert d.dtype == dtype - for it, _ in zip(it0_G, amp_G): + for it, _ in zip(it0_G, amp_G, strict=True): ittot = it0_m + it if par["twosided"]: ittot += par["nt"] - 1 @@ -272,9 +288,12 @@ def test_MDC_Nvirtualsources(par): (par1), ], ) -def test_MDC_1virtualsource_scipy(par): +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_MDC_1virtualsource_scipy(par, dtype): """Dot-test for MDC operator of 1 virtual source with scipy engine and workers""" - nt2, _, _, _, Gwav_fft = create_data(par, 1) + cdtype = (np.empty(0, dtype=dtype) + 1j * np.empty(0, dtype=dtype)).dtype + nt2, _, mwav, _, Gwav_fft = create_data(par, 1) + Gwav_fft = Gwav_fft.astype(cdtype) MDCop = MDC( np.asarray(Gwav_fft).transpose(2, 0, 1), @@ -286,4 +305,15 @@ def test_MDC_1virtualsource_scipy(par): engine="scipy", **dict(workers=4), ) - dottest(MDCop, nt2 * parmod["ny"], nt2 * parmod["nx"], backend=backend) + dottest( + MDCop, + nt2 * parmod["ny"], + nt2 * parmod["nx"], + rtol=1e-3 if dtype == np.float32 else 1e-6, + backend=backend, + ) + + mwav = np.asarray(mwav.astype(dtype)).T + d = MDCop * mwav.ravel() + d = d.reshape(nt2, parmod["ny"]) + assert d.dtype == dtype diff --git a/requirements-dev-arm.txt b/requirements-dev-arm.txt deleted file mode 100644 index 985ac7b1a..000000000 --- a/requirements-dev-arm.txt +++ /dev/null @@ -1,33 +0,0 @@ -numpy>=2.0.0 -scipy>=1.13.0 -jax -numba -pyfftw -PyWavelets -spgl1 -scikit-fmm -sympy -devito -# dtcwt (until numpy>=2.0.0 is supported) -# astra-toolbox (not available on arm-osx) -matplotlib -ipython -pytest -pytest-runner -setuptools_scm -docutils<0.18 -Sphinx -pooch -pydata-sphinx-theme -sphinx-gallery -sphinxemoji -numpydoc -nbsphinx -image -pre-commit -autopep8 -isort -black -flake8 -mypy -pytensor>=2.28.0 diff --git a/requirements-dev-gpu.txt b/requirements-dev-gpu.txt deleted file mode 100644 index 6d011e53b..000000000 --- a/requirements-dev-gpu.txt +++ /dev/null @@ -1,27 +0,0 @@ -numpy>=2.0.0 -scipy>=1.13.0 -cupy-cuda12x -torch -numba -sympy -astra-toolbox>=2.3.0 -matplotlib -ipython -pytest -pytest-runner -setuptools_scm -docutils<0.18 -Sphinx -pooch -pydata-sphinx-theme -sphinx-gallery -sphinxemoji -numpydoc -nbsphinx -image -pre-commit -autopep8 -isort -black -flake8 -mypy diff --git a/requirements-dev.txt b/requirements-dev.txt index f10a40025..5987d2496 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -13,12 +13,13 @@ matplotlib ipython pytest pytest-runner -setuptools_scm docutils<0.18 Sphinx pooch -pydata-sphinx-theme +shibuya +sphinx-design sphinx-gallery +sphinx-iconify sphinxemoji numpydoc nbsphinx diff --git a/requirements-doc.txt b/requirements-doc.txt deleted file mode 100644 index 64c12e391..000000000 --- a/requirements-doc.txt +++ /dev/null @@ -1,36 +0,0 @@ -numpy>=2.0.0 -scipy>=1.13.0 -jax -numba -pyfftw -PyWavelets -spgl1 -scikit-fmm -sympy -devito -# dtcwt (until numpy>=2.0.0 is supported) -astra-toolbox>=2.2.0 -matplotlib -ipython -pytest -pytest-runner -setuptools_scm -docutils<0.18 -Sphinx -pooch -pydata-sphinx-theme -sphinx-gallery -sphinxemoji -numpydoc -nbsphinx -image -pre-commit -autopep8 -isort -black -flake8 -mypy -standard-imghdr; python_version >= '3.13' -pytensor>=2.28.0 -pymc>=5.21.0 -mkl_fft; sys_platform != "darwin" diff --git a/requirements-pyfftw.txt b/requirements-pyfftw.txt deleted file mode 100644 index 0ee0a8295..000000000 --- a/requirements-pyfftw.txt +++ /dev/null @@ -1 +0,0 @@ -pyfftw diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 9c558e357..000000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -. diff --git a/setup.cfg b/setup.cfg deleted file mode 100755 index 4c13f09cb..000000000 --- a/setup.cfg +++ /dev/null @@ -1,49 +0,0 @@ -[aliases] -test=pytest - -[tool:pytest] -addopts = --verbose -python_files = pytests/*.py - -[flake8] -ignore = E203, E501, W503, E402 -per-file-ignores = - __init__.py: F401, F403, F405 -max-line-length = 88 - -# mypy global options -[mypy] -plugins = numpy.typing.mypy_plugin -ignore_errors = False -allow_redefinition = True - -# mypy per-module options -[mypy-IPython.*] -ignore_missing_imports = True - -[mypy-scipy.*] -ignore_missing_imports = True - -[mypy-numba.*] -ignore_missing_imports = True - -[mypy-pyfftw.*] -ignore_missing_imports = True - -[mypy-pywt.*] -ignore_missing_imports = True - -[mypy-spgl1.*] -ignore_missing_imports = True - -[mypy-skfmm.*] -ignore_missing_imports = True - -[mypy-devito.*] -ignore_missing_imports = True - -[mypy-examples.*] # devito-examples -ignore_missing_imports = True - -[mypy-cupy.*] -ignore_missing_imports = True diff --git a/tutorials/README.txt b/tutorials/README.txt index cc1d37774..13b88920d 100755 --- a/tutorials/README.txt +++ b/tutorials/README.txt @@ -1,4 +1,4 @@ .. _tutorials: -Tutorials ---------- +|:books:| Tutorials +------------------- diff --git a/tutorials/bayesian.py b/tutorials/bayesian.py index 653d6b3d0..9f12e4260 100755 --- a/tutorials/bayesian.py +++ b/tutorials/bayesian.py @@ -42,6 +42,7 @@ \mathbf{R} \mathbf{C}_{x_0} """ + import matplotlib.pyplot as plt # sphinx_gallery_thumbnail_number = 2 @@ -63,9 +64,14 @@ def prior_realization(f0, a0, phi0, sigmaf, sigmaa, sigmaphi, dt, nt, nfft): """ f = np.fft.rfftfreq(nfft, dt) df = f[1] - f[0] - ifreqs = [int(np.random.normal(f, sigma) / df) for f, sigma in zip(f0, sigmaf)] - amps = [np.random.normal(a, sigma) for a, sigma in zip(a0, sigmaa)] - phis = [np.random.normal(phi, sigma) for phi, sigma in zip(phi0, sigmaphi)] + ifreqs = [ + int(np.random.normal(f, sigma) / df) + for f, sigma in zip(f0, sigmaf, strict=True) + ] + amps = [np.random.normal(a, sigma) for a, sigma in zip(a0, sigmaa, strict=True)] + phis = [ + np.random.normal(phi, sigma) for phi, sigma in zip(phi0, sigmaphi, strict=True) + ] # input signal in frequency domain X = np.zeros(nfft // 2 + 1, dtype="complex128") @@ -183,8 +189,11 @@ def prior_realization(f0, a0, phi0, sigmaf, sigmaa, sigmaphi, dt, nt, nfft): # Next we solve the same Bayesian inversion equation iteratively. We will see # that provided we use enough iterations we can retrieve the same values of # the analytical posterior mean -xpost_iter = x0 + Cm_op * Rop.H * ( - lsqr(Rop * Cm_op * Rop.H + Cd_op, yn - Rop * x0, iter_lim=400)[0] +xpost_iter = ( + x0 + + Cm_op + * Rop.H + * (lsqr(Rop * Cm_op * Rop.H + Cd_op, yn - Rop * x0, iter_lim=400)[0]) ) ############################################################################### @@ -200,7 +209,7 @@ def prior_realization(f0, a0, phi0, sigmaf, sigmaa, sigmaphi, dt, nt, nfft): nreals = 1000 xrto = [] -for ireal in range(nreals): +for _ in range(nreals): yreal = yn + Rop * np.random.normal(0, sigmad, nt) xrto.append( x0 diff --git a/tutorials/deblending.py b/tutorials/deblending.py index 72f62d4dc..b024f02f8 100755 --- a/tutorials/deblending.py +++ b/tutorials/deblending.py @@ -42,7 +42,6 @@ """ import matplotlib.pyplot as plt import numpy as np -from scipy.sparse.linalg import lobpcg as sp_lobpcg import pylops @@ -147,6 +146,7 @@ )[0] data_inv = Sop * p_inv data_inv = data_inv.reshape(ns, nt) +snr_inv = pylops.utils.metrics.snr(data, data_inv) fig, axs = plt.subplots(1, 4, sharey=False, figsize=(12, 8)) axs[0].imshow( @@ -181,7 +181,7 @@ interpolation="none", ) axs[2].set_xlabel("#Src") -axs[2].set_title("Deblended CRG") +axs[2].set_title(f"Deblended CRG (SNR: {snr_inv:.2f} dB)") axs[2].axis("tight") axs[3].imshow( data.T.real - data_inv.T.real, diff --git a/tutorials/deblurring.py b/tutorials/deblurring.py index a397805be..ebc6e71e1 100755 --- a/tutorials/deblurring.py +++ b/tutorials/deblurring.py @@ -28,8 +28,8 @@ nh = [15, 25] hz = np.exp(-0.1 * np.linspace(-(nh[0] // 2), nh[0] // 2, nh[0]) ** 2) hx = np.exp(-0.03 * np.linspace(-(nh[1] // 2), nh[1] // 2, nh[1]) ** 2) -hz /= np.trapz(hz) # normalize the integral to 1 -hx /= np.trapz(hx) # normalize the integral to 1 +hz /= np.trapezoid(hz) # normalize the integral to 1 +hx /= np.trapezoid(hx) # normalize the integral to 1 h = hz[:, np.newaxis] * hx[np.newaxis, :] fig, ax = plt.subplots(1, 1, figsize=(5, 3)) diff --git a/tutorials/linearoperator.py b/tutorials/linearoperator.py index 6c85f9c4b..3cf8dd5d4 100755 --- a/tutorials/linearoperator.py +++ b/tutorials/linearoperator.py @@ -264,7 +264,6 @@ # operator acts on one dimension of a 2d-array. We will see how in this case the forward # and adjoint passes can be applied on the flattened array as well as on the 2d-array directly -# m, n = 10, 5 d = np.arange(n) + 1.0 x = np.ones((m, n)) diff --git a/tutorials/timeshift.py b/tutorials/timeshift.py new file mode 100755 index 000000000..77403bd0a --- /dev/null +++ b/tutorials/timeshift.py @@ -0,0 +1,570 @@ +r""" +22. Time-shift estimation +========================= +This tutorial showcases how one can leverage the extensive suite of PyLops operators +to solve nonlinear inverse problems with minimal additional boilerplate code. We will +both create a simple nonlinear solver and take advantage of existing solvers provided +by third-party library such as SciPy. + +We are going to consider a classic problem in signal processing, namely the registration +of two signals where one signal is a non-stationary shifted version of the other: + +.. math:: + d_2(t) = d_1(t - \delta t(t)) + +where :math:`d_1(t)` and :math:`d_2(t)` are the two signals to register and +:math:`\delta t(t)` is the time-shift that we want to estimate. When :math:`\delta t(t) > 0`, +the second signal is delayed with respect to the first one, whilst when :math:`\delta t(t) < 0`, +the second signal is anticipated with respect to the first one. + +""" + +from functools import partial + +import matplotlib.pyplot as plt +import numpy as np +from scipy.optimize import least_squares +from scipy.signal.windows import hamming +from scipy.sparse.linalg import aslinearoperator + +import pylops + +np.random.seed(10) +plt.close("all") + +############################################################################### +# Let's first create a signal represented by the superposition of three +# sinusoids and a shifted version of it given a known time-shift function. + +# time axis +dt = 0.004 +nt = 101 +t = np.arange(nt) * dt + +# input signal (with taper on the edges) +d1 = ( + np.sin(2 * np.pi * 10 * t) + + 0.4 * np.sin(2 * np.pi * 20 * t) + - 2 * np.sin(2 * np.pi * 5 * t) +) +d1 *= hamming(nt) + +# define time-shift as integral of a step-like function +steps = np.zeros(nt) +steps[20:70] = -3e-4 +shift = np.cumsum(steps) + +# apply time-shift +tshift = t - shift +iava = tshift / dt +SOp, iava = pylops.signalprocessing.Interp(nt, iava, kind="sinc") +d2 = SOp @ d1 + +# revert time-shift +tshift_rev = t + shift +iava_rev = tshift_rev / dt +SOprev, iava_rev = pylops.signalprocessing.Interp(nt, iava_rev, kind="sinc") +d1back = SOprev @ d2 + +fig, axs = plt.subplots(1, 3, figsize=(12, 3)) +axs[0].plot(t, shift, "k") +axs[0].set_title("Time-Shift") + +axs[1].plot(t, d1, "k", label=r"$d_1(t)$") +axs[1].plot(t, d2, "r", label=r"$d_2(t)=d_1(t - \delta t)$") +axs[1].legend() +axs[1].set_title("Signals") + +axs[2].plot(t, d1, "k", label=r"$d_1(t)$") +axs[2].plot(t, d1back, "r", label=r"$d_{1,back}(t)=d_2(t + \delta t)$") +axs[2].legend() +axs[2].set_title("Corrected signal") +fig.tight_layout() + +############################################################################### +# We can now try to estimate the time-shift function given the two signals by +# minimizing the following cost function: +# +# .. math:: +# J(\delta t(t)) = ||d_2(t) - d_1(t - \delta t(t))||^2 +# +# This is a nonlinear problem as the operator that maps :math:`d_1(t)` into +# :math:`d_1(t - \delta t(t))` depends on the unknown time-shift function +# :math:`\delta t(t)`. We can however solve this problem iteratively by +# linearizing the operator around the current estimate of the time-shift +# function at each iteration. In particular, we can write the Taylor +# expansion of :math:`d_1(t - \delta t(t))` around :math:`t` as: +# +# .. math:: +# d_1(t - \delta t(t)) = d_1(t) - \frac{\partial d_1}{\partial t}|_t \delta t(t) +# +# If we discretize the time axis, we can express this operation in a +# matrix-vector: +# +# .. math:: +# \mathbf{d}_{1, \boldsymbol \delta_\mathbf{t}} = \mathbf{d}_1 + \mathbf{J} +# \boldsymbol \delta \mathbf{t} +# +# where the Jacobian matrix is given by +# :math:`\mathbf{J}= -diag\{\frac{\partial \mathbf{d}_1}{\partial t}|_{t=t}\}`. +# +# We can now solve the following linear least-squares problem: +# +# .. math:: +# J = ||(\mathbf{d}_2 - \mathbf{d}_1) - \mathbf{J} \boldsymbol +# \delta \mathbf{t})||_2^2 + \epsilon ||\nabla \boldsymbol \delta \mathbf{t}||_2^2 +# +# where a regularization term is added to promote smooth solutions. + +# data term +ddiff = d2 - d1 + +# Jacobian +DOp = pylops.FirstDerivative(nt, sampling=dt, edge=True) +J = -pylops.Diagonal(DOp @ d1) + +# second derivative regularization +D2Op = pylops.SecondDerivative(nt) + +# inversion +shift_est = pylops.optimization.leastsquares.regularized_inversion( + J, + ddiff, + [ + D2Op, + ], + epsRs=[ + 1e3, + ], + **dict(iter_lim=200) +)[0] + +# revert time-shift (with estimated shift) +tshift_est = t + shift_est +iava_est = tshift_est / dt +SOpest, iava_est = pylops.signalprocessing.Interp(nt, iava_est, kind="sinc") +d1back_est = SOpest * d2 + +fig, axs = plt.subplots(1, 2, figsize=(12, 3)) +axs[0].plot(t, shift, "k", label="True") +axs[0].plot(t, shift_est, "r", label="Estimated") +axs[0].set_title("Shifts") + +axs[1].plot(t, d1, "k", label=r"$d_1(t)$") +axs[1].plot(t, d1back_est, "r", label=r"$d_{1,back}(t)=d_2(t + \delta \tilde{t})$") +axs[1].plot(t, d1 - d1back_est, "k", lw=0.5) +axs[1].legend() +axs[1].set_title("Corrected signal") +fig.tight_layout() + +############################################################################### +# We can see that the estimated time-shift closely matches the true one and +# that the corrected signal is very similar to the original one. However, we +# have so far discarded the higher order terms in the Taylor expansion of +# :math:`d_1(t - \delta t(t))`. We can therefore try to improve our estimate +# by iterating the above procedure a few times, updating the Jacobian at each +# iteration with the current estimate of the time-shift function. In other +# words, at each iteration :math:`i=0,1,...`, we perform the following steps: +# +# - Compute the Jacobian :math:`\mathbf{J}^{i}= -diag\{\frac{\partial +# \tilde{\mathbf{d}}^i_1}{\partial t}|_{t=t}\}` +# - Solve the linear least-squares problem +# +# .. math:: +# J = ||(\mathbf{d}_2 - \tilde{\mathbf{d}}^i_1) - \mathbf{J}^i \boldsymbol +# \Delta \mathbf{t}^{i+1})||_2^2 + \epsilon ||\nabla (\boldsymbol \Delta \mathbf{t}^{i+1} + +# \boldsymbol \delta \mathbf{t}^i)||_2^2 +# +# - Update the time-shift estimate as +# :math:`\delta t^{i+1}(t) = \delta t^i(t) + \Delta t^{i+1}(t)` +# We can repeat these steps until convergence is reached. +# - Time shift :math:`d_1^{i+1}(t)` with the current estimate of the time-shift +# function: :math:`\tilde{d}_1^{i+1}(t) = d_1^i(t + \delta t^{i+1}(t))` +# +# with :math:`\delta t^0(t)=0` and :math:`\tilde{d}_1^0(t)=d_1(t)`. + +# number of outer iterations +niter = 10 + +# pre-compute derivative operators +Dop = pylops.FirstDerivative(nt, edge=True) +D2Op = pylops.SecondDerivative(nt) + +shift_estgn = np.zeros(nt) +shift_estgn_hist = np.zeros((niter, nt)) + +d1shift = d1.copy() +Jhist_gn = [] + +for iiter in range(niter): + + # data term + ddiff = d2 - d1shift + + # compute residual norm + Jhist_gn.append(np.linalg.norm(ddiff)) + + # Jacobian + J = -pylops.Diagonal((Dop @ d1shift) / dt) + + # inversion + shift_estgn += pylops.optimization.leastsquares.regularized_inversion( + J, + ddiff, + [ + D2Op, + ], + epsRs=[ + 5e2, + ], + dataregs=[ + -D2Op * shift_estgn, + ], + **dict(iter_lim=100, damp=1e-4) + )[0] + shift_estgn_hist[iiter] = shift_estgn + + # revert current time-shift estimate + iava_gn = (t - shift_estgn) / dt + SOpgn, _ = pylops.signalprocessing.Interp(nt, iava_gn, kind="sinc") + d1shift = SOpgn @ d1 + +# compute final residual norm +Jhist_gn.append(np.linalg.norm(d2 - d1shift)) + +# revert time-shift (with estimated shift) +tshift_est = t + shift_estgn +iava_est = tshift_est / dt +SOpest, iava_est = pylops.signalprocessing.Interp(nt, iava_est, kind="sinc") +d1back_estgn = SOpest * d2 + +fig, axs = plt.subplots(1, 3, figsize=(12, 3)) +axs[0].plot(t, shift, "k", lw=2, label="True") +axs[0].plot(t, shift_estgn, "r", lw=2, label="Estimated") +axs[0].plot(t, shift_estgn_hist.T, "r", lw=0.5, alpha=0.4) +axs[0].set_title("Shifts") + +axs[1].plot(t, d1, "k", label=r"$d_1(t)$") +axs[1].plot(t, d1back_estgn, "r", label=r"$d_{1,back}(t)=d_2(t + \delta \tilde{t})$") +axs[1].plot(t, d1 - d1back_estgn, "k", lw=0.5) +axs[1].legend() +axs[1].set_title("Corrected signal") + +axs[2].plot(Jhist_gn, "k") +axs[2].set_title("Residual Norm") +fig.tight_layout() + + +############################################################################### +# A much better match! However, since we have alternated here the solution of +# linearized systems of equations (for an update in the time-shift) with a +# partial shifting of the input signal :math:`d_1(t)` with the current estimate +# of the time-shift, this pattern makes our solver very be-spoke. +# +# Next, we will see that if we sligthly reformulate our problem in such a way +# that partial shifting is not required, we can take advantage of an existing +# solver provided by a third-party library such as SciPy. To begin with, let's +# rewrite a generic Taylor expansion for :math:`d_1(t - \delta t^{i+1}(t))` +# around :math:`\delta t^i(t)`: +# +# .. math:: +# d_1(t - \delta t^{i+1}(t)) = d_1((t - \delta t^i(t)) - +# \Delta t^{i+1}(t)) = d_1(t) - \frac{\partial d_1}{\partial t} +# |_{t=t-\delta t^i(t)} \Delta t^{i+1}(t) +# +# Again, if we discretize the time axis, we can express this operation in a +# matrix-vector: +# +# .. math:: +# \mathbf{d}_{1, \boldsymbol \delta_\mathbf{t}^{i+1}} = \mathbf{d}^i_1 + \mathbf{J}^i +# \boldsymbol \Delta \mathbf{t}^{i+1} +# +# where the Jacobian matrix is given by +# :math:`\mathbf{J}^i= -diag\{\frac{\partial \mathbf{d}_1}{\partial t}|_{t=t-\delta t^i(t)}\}`. +# +# By doing so, we can now solve a series of linearized problems of the form: +# +# .. math:: +# J^{i+1} = ||(\mathbf{d}_2 - \tilde{\mathbf{d}}^i_1) - \mathbf{J}^i \boldsymbol +# \Delta \mathbf{t}^{i+1})||_2^2 + \epsilon ||\nabla (\boldsymbol \Delta \mathbf{t}^{i+1} + +# \boldsymbol \delta \mathbf{t}^i)||_2^2 +# +# where :math:`\tilde{d}_1^i(t) = d_1^i(t + \delta t^i(t))`, :math:`\delta t^0(t)=0`, +# and :math:`\tilde{d}_1^0(t)=d_1(t)`. This series of problems now amenable to the +# `scipy.optimize.least_squares `_ +# method. In practice, all we need to be able to create is two methods: the first, called ``fun``, must return +# the inner part of the objective function, the latter, called ``jacobian`` must create a linear operator that +# acts like the Jacobian of the augmented system. + + +def fun(x, d1, d2, t, dt, eps): + nt = len(t) + iava = (t - x) / dt + SOpest, iava = pylops.signalprocessing.Interp(nt, iava, kind="sinc") + D2Op = pylops.SecondDerivative(nt) + + d1shift = SOpest * d1 + res = d2 - d1shift + resr = D2Op * x + return np.hstack((res, eps * resr)) + + +def jacobian(x, d1, d2, t, dt, eps): + nt = len(t) + iava = (t - x) / dt + SOpest, _ = pylops.signalprocessing.Interp(nt, iava, kind="sinc") + S1Opest, _ = pylops.signalprocessing.Interp(nt, iava + 1, kind="sinc") + J = (S1Opest * d1 - SOpest * d1) / dt + D2Op = pylops.SecondDerivative(nt) + J = pylops.VStack([pylops.Diagonal(J), eps * D2Op]) + J = aslinearoperator(J) + return J + + +def callback(x, t, dt, d1, d2): + iava = (t - x) / dt + SOpgn, _ = pylops.signalprocessing.Interp(nt, iava, kind="sinc") + d1shift = SOpgn @ d1 + shift_estls_hist.append(x) + Jhist_ls.append(np.linalg.norm(d2 - d1shift)) + + +eps = 8e1 +shift_estls_hist = [] +Jhist_ls = [] +shift_estls = least_squares( + fun, + np.zeros(nt), + jac=jacobian, + method="trf", + verbose=1, + args=(d1, d2, t, dt, eps), + callback=partial(callback, t=t, dt=dt, d1=d1, d2=d2), +).x + +# revert time-shift (with estimated shift) +tshift_estls = t + shift_estls +iava_estls = tshift_estls / dt +SOpestls, iava_estls = pylops.signalprocessing.Interp(nt, iava_estls, kind="sinc") +d1back_estls = SOpestls * d2 + +fig, axs = plt.subplots(1, 3, figsize=(12, 3)) +axs[0].plot(t, shift, "k", lw=2, label="True") +axs[0].plot(t, shift_estls, "r", lw=2, label="Estimated") +axs[0].plot(t, np.vstack(shift_estls_hist).T, "r", lw=0.5, alpha=0.4) +axs[0].set_title("Shifts") + +axs[1].plot(t, d1, "k", label=r"$d_1(t)$") +axs[1].plot(t, d1back_estls, "r", label=r"$d_{1,back}(t)=d_2(t + \delta \tilde{t})$") +axs[1].plot(t, d1 - d1back_estls, "k", lw=0.5) +axs[1].legend() +axs[1].set_title("Corrected signal") + +axs[2].plot(Jhist_ls, "k") +axs[2].set_title("Residual Norm") +fig.tight_layout() + +############################################################################### +# Finally, we repeat the same exercise with a 2-dimensional dataset. Here, +# each trace is time shifted independently, however a :class:`pylops.Laplacian` +# operator is used to ensure smoothness in the solution across traces. +# +# Let's start by loading a +# `2D dataset `_ + +inputfile = "../testdata/sigmoid.npz" + +d1 = 1e3 * np.load(inputfile)["sigmoid"] +nx, nz = d1.shape +x = np.linspace(-500.0, 500.0, nx) +z = np.linspace(0.0, 400.0, nz) +X, Z = np.meshgrid(x, z, indexing="ij") + +############################################################################### +# Next, we define a shift composed of two gaussians with opposite polarity +# on either side of the x-axis + +dt = 0.004 +t = np.arange(nz) * dt +shift = np.exp(-np.sqrt((X + 250) ** 2 + (Z - 200) ** 2) / 200) - np.exp( + -np.sqrt((X - 250) ** 2 + (Z - 200) ** 2) / 200 +) +shift = 4e-4 * shift / shift.max() + +# apply time-shift +tshift = t[np.newaxis, :] - shift +iavas = tshift / dt +SOp = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nz, iava, kind="sinc")[0] for iava in iavas] +) +d2 = SOp * d1 + +# revert time-shift +tshift_rev = t[np.newaxis, :] + shift +iavas_rev = tshift_rev / dt +SOprev = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nz, iava, kind="sinc")[0] for iava in iavas_rev] +) +d2shifted = SOprev * d2 + +v = np.max(np.abs(shift)) +fig, axs = plt.subplots(1, 4, figsize=(15, 4), sharey=True) +axs[0].imshow(d1.T, aspect="auto", cmap="gray") +axs[0].set_title(r"$d_1(x, t)$") +axs[1].imshow(shift.T, aspect="auto", cmap="Spectral", vmin=-v, vmax=v) +axs[1].contour(shift.T, levels=np.linspace(-4e-4, 4e-4, 11), colors="k", linewidths=0.5) +axs[1].set_title("True shift") +axs[2].imshow(d2.T, aspect="auto", cmap="gray") +axs[2].set_title(r"$d_2(x, t)$") +axs[3].imshow(d1.T - d2.T, aspect="auto", cmap="gray") +axs[3].set_title(r"$d_1(x, t) - d_2(x, t)$") +fig.tight_layout() + +############################################################################### +# Like in the 1D, we start with a single linearization + +# data term +ddiff = d2 - d1 + +# Jabobian +DOp = pylops.FirstDerivative((nx, nz), axis=-1, sampling=dt, edge=True) +J = -pylops.Diagonal(DOp @ d1) + +# laplacian regularization +D2Op = pylops.Laplacian(dims=(nx, nz)) + +shift_est = pylops.optimization.leastsquares.regularized_inversion( + J, + ddiff.ravel(), + [ + D2Op, + ], + epsRs=[ + 1e4, + ], + **dict(iter_lim=1000) +)[0] +shift_est = shift_est.reshape(nx, nz) + +# shift back +tshift_est = t[np.newaxis, :] + shift_est +iavas_est = tshift_est / dt +SOpest = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nz, iava, kind="sinc")[0] for iava in iavas_est] +) +d1back_est = SOpest * d2 + +fig, axs = plt.subplots(1, 4, figsize=(15, 4), sharey=True) +axs[0].imshow(d1.T, aspect="auto", cmap="gray", vmin=-5.0, vmax=5.0) +axs[0].set_title(r"$d_1(x, t)$") +axs[1].imshow(shift_est.T, aspect="auto", cmap="Spectral", vmin=-v, vmax=v) +axs[1].contour( + shift_est.T, levels=np.linspace(-4e-4, 4e-4, 11), colors="k", linewidths=0.5 +) +axs[1].set_title("Estimated shift") +axs[2].imshow(d1back_est.T, aspect="auto", cmap="gray", vmin=-5.0, vmax=5.0) +axs[2].set_title(r"$d_{1,back}(x, t)=d_2(x, t + \delta \tilde{t})$") +axs[3].imshow(d1.T - d1back_est.T, aspect="auto", cmap="gray", vmin=-0.1, vmax=0.1) +axs[3].set_title(r"$d_1(x, t) - d_{1,back}(x, t)$") +fig.tight_layout() + +############################################################################### +# And finally by a series of linearizations using +# `scipy.optimize.least_squares `_ + + +def fun(x, d1, d2, t, dt, eps): + nt = len(t) + nx = x.size // nt + iavas = (t[np.newaxis, :] - x.reshape(nx, nt)) / dt + SOpest = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nt, iava, kind="sinc")[0] for iava in iavas] + ) + D2Op = pylops.Laplacian((nx, nt)) + + d1shift = SOpest * d1.ravel() + res = d2.ravel() - d1shift + resr = D2Op * x + return np.hstack((res, eps * resr)) + + +def jacobian(x, d1, d2, t, dt, eps): + nt = len(t) + nx = x.size // nt + iavas = (t[np.newaxis, :] - x.reshape(nx, nt)) / dt + SOpest = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nt, iava, kind="sinc")[0] for iava in iavas] + ) + S1Opest = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nt, iava + 1, kind="sinc")[0] for iava in iavas] + ) + J = (S1Opest * d1.ravel() - SOpest * d1.ravel()) / dt + D2Op = pylops.Laplacian((nx, nt)) + J = pylops.VStack([pylops.Diagonal(J), eps * D2Op]) + J = aslinearoperator(J) + return J + + +def callback(x, t, dt, d1, d2): + nt = len(t) + nx = x.size // nt + iavas = (t[np.newaxis, :] - x.reshape(nx, nt)) / dt + SOpgn = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nt, iava, kind="sinc")[0] for iava in iavas] + ) + d1shift = SOpgn @ d1.ravel() + shift_estls_hist.append(x) + Jhist_ls.append(np.linalg.norm(d2.ravel() - d1shift)) + + +eps = 5e2 +shift_estls_hist = [] +Jhist_ls = [] +shift_estls = least_squares( + fun, + np.zeros(nx * nz), + jac=jacobian, + method="trf", + verbose=1, + args=(d1, d2, t, dt, eps), + callback=partial(callback, t=t, dt=dt, d1=d1, d2=d2), +).x + +shift_estls = shift_estls.reshape(nx, nz) + +# revert time-shift +tshift_estls = t[np.newaxis, :] + shift_estls +iavas_estls = tshift_estls / dt +SOpestls = pylops.BlockDiag( + [pylops.signalprocessing.Interp(nz, iava, kind="sinc")[0] for iava in iavas_estls] +) +d1back_estls = SOpestls * d2 + +fig, axs = plt.subplots(1, 4, figsize=(15, 4), sharey=True) +axs[0].imshow(d1.T, aspect="auto", cmap="gray", vmin=-5.0, vmax=5.0) +axs[0].set_title(r"$d_1(x, t)$") +axs[1].imshow(shift_est.T, aspect="auto", cmap="Spectral", vmin=-v, vmax=v) +axs[1].contour( + shift_estls.T, levels=np.linspace(-4e-4, 4e-4, 11), colors="k", linewidths=0.5 +) +axs[1].set_title("Estimated shift") +axs[2].imshow(d1back_estls.T, aspect="auto", cmap="gray", vmin=-5.0, vmax=5.0) +axs[2].set_title(r"$d_{1,back}(x, t)=d_2(x, t + \delta \tilde{t})$") +axs[3].imshow(d1.T - d1back_estls.T, aspect="auto", cmap="gray", vmin=-0.1, vmax=0.1) +axs[3].set_title(r"$d_1(x, t) - d_{1,back}(x, t)$") +fig.tight_layout() + +fig, axs = plt.subplots(1, 2, figsize=(15, 4)) + +axs[0].plot(t, shift[nx // 4], "k", label="True") +axs[0].plot(t, shift_est[nx // 4], "r", label="Linearized") +axs[0].plot(t, shift_estls[nx // 4], "b", label="LS") +axs[0].plot(t, shift[-nx // 4], "k") +axs[0].plot(t, shift_est[-nx // 4], "r") +axs[0].plot(t, shift_estls[-nx // 4], "b") +axs[0].set_title("Shifts") +axs[0].legend() + +axs[1].plot(Jhist_ls, "k") +axs[1].set_title("Residual Norm") +fig.tight_layout() diff --git a/tutorials/torchop.py b/tutorials/torchop.py index a18ff2efb..1d14de586 100755 --- a/tutorials/torchop.py +++ b/tutorials/torchop.py @@ -110,7 +110,7 @@ class Network(nn.Module): def __init__(self, input_channels): - super(Network, self).__init__() + super().__init__() self.conv1 = nn.Conv2d( input_channels, input_channels // 2, kernel_size=3, padding=1 ) diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..ff6b9be9c --- /dev/null +++ b/uv.lock @@ -0,0 +1,10154 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +conflicts = [[ + { package = "pylops", extra = "gpu-cu12" }, + { package = "pylops", extra = "gpu-cu13" }, +], [ + { package = "pylops", extra = "deep" }, + { package = "pylops", extra = "deep-cu126" }, + { package = "pylops", extra = "deep-cu128" }, + { package = "pylops", extra = "deep-cu13" }, +]] + +[[package]] +name = "alabaster" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, +] + +[[package]] +name = "anytree" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/a8/eb55fab589c56f9b6be2b3fd6997aa04bb6f3da93b01154ce6fc8e799db2/anytree-2.13.0.tar.gz", hash = "sha256:c9d3aa6825fdd06af7ebb05b4ef291d2db63e62bb1f9b7d9b71354be9d362714", size = 48389, upload-time = "2025-04-08T21:06:30.662Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/98/f6aa7fe0783e42be3093d8ef1b0ecdc22c34c0d69640dfb37f56925cb141/anytree-2.13.0-py3-none-any.whl", hash = "sha256:4cbcf10df36b1f1cba131b7e487ff3edafc9d6e932a3c70071b5b768bab901ff", size = 45077, upload-time = "2025-04-08T21:06:29.494Z" }, +] + +[[package]] +name = "arviz" +version = "0.23.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h5netcdf" }, + { name = "h5py" }, + { name = "matplotlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "platformdirs" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools" }, + { name = "typing-extensions" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray-einstats", version = "0.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray-einstats", version = "0.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray-einstats", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/c9/9c853633715f972eecc20995763c6e3005a3afcdcf47e39d20cd1c2889cd/arviz-0.23.4.tar.gz", hash = "sha256:611be826995066036c9443ea98d11486c279ef3da3b6cdc5c0816fab434115b9", size = 1592968, upload-time = "2026-02-04T17:57:53.664Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/1f/227f9cb7edcd3e14ab05928f3db00e9d595c0f269c87bf35f565ce44941b/arviz-0.23.4-py3-none-any.whl", hash = "sha256:c46c7faf8a06abadc9b5b64000584062ecbc20c2298e2bd6dfba04bb01a684ca", size = 1673773, upload-time = "2026-02-04T17:57:51.778Z" }, +] + +[[package]] +name = "asgiref" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" }, +] + +[[package]] +name = "astra-toolbox" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.9.79", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep' or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.3.83", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.4.1.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep' or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/6f/3df54180d9a9d76ed01447ec249f689039ee4bab00ba378539a6b696a36e/astra_toolbox-2.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39ccf4f7c08ccd49e2ca2c2c58e981184ea16ca5f6c58a14b8ee6b456144f904", size = 13610894, upload-time = "2025-12-16T12:30:17.826Z" }, + { url = "https://files.pythonhosted.org/packages/9d/16/adedc170309c541908deb8e418ffc0a78de4ff82669e9be1a8cf43ccf710/astra_toolbox-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:090489c6d50ea3adcf62ecd21e8e82d66ee8c60c453a89912376d35842efaad3", size = 13739406, upload-time = "2025-12-16T12:30:20.695Z" }, + { url = "https://files.pythonhosted.org/packages/33/3d/f2a3495941fadb7b8aeb9bf46f2a1d4fb2cd72022edb036515eada4bede1/astra_toolbox-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5d403975f682f808be55544ffbda06720e703b48f8bfbc9287ba13435fff9551", size = 13835925, upload-time = "2025-12-16T12:30:23.014Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/dc38dc318baf4dc749f41533676473d0041a2bac682b0b1d06cbcee63baa/astra_toolbox-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a710456f454d6ad8eb3d3efc0ef8008b55190bc70dced6d8cb32eaf2a4b5eff5", size = 13759750, upload-time = "2025-12-16T12:30:25.394Z" }, + { url = "https://files.pythonhosted.org/packages/70/d7/804d26552348af52ac2e17b4b4a1db60ca6fb90e4fc3ee4dd3d395d98e0b/astra_toolbox-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e658a9c99cf4ca655280485aff2ec76304d969111524d68f7e0d2bcd02e81422", size = 13732941, upload-time = "2025-12-16T12:30:27.603Z" }, +] + +[[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 = "autopep8" +version = "2.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycodestyle" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/d8/30873d2b7b57dee9263e53d142da044c4600a46f2d28374b3e38b023df16/autopep8-2.3.2.tar.gz", hash = "sha256:89440a4f969197b69a995e4ce0661b031f455a9f776d2c5ba3dbd83466931758", size = 92210, upload-time = "2025-01-14T14:46:18.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl", hash = "sha256:ce8ad498672c845a0c3de2629c15b635ec2b05ef8177a6e7c91c74f3e9b51128", size = 45807, upload-time = "2025-01-14T14:46:15.466Z" }, +] + +[[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 = "beautifulsoup4" +version = "4.14.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "cachetools" +version = "6.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/39/91/d9ae9a66b01102a18cd16db0cf4cd54187ffe10f0865cc80071a4104fbb3/cachetools-6.2.6.tar.gz", hash = "sha256:16c33e1f276b9a9c0b49ab5782d901e3ad3de0dd6da9bf9bcd29ac5672f2f9e6", size = 32363, upload-time = "2026-01-27T20:32:59.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/45/f458fa2c388e79dd9d8b9b0c99f1d31b568f27388f2fdba7bb66bbc0c6ed/cachetools-6.2.6-py3-none-any.whl", hash = "sha256:8c9717235b3c651603fff0076db52d6acbfd1b338b8ed50256092f7ce9c85bda", size = 11668, upload-time = "2026-01-27T20:32:58.527Z" }, +] + +[[package]] +name = "certifi" +version = "2026.4.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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 = "cgen" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytools" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/4b/a84a2fd2abce1c7bdef848ef7e7763f9447040e01514f741f8c7dfae1bab/cgen-2025.1.tar.gz", hash = "sha256:79f01e010d49c13e58b4ca8f2d4996a6b7178968f5f2d906262733480ae7a2d4", size = 19236, upload-time = "2025-06-17T03:03:17.662Z" } + +[[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 = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "codepy" +version = "2023.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cgen" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "platformdirs" }, + { name = "pytools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f0/75/6e16a64cb03581c310db65da9dadb2e3e1882251817babf69caf7e98a10a/codepy-2023.1.tar.gz", hash = "sha256:bce2e136e9fb3cf59949427d4ef419648778401e6db288596e75b53e144f8b93", size = 21344, upload-time = "2023-05-21T22:57:43.433Z" } + +[[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 = "cons" +version = "0.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "logical-unification" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/20/0eca1dcdbac64a570e60df66119847f94cdd513178d9c222c15101ca1022/cons-0.4.7.tar.gz", hash = "sha256:0a96cd2abd6a9f494816c1272cf5583a960041750c2d7a48eeeccd47ce369dfd", size = 8690, upload-time = "2025-07-11T18:01:31.534Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/9f/bffa3362895e5437d9d12e3bbd242f86d91af1d7cd26f6e14ebb6376581b/cons-0.4.7-py3-none-any.whl", hash = "sha256:e38ee12cf703559ea744c94f725bee0e2329f32daf0249b49db1b0437cc6cb94", size = 8603, upload-time = "2025-07-11T18:01:28.706Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967, upload-time = "2026-03-17T10:33:18.341Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255, upload-time = "2026-03-17T10:29:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772, upload-time = "2026-03-17T10:29:52.867Z" }, + { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532, upload-time = "2026-03-17T10:29:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333, upload-time = "2026-03-17T10:29:56.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211, upload-time = "2026-03-17T10:29:57.938Z" }, + { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125, upload-time = "2026-03-17T10:29:59.388Z" }, + { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219, upload-time = "2026-03-17T10:30:01.199Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248, upload-time = "2026-03-17T10:30:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254, upload-time = "2026-03-17T10:30:04.832Z" }, + { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067, upload-time = "2026-03-17T10:30:06.535Z" }, + { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521, upload-time = "2026-03-17T10:30:08.486Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126, upload-time = "2026-03-17T10:30:09.966Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860, upload-time = "2026-03-17T10:30:11.393Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788, upload-time = "2026-03-17T10:30:12.886Z" }, + { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381, upload-time = "2026-03-17T10:30:14.68Z" }, + { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880, upload-time = "2026-03-17T10:30:16.231Z" }, + { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303, upload-time = "2026-03-17T10:30:17.748Z" }, + { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218, upload-time = "2026-03-17T10:30:19.804Z" }, + { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326, upload-time = "2026-03-17T10:30:21.321Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267, upload-time = "2026-03-17T10:30:23.094Z" }, + { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430, upload-time = "2026-03-17T10:30:25.311Z" }, + { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017, upload-time = "2026-03-17T10:30:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080, upload-time = "2026-03-17T10:30:29.481Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843, upload-time = "2026-03-17T10:30:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802, upload-time = "2026-03-17T10:30:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707, upload-time = "2026-03-17T10:30:35.2Z" }, + { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880, upload-time = "2026-03-17T10:30:36.775Z" }, + { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816, upload-time = "2026-03-17T10:30:38.891Z" }, + { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483, upload-time = "2026-03-17T10:30:40.463Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554, upload-time = "2026-03-17T10:30:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908, upload-time = "2026-03-17T10:30:43.906Z" }, + { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419, upload-time = "2026-03-17T10:30:45.545Z" }, + { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159, upload-time = "2026-03-17T10:30:47.204Z" }, + { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270, upload-time = "2026-03-17T10:30:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538, upload-time = "2026-03-17T10:30:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821, upload-time = "2026-03-17T10:30:52.5Z" }, + { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191, upload-time = "2026-03-17T10:30:54.543Z" }, + { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337, upload-time = "2026-03-17T10:30:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404, upload-time = "2026-03-17T10:30:58.427Z" }, + { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903, upload-time = "2026-03-17T10:31:00.093Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780, upload-time = "2026-03-17T10:31:01.916Z" }, + { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093, upload-time = "2026-03-17T10:31:03.642Z" }, + { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900, upload-time = "2026-03-17T10:31:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515, upload-time = "2026-03-17T10:31:07.293Z" }, + { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576, upload-time = "2026-03-17T10:31:09.045Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942, upload-time = "2026-03-17T10:31:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935, upload-time = "2026-03-17T10:31:12.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541, upload-time = "2026-03-17T10:31:14.247Z" }, + { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780, upload-time = "2026-03-17T10:31:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912, upload-time = "2026-03-17T10:31:17.89Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165, upload-time = "2026-03-17T10:31:19.605Z" }, + { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908, upload-time = "2026-03-17T10:31:21.312Z" }, + { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873, upload-time = "2026-03-17T10:31:23.565Z" }, + { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030, upload-time = "2026-03-17T10:31:25.58Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694, upload-time = "2026-03-17T10:31:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469, upload-time = "2026-03-17T10:31:29.472Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112, upload-time = "2026-03-17T10:31:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923, upload-time = "2026-03-17T10:31:33.633Z" }, + { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540, upload-time = "2026-03-17T10:31:35.445Z" }, + { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262, upload-time = "2026-03-17T10:31:37.184Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617, upload-time = "2026-03-17T10:31:39.245Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912, upload-time = "2026-03-17T10:31:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987, upload-time = "2026-03-17T10:31:43.724Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416, upload-time = "2026-03-17T10:31:45.769Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558, upload-time = "2026-03-17T10:31:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163, upload-time = "2026-03-17T10:31:50.125Z" }, + { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981, upload-time = "2026-03-17T10:31:51.961Z" }, + { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604, upload-time = "2026-03-17T10:31:53.872Z" }, + { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321, upload-time = "2026-03-17T10:31:55.997Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502, upload-time = "2026-03-17T10:31:58.308Z" }, + { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688, upload-time = "2026-03-17T10:32:00.141Z" }, + { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788, upload-time = "2026-03-17T10:32:02.246Z" }, + { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851, upload-time = "2026-03-17T10:32:04.416Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104, upload-time = "2026-03-17T10:32:06.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621, upload-time = "2026-03-17T10:32:08.589Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953, upload-time = "2026-03-17T10:32:10.507Z" }, + { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992, upload-time = "2026-03-17T10:32:12.41Z" }, + { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503, upload-time = "2026-03-17T10:32:14.449Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852, upload-time = "2026-03-17T10:32:16.56Z" }, + { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161, upload-time = "2026-03-17T10:32:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021, upload-time = "2026-03-17T10:32:21.344Z" }, + { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858, upload-time = "2026-03-17T10:32:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823, upload-time = "2026-03-17T10:32:25.516Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099, upload-time = "2026-03-17T10:32:27.944Z" }, + { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638, upload-time = "2026-03-17T10:32:29.914Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295, upload-time = "2026-03-17T10:32:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360, upload-time = "2026-03-17T10:32:34.233Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174, upload-time = "2026-03-17T10:32:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739, upload-time = "2026-03-17T10:32:38.736Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351, upload-time = "2026-03-17T10:32:41.196Z" }, + { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612, upload-time = "2026-03-17T10:32:43.204Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985, upload-time = "2026-03-17T10:32:45.514Z" }, + { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107, upload-time = "2026-03-17T10:32:47.971Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513, upload-time = "2026-03-17T10:32:50.1Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650, upload-time = "2026-03-17T10:32:52.391Z" }, + { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089, upload-time = "2026-03-17T10:32:54.544Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982, upload-time = "2026-03-17T10:32:56.803Z" }, + { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579, upload-time = "2026-03-17T10:32:59.466Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316, upload-time = "2026-03-17T10:33:01.847Z" }, + { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427, upload-time = "2026-03-17T10:33:03.945Z" }, + { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745, upload-time = "2026-03-17T10:33:06.285Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146, upload-time = "2026-03-17T10:33:08.756Z" }, + { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254, upload-time = "2026-03-17T10:33:11.174Z" }, + { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276, upload-time = "2026-03-17T10:33:13.466Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346, upload-time = "2026-03-17T10:33:15.691Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "12.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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" }, +] +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.2.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/fe/7351d7e586a8b4c9f89731bfe4cf0148223e8f9903ff09571f78b3fb0682/cuda_bindings-13.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b395f79cb89ce0cd8effff07c4a1e20101b873c256a1aeb286e8fd7bd0f556", size = 5744254, upload-time = "2026-03-11T00:12:29.798Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ef/184aa775e970fc089942cd9ec6302e6e44679d4c14549c6a7ea45bf7f798/cuda_bindings-13.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6f3682ec3c4769326aafc67c2ba669d97d688d0b7e63e659d36d2f8b72f32d6", size = 6329075, upload-time = "2026-03-11T00:12:32.319Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ea/81999d01375645f34596c76eb046b4b36d58cc6fe2bddb2410f8a7b7a827/cuda_bindings-13.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:845025438a1b9e20718b9fb42add3e0eb72e85458bcab3eeb80bfd8f0a9dab33", size = 5600047, upload-time = "2026-03-11T00:12:34.848Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a9/3a8241c6e19483ac1f1dcf5c10238205dcb8a6e9d0d4d4709240dff28ff4/cuda_bindings-13.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:721104c603f059780d287969be3d194a18d0cc3b713ed9049065a1107706759d", size = 5730273, upload-time = "2026-03-11T00:12:37.18Z" }, + { url = "https://files.pythonhosted.org/packages/e9/94/2748597f47bb1600cd466b20cab4159f1530a3a33fe7f70fee199b3abb9e/cuda_bindings-13.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1eba9504ac70667dd48313395fe05157518fd6371b532790e96fbb31bbb5a5e1", size = 6313924, upload-time = "2026-03-11T00:12:39.462Z" }, + { url = "https://files.pythonhosted.org/packages/29/5a/0ce1731c48bcd9f40996a4ef1abbf634f1a7fe4a15c5050b1e75ce3a7acf/cuda_bindings-13.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:debb51b211d246f8326f6b6e982506a5d0d9906672c91bc478b66addc7ecc60a", size = 5631363, upload-time = "2026-03-11T00:12:41.58Z" }, + { url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" }, + { url = "https://files.pythonhosted.org/packages/1f/92/f899f7bbb5617bb65ec52a6eac1e9a1447a86b916c4194f8a5001b8cde0c/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46d8776a55d6d5da9dd6e9858fba2efcda2abe6743871dee47dd06eb8cb6d955", size = 6320619, upload-time = "2026-03-11T00:12:45.939Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a5/d7f01a415e134546248cef612adad8153c9f1eb10ec79505a7cd8294370b/cuda_bindings-13.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:45815daeb595bf3b405c52671a2542b1f8e9329f3b029494acbfcc74aeaa1f2d", size = 5840830, upload-time = "2026-03-11T00:12:48.43Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/eef988860a3ca985f82c4f3174fc0cdd94e07331ba9a92e8e064c260337f/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6629ca2df6f795b784752409bcaedbd22a7a651b74b56a165ebc0c9dcbd504d0", size = 5614610, upload-time = "2026-03-11T00:12:50.337Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/6db3aba46864aee357ab2415135b3fe3da7e9f1fa0221fa2a86a5968099c/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7dca0da053d3b4cc4869eff49c61c03f3c5dbaa0bcd712317a358d5b8f3f385d", size = 6149914, upload-time = "2026-03-11T00:12:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/c4/84/d3b6220b51cbc02ca14db7387e97445126b4ff5125aaa6c5dd7dcb75e679/cuda_bindings-13.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8cebe3ce4aeeca5af9c490e175f76c4b569bbf4a35a62294b777bc77bf7ac4d8", size = 5796512, upload-time = "2026-03-11T00:12:54.483Z" }, + { url = "https://files.pythonhosted.org/packages/c0/87/87a014f045b77c6de5c8527b0757fe644417b184e5367db977236a141602/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6464b30f46692d6c7f65d4a0e0450d81dd29de3afc1bb515653973d01c2cd6e", size = 5685673, upload-time = "2026-03-11T00:12:56.371Z" }, + { url = "https://files.pythonhosted.org/packages/ee/5e/c0fe77a73aaefd3fff25ffaccaac69c5a63eafdf8b9a4c476626ef0ac703/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4af9f3e1be603fa12d5ad6cfca7844c9d230befa9792b5abdf7dd79979c3626", size = 6191386, upload-time = "2026-03-11T00:12:58.965Z" }, + { url = "https://files.pythonhosted.org/packages/e3/73/98bcb069778fe420226db75aff54b5dd6c3ecfd0912edabab723326e80b7/cuda_bindings-13.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd658bb5c0e55b7b3e5dd0ed509c6addb298c665db26a9bfba35e1e626000ba2", size = 5938605, upload-time = "2026-03-11T00:13:01.639Z" }, + { url = "https://files.pythonhosted.org/packages/5f/58/ed2c3b39c8dd5f96aa7a4abef0d47a73932c7a988e30f5fa428f00ed0da1/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df850a1ff8ce1b3385257b08e47b70e959932f5f432d0a4e46a355962b4e4771", size = 5507469, upload-time = "2026-03-11T00:13:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/0c941b112ceeb21439b05895eace78ca1aa2eaaf695c8521a068fd9b4c00/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8a16384c6494e5485f39314b0b4afb04bee48d49edb16d5d8593fd35bbd231b", size = 6059693, upload-time = "2026-03-11T00:13:06.003Z" }, + { url = "https://files.pythonhosted.org/packages/52/49/4e01cc06447d39476e138d1b1adec8d35c0d04eccd2c8d69befc08cd66e8/cuda_bindings-13.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6ccf14e0c1def3b7200100aafff3a9f7e210ecb6e409329e92dcf6cd2c00d5c7", size = 6662637, upload-time = "2026-03-11T00:13:07.881Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/d6/ac63065d33dd700fee7ebd7d287332401b54e31b9346e142f871e1f0b116/cuda_pathfinder-1.5.3-py3-none-any.whl", hash = "sha256:dff021123aedbb4117cc7ec81717bbfe198fb4e8b5f1ee57e0e084fec5c8577d", size = 49991, upload-time = "2026-04-14T20:09:27.037Z" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +curand = [ + { name = "nvidia-curand", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "sys_platform == 'linux' or sys_platform == 'win32' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "cupy-cuda12x" +version = "14.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12') or (python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12') or (python_full_version >= '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/8f/43961a56021be9e211d359524582b10d3e618d1e821942fc19530addd0a8/cupy_cuda12x-14.0.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:b42da54c9da0d5a7748e4120f13c47594d3e1fc2741b712591aa915517741096", size = 144959483, upload-time = "2026-02-20T10:22:13.493Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9c/21360d0db48912d06724c4f4c37fb60aa1146048aa35b79fd610adc71e23/cupy_cuda12x-14.0.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:7c775e1e1ebc0c4c9f94a4c6bb66a0c07d109de5dfcef671f9e4056df4bd81ca", size = 133738643, upload-time = "2026-02-20T10:22:18.684Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4c/e66e5ea7b6363b4b17f2cdb58859be8058af8cd65aef17861442a737548f/cupy_cuda12x-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:41bec7346b017cde81a32cd2c10391ec4ad7b5f1c4d34e53de646d5cda3c47fb", size = 96362151, upload-time = "2026-02-20T10:22:23.563Z" }, + { url = "https://files.pythonhosted.org/packages/d9/11/6d089629f44591864bc8a11fa64c9d4fcd1afb4a7217954c806fb47c4fe5/cupy_cuda12x-14.0.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:31e6a33579a06fde3ff238b8b6b72446384d17554b2a3b14f818c9ee44b0c2e6", size = 146237981, upload-time = "2026-02-20T10:22:29.065Z" }, + { url = "https://files.pythonhosted.org/packages/37/f0/0f1d79c0c7fccbc2ed0c0ff3be1b0562be60b764c729ca8ded1bd6d953aa/cupy_cuda12x-14.0.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:bfbde2e9f7946021b49414f9c800991163f2a56a1318f3d7d69cbb06001a1585", size = 135080693, upload-time = "2026-02-20T10:22:35.843Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1b/b3a26fd36e066e9bc25d875488468c9a40e8c7a90acadfacc524a17da457/cupy_cuda12x-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:c289e78876c6840b3c512868b8c5d43ac76bc3c581eab1a75c4f2f4a88d5b430", size = 96361678, upload-time = "2026-02-20T10:22:41.718Z" }, + { url = "https://files.pythonhosted.org/packages/38/ca/b93ef9fca1471a65f136a73e10819634c0b83427362fc08fc9f29f935bf0/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f244bc14fad6f1ef0c74abd98afa4b82d2534aecdba911197810ec0047f0d1f3", size = 145578614, upload-time = "2026-02-20T10:22:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a6/944406223a190815d9df156a1d66f3b0352bd8827dc4a8c752196d616dbc/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:9f0c81c3509f77be3ae8444759d5b314201b2dfcbbf2ae0d0b5fb7a61f20893c", size = 134613763, upload-time = "2026-02-20T10:22:56.792Z" }, + { url = "https://files.pythonhosted.org/packages/11/fd/62e6e3f3c0c9f785b2dbdc2bff01bc375f5c6669d52e5e151f7aeb577801/cupy_cuda12x-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:63dc8a3a88d2ffd0386796b915d27acc7f2332c2291efd1ff4f0021b96f02051", size = 96267167, upload-time = "2026-02-20T10:23:02.263Z" }, + { url = "https://files.pythonhosted.org/packages/99/67/f967c5aff77bd6ae6765faf20580db80bb8a7e2574e999166de1d4e50146/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:9d9b1bdcf9fa777593017867e8733192c071b94639a1b3e8b2ee99eb3f3ea760", size = 145128055, upload-time = "2026-02-20T10:23:08.765Z" }, + { url = "https://files.pythonhosted.org/packages/80/53/037c931731151c504cfc00069eb295c903927c92145115623f13bd2ea076/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:21fcb4e917e43237edcc5e3a1a1241e2a2946ba9e577ce36fd580bd9856f91e8", size = 134227269, upload-time = "2026-02-20T10:23:16.147Z" }, + { url = "https://files.pythonhosted.org/packages/a3/70/ce8344426effda22152bf30cfb8f9b6477645d0f41df784674369af8f422/cupy_cuda12x-14.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:b7399e7fe4e2be3b5c3974fc892a661e10082836a4c78d0152b39cb483608a89", size = 96250134, upload-time = "2026-02-20T10:23:22.631Z" }, + { url = "https://files.pythonhosted.org/packages/5d/cb/ba61bcd602856aeabf362280cb3c17ed5fe03ae23e84578eb99f5245546c/cupy_cuda12x-14.0.1-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:3be87da86d808d9fec23b0a1df001f15f8f145698bc4bebc6d6938fa7e11519f", size = 144976386, upload-time = "2026-02-20T10:23:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/ba/73/34e5f334f6b1e5c5dff80af8109979fb0e8461b27e4454517e0e47486455/cupy_cuda12x-14.0.1-cp314-cp314-manylinux2014_x86_64.whl", hash = "sha256:fa356384760e01498d010af2d96de536ef3dad19db1d3a1ad0764e4323fb919f", size = 133521354, upload-time = "2026-02-20T10:23:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/e5/a3/80ff83dcad1ac61741714d97fce5a3ef42c201bb40005ec5cc413e34d75f/cupy_cuda12x-14.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:cafe62131caef63b5e90b71b617bb4bf47d7bd9e11cccabea8104db1e01db02e", size = 96822848, upload-time = "2026-02-20T10:23:42.684Z" }, +] + +[[package]] +name = "cupy-cuda13x" +version = "14.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu13') or (python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu13') or (python_full_version >= '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/9d/5f271070c17aac8e30b140b5ec9c129983f57b49899a8fc34c3f114d09f7/cupy_cuda13x-14.0.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:4d6d5ae87eb1a6eb55f5a3d54c606f5263c54319c3d85afe4627cb7fff403050", size = 72993295, upload-time = "2026-02-20T10:23:48.346Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/bd6867acfa356c822971d90792e814fce1fcfc54baaa20b1cadb8eec5c52/cupy_cuda13x-14.0.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:3d292c204eb7a2cfe04698b26de44b4173a1c576f603d6da9f0b0b6444225a63", size = 68923997, upload-time = "2026-02-20T10:23:53.046Z" }, + { url = "https://files.pythonhosted.org/packages/c5/62/25a256acdc0127c70153799a3b094adbeee11630e3be118f8a840415cafc/cupy_cuda13x-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:a3e34e0b29e09a4f80c9c1fef963cd75540fb003cbbb6183ac3f784a8a02aef3", size = 35450515, upload-time = "2026-02-20T10:23:56.602Z" }, + { url = "https://files.pythonhosted.org/packages/37/a2/84f2a9739e914cb119807b8b91d48b2c7628794e4eee66daa3402a2d7442/cupy_cuda13x-14.0.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:5c368d7b9fa9eef8a5d209d6335f468f84893cf875defdd1d195b6b27da941c9", size = 74276076, upload-time = "2026-02-20T10:24:00.841Z" }, + { url = "https://files.pythonhosted.org/packages/5b/fe/064f73bab30460eb9024e1a52319b8b69ef0c1cd853301189d1b4579e686/cupy_cuda13x-14.0.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:97fe8f0ff683ed5f39b82d0e56ad90368fc001c1b191a3bc662d31a0ac8cb482", size = 70267352, upload-time = "2026-02-20T10:24:05.105Z" }, + { url = "https://files.pythonhosted.org/packages/df/3c/a0de0513ad575f3a9f9543efd9ae408303101205c206d9cfe5a37b59bddc/cupy_cuda13x-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9dda18b7100a19a54536b4325e63a29c1fb58891a0973623c6c8c80642b3f933", size = 35450158, upload-time = "2026-02-20T10:24:09.205Z" }, + { url = "https://files.pythonhosted.org/packages/7d/9b/7983b4e24749937dd4ab34565561a8c015e88df4ff9fd4678337b710b3ee/cupy_cuda13x-14.0.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:763f33f5641a28db5ac91788301271930e910813f1b1279119b504babeb1b863", size = 73616635, upload-time = "2026-02-20T10:24:14.115Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d4/42f79f6baea881c604982df18d158456e40071925bfdd53c1b6eb82f6e75/cupy_cuda13x-14.0.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:a06cdc0d6a0054663fca4770e32df6a39cbeb7396a08b23f97965e5e1c0edb7d", size = 69793920, upload-time = "2026-02-20T10:24:20.287Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/83c6be011fa00a270c0d08985844fd992d59c34a6bb91755dad4f31942e8/cupy_cuda13x-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:e91052340bab0860bdf1fd4e5a4fc85846800df6cc9a1de02a5afa1dd8655550", size = 35353554, upload-time = "2026-02-20T10:24:24.337Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/679a7a571dcd1b654378cc4f9c5cd6f6d4af09ec8973eb4b2dce276adce4/cupy_cuda13x-14.0.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:a8488a6a9c934c417f98078ac7dd2a47059c39195199b7e557c84d01b3071c75", size = 73167833, upload-time = "2026-02-20T10:24:30.645Z" }, + { url = "https://files.pythonhosted.org/packages/e4/05/f60525718e83c0ea10efc4ae3183ea9c5309935b76c200b6d9c2569185de/cupy_cuda13x-14.0.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:1c206483aaea40cd38bfbd1a29f4df0c19d555d306ffe43ef16f39db0e7e7a7f", size = 69416450, upload-time = "2026-02-20T10:24:35.982Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/8b4b996690d91745e34ce6103fbf8a9fb51f2e46b4e47c45ea8b3fff9d2b/cupy_cuda13x-14.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:cd01307b4f67e3bf242537f02ac8e5db729a557510728f70ee41a32490ce1e1a", size = 35336403, upload-time = "2026-02-20T10:24:40.355Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f9/e5480aefcc86cfa45abe12c323e8e65b8a04727c227f67dff1cae99ead1b/cupy_cuda13x-14.0.1-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:70a5b3d4b20367abf978e2c75bd0235f0768b5901a6102398877aef044628151", size = 73012147, upload-time = "2026-02-20T10:24:45.12Z" }, + { url = "https://files.pythonhosted.org/packages/61/9e/cd8ddc220283272a7891a8277fb911a584a9224bd1c8f56d75ca6f62d976/cupy_cuda13x-14.0.1-cp314-cp314-manylinux2014_x86_64.whl", hash = "sha256:2e6fbfb24bc336ba91507e9e6488589665a4c7366453bb80c717d874fce3c373", size = 68714185, upload-time = "2026-02-20T10:24:49.984Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f5/273193563cdc37cdb22de3b73e7db12819b39fafb73de6bcf7d48f20945e/cupy_cuda13x-14.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:22b50139e05c4612fac905dd6c3390f8687e0e390f0e200d5be14be1726e3d04", size = 35474838, upload-time = "2026-02-20T10:24:54.198Z" }, +] + +[[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 = "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 = "devito" +version = "4.8.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anytree" }, + { name = "cgen" }, + { name = "codepy" }, + { name = "multidict" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging" }, + { name = "pip" }, + { name = "psutil" }, + { name = "py-cpuinfo" }, + { name = "sympy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/7a/8bb072c37f23cbeeeae1b5f27c06c237fd1df7f0a2acd84561fc70e41d7f/devito-4.8.21.tar.gz", hash = "sha256:77c81651c6e314419ae2d67a6bb7a30c6646cbab416b827651fb4a44fcde1a66", size = 36015818, upload-time = "2026-02-23T16:10:37.296Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/8e/28ab88d3192a87feed86cb7b2cd132a5eee4b7c78dbf033a0f9ffb28407e/devito-4.8.21-py3-none-any.whl", hash = "sha256:c43781a3e0e051c66f992036e9b1df52867f2fadec6593d628f35d9863899d24", size = 35867484, upload-time = "2026-02-23T16:10:34.345Z" }, +] + +[[package]] +name = "distlib" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, +] + +[[package]] +name = "django" +version = "5.2.13" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "asgiref", marker = "python_full_version < '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sqlparse", marker = "python_full_version < '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "tzdata", marker = "(python_full_version < '3.12' and sys_platform == 'win32') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.12' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/c5/c69e338eb2959f641045802e5ea87ca4bf5ac90c5fd08953ca10742fad51/django-5.2.13.tar.gz", hash = "sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4", size = 10890368, upload-time = "2026-04-07T14:02:15.072Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/b1/51ab36b2eefcf8cdb9338c7188668a157e29e30306bfc98a379704c9e10d/django-5.2.13-py3-none-any.whl", hash = "sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a", size = 8310982, upload-time = "2026-04-07T14:02:08.883Z" }, +] + +[[package]] +name = "django" +version = "6.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "asgiref", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sqlparse", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "tzdata", marker = "(python_full_version >= '3.12' and sys_platform == 'win32') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/b9/4155091ad1788b38563bd77a7258c0834e8c12a7f56f6975deaf54f8b61d/django-6.0.4.tar.gz", hash = "sha256:8cfa2572b3f2768b2e84983cf3c4811877a01edb64e817986ec5d60751c113ac", size = 10907407, upload-time = "2026-04-07T13:55:44.961Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/47/3d61d611609764aa71a37f7037b870e7bfb22937366974c4fd46cada7bab/django-6.0.4-py3-none-any.whl", hash = "sha256:14359c809fc16e8f81fd2b59d7d348e4d2d799da6840b10522b6edf7b8afc1da", size = 8368342, upload-time = "2026-04-07T13:55:37.999Z" }, +] + +[[package]] +name = "docutils" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, +] + +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + +[[package]] +name = "dtcwt" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/09/cf86b2de232a6605366b9718e443b7a1097f70a8f1f72253de57ee068554/dtcwt-0.13.0.tar.gz", hash = "sha256:c6a76045dd58932c9b19510222c58e51275799a9cd5402be2b43370e8dcda457", size = 87414, upload-time = "2024-02-20T10:09:10.773Z" } + +[[package]] +name = "etuples" +version = "0.3.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cons" }, + { name = "multipledispatch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/c0/ba049efa7d216221713cffc303641bd73bbb309ff0e4e2a623f32af2a4ea/etuples-0.3.10.tar.gz", hash = "sha256:26fde81d7e822837146231bfce4d6ba67eab5d7ed55bc58ba7437c2568051167", size = 21493, upload-time = "2025-07-14T18:49:35.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/19/bf11636df040a9f9c3fd6959aedea5b5cfddd751272732278fb04ee0a78c/etuples-0.3.10-py3-none-any.whl", hash = "sha256:4408c7940ef06af52dbbea0954a8a1817ed5750ce905ff48091ac3cd3aeb720b", size = 12201, upload-time = "2025-07-14T18:49:34.557Z" }, +] + +[[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-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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 = "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.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" }, +] + +[[package]] +name = "fonttools" +version = "4.62.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/08/7012b00a9a5874311b639c3920270c36ee0c445b69d9989a85e5c92ebcb0/fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d", size = 3580737, upload-time = "2026-03-13T13:54:25.52Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/ff/532ed43808b469c807e8cb6b21358da3fe6fd51486b3a8c93db0bb5d957f/fonttools-4.62.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c", size = 2873740, upload-time = "2026-03-13T13:52:11.822Z" }, + { url = "https://files.pythonhosted.org/packages/85/e4/2318d2b430562da7227010fb2bb029d2fa54d7b46443ae8942bab224e2a0/fonttools-4.62.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a", size = 2417649, upload-time = "2026-03-13T13:52:14.605Z" }, + { url = "https://files.pythonhosted.org/packages/4c/28/40f15523b5188598018e7956899fed94eb7debec89e2dd70cb4a8df90492/fonttools-4.62.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3", size = 4935213, upload-time = "2026-03-13T13:52:17.399Z" }, + { url = "https://files.pythonhosted.org/packages/42/09/7dbe3d7023f57d9b580cfa832109d521988112fd59dddfda3fddda8218f9/fonttools-4.62.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23", size = 4892374, upload-time = "2026-03-13T13:52:20.175Z" }, + { url = "https://files.pythonhosted.org/packages/d1/2d/84509a2e32cb925371560ef5431365d8da2183c11d98e5b4b8b4e42426a5/fonttools-4.62.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d", size = 4911856, upload-time = "2026-03-13T13:52:22.777Z" }, + { url = "https://files.pythonhosted.org/packages/a5/80/df28131379eed93d9e6e6fccd3bf6e3d077bebbfe98cc83f21bbcd83ed02/fonttools-4.62.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae", size = 5031712, upload-time = "2026-03-13T13:52:25.14Z" }, + { url = "https://files.pythonhosted.org/packages/3d/03/3c8f09aad64230cd6d921ae7a19f9603c36f70930b00459f112706f6769a/fonttools-4.62.1-cp310-cp310-win32.whl", hash = "sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed", size = 1507878, upload-time = "2026-03-13T13:52:28.149Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ec/f53f626f8f3e89f4cadd8fc08f3452c8fd182c951ad5caa35efac22b29ab/fonttools-4.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9", size = 1556766, upload-time = "2026-03-13T13:52:30.814Z" }, + { url = "https://files.pythonhosted.org/packages/88/39/23ff32561ec8d45a4d48578b4d241369d9270dc50926c017570e60893701/fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7", size = 2871039, upload-time = "2026-03-13T13:52:33.127Z" }, + { url = "https://files.pythonhosted.org/packages/24/7f/66d3f8a9338a9b67fe6e1739f47e1cd5cee78bd3bc1206ef9b0b982289a5/fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14", size = 2416346, upload-time = "2026-03-13T13:52:35.676Z" }, + { url = "https://files.pythonhosted.org/packages/aa/53/5276ceba7bff95da7793a07c5284e1da901cf00341ce5e2f3273056c0cca/fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7", size = 5100897, upload-time = "2026-03-13T13:52:38.102Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a1/40a5c4d8e28b0851d53a8eeeb46fbd73c325a2a9a165f290a5ed90e6c597/fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b", size = 5071078, upload-time = "2026-03-13T13:52:41.305Z" }, + { url = "https://files.pythonhosted.org/packages/e3/be/d378fca4c65ea1956fee6d90ace6e861776809cbbc5af22388a090c3c092/fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1", size = 5076908, upload-time = "2026-03-13T13:52:44.122Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d9/ae6a1d0693a4185a84605679c8a1f719a55df87b9c6e8e817bfdd9ef5936/fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416", size = 5202275, upload-time = "2026-03-13T13:52:46.591Z" }, + { url = "https://files.pythonhosted.org/packages/54/6c/af95d9c4efb15cabff22642b608342f2bd67137eea6107202d91b5b03184/fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53", size = 2293075, upload-time = "2026-03-13T13:52:48.711Z" }, + { url = "https://files.pythonhosted.org/packages/d3/97/bf54c5b3f2be34e1f143e6db838dfdc54f2ffa3e68c738934c82f3b2a08d/fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2", size = 2344593, upload-time = "2026-03-13T13:52:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/47/d4/dbacced3953544b9a93088cc10ef2b596d348c983d5c67a404fa41ec51ba/fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974", size = 2870219, upload-time = "2026-03-13T13:52:53.664Z" }, + { url = "https://files.pythonhosted.org/packages/66/9e/a769c8e99b81e5a87ab7e5e7236684de4e96246aae17274e5347d11ebd78/fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9", size = 2414891, upload-time = "2026-03-13T13:52:56.493Z" }, + { url = "https://files.pythonhosted.org/packages/69/64/f19a9e3911968c37e1e620e14dfc5778299e1474f72f4e57c5ec771d9489/fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936", size = 5033197, upload-time = "2026-03-13T13:52:59.179Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8a/99c8b3c3888c5c474c08dbfd7c8899786de9604b727fcefb055b42c84bba/fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392", size = 4988768, upload-time = "2026-03-13T13:53:02.761Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c6/0f904540d3e6ab463c1243a0d803504826a11604c72dd58c2949796a1762/fonttools-4.62.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04", size = 4971512, upload-time = "2026-03-13T13:53:05.678Z" }, + { url = "https://files.pythonhosted.org/packages/29/0b/5cbef6588dc9bd6b5c9ad6a4d5a8ca384d0cea089da31711bbeb4f9654a6/fonttools-4.62.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d", size = 5122723, upload-time = "2026-03-13T13:53:08.662Z" }, + { url = "https://files.pythonhosted.org/packages/4a/47/b3a5342d381595ef439adec67848bed561ab7fdb1019fa522e82101b7d9c/fonttools-4.62.1-cp312-cp312-win32.whl", hash = "sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c", size = 2281278, upload-time = "2026-03-13T13:53:10.998Z" }, + { url = "https://files.pythonhosted.org/packages/28/b1/0c2ab56a16f409c6c8a68816e6af707827ad5d629634691ff60a52879792/fonttools-4.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42", size = 2331414, upload-time = "2026-03-13T13:53:13.992Z" }, + { url = "https://files.pythonhosted.org/packages/3b/56/6f389de21c49555553d6a5aeed5ac9767631497ac836c4f076273d15bd72/fonttools-4.62.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79", size = 2865155, upload-time = "2026-03-13T13:53:16.132Z" }, + { url = "https://files.pythonhosted.org/packages/03/c5/0e3966edd5ec668d41dfe418787726752bc07e2f5fd8c8f208615e61fa89/fonttools-4.62.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe", size = 2412802, upload-time = "2026-03-13T13:53:18.878Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/e6ac4b44026de7786fe46e3bfa0c87e51d5d70a841054065d49cd62bb909/fonttools-4.62.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68", size = 5013926, upload-time = "2026-03-13T13:53:21.379Z" }, + { url = "https://files.pythonhosted.org/packages/e2/98/8b1e801939839d405f1f122e7d175cebe9aeb4e114f95bfc45e3152af9a7/fonttools-4.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1", size = 4964575, upload-time = "2026-03-13T13:53:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/46/76/7d051671e938b1881670528fec69cc4044315edd71a229c7fd712eaa5119/fonttools-4.62.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069", size = 4953693, upload-time = "2026-03-13T13:53:26.569Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ae/b41f8628ec0be3c1b934fc12b84f4576a5c646119db4d3bdd76a217c90b5/fonttools-4.62.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9", size = 5094920, upload-time = "2026-03-13T13:53:29.329Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/53a1e9469331a23dcc400970a27a4caa3d9f6edbf5baab0260285238b884/fonttools-4.62.1-cp313-cp313-win32.whl", hash = "sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24", size = 2279928, upload-time = "2026-03-13T13:53:32.352Z" }, + { url = "https://files.pythonhosted.org/packages/38/60/35186529de1db3c01f5ad625bde07c1f576305eab6d86bbda4c58445f721/fonttools-4.62.1-cp313-cp313-win_amd64.whl", hash = "sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056", size = 2330514, upload-time = "2026-03-13T13:53:34.991Z" }, + { url = "https://files.pythonhosted.org/packages/36/f0/2888cdac391807d68d90dcb16ef858ddc1b5309bfc6966195a459dd326e2/fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca", size = 2864442, upload-time = "2026-03-13T13:53:37.509Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b2/e521803081f8dc35990816b82da6360fa668a21b44da4b53fc9e77efcd62/fonttools-4.62.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca", size = 2410901, upload-time = "2026-03-13T13:53:40.55Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/8c3511ff06e53110039358dbbdc1a65d72157a054638387aa2ada300a8b8/fonttools-4.62.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782", size = 4999608, upload-time = "2026-03-13T13:53:42.798Z" }, + { url = "https://files.pythonhosted.org/packages/28/63/cd0c3b26afe60995a5295f37c246a93d454023726c3261cfbb3559969bb9/fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae", size = 4912726, upload-time = "2026-03-13T13:53:45.405Z" }, + { url = "https://files.pythonhosted.org/packages/70/b9/ac677cb07c24c685cf34f64e140617d58789d67a3dd524164b63648c6114/fonttools-4.62.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7", size = 4951422, upload-time = "2026-03-13T13:53:48.326Z" }, + { url = "https://files.pythonhosted.org/packages/e6/10/11c08419a14b85b7ca9a9faca321accccc8842dd9e0b1c8a72908de05945/fonttools-4.62.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a", size = 5060979, upload-time = "2026-03-13T13:53:51.366Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3c/12eea4a4cf054e7ab058ed5ceada43b46809fce2bf319017c4d63ae55bb4/fonttools-4.62.1-cp314-cp314-win32.whl", hash = "sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800", size = 2283733, upload-time = "2026-03-13T13:53:53.606Z" }, + { url = "https://files.pythonhosted.org/packages/6b/67/74b070029043186b5dd13462c958cb7c7f811be0d2e634309d9a1ffb1505/fonttools-4.62.1-cp314-cp314-win_amd64.whl", hash = "sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e", size = 2335663, upload-time = "2026-03-13T13:53:56.23Z" }, + { url = "https://files.pythonhosted.org/packages/42/c5/4d2ed3ca6e33617fc5624467da353337f06e7f637707478903c785bd8e20/fonttools-4.62.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82", size = 2947288, upload-time = "2026-03-13T13:53:59.397Z" }, + { url = "https://files.pythonhosted.org/packages/1f/e9/7ab11ddfda48ed0f89b13380e5595ba572619c27077be0b2c447a63ff351/fonttools-4.62.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260", size = 2449023, upload-time = "2026-03-13T13:54:01.642Z" }, + { url = "https://files.pythonhosted.org/packages/b2/10/a800fa090b5e8819942e54e19b55fc7c21fe14a08757c3aa3ca8db358939/fonttools-4.62.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4", size = 5137599, upload-time = "2026-03-13T13:54:04.495Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/8ccd45033fffd74deb6912fa1ca524643f584b94c87a16036855b498a1ed/fonttools-4.62.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b", size = 4920933, upload-time = "2026-03-13T13:54:07.557Z" }, + { url = "https://files.pythonhosted.org/packages/99/eb/e618adefb839598d25ac8136cd577925d6c513dc0d931d93b8af956210f0/fonttools-4.62.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87", size = 5016232, upload-time = "2026-03-13T13:54:10.611Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5f/9b5c9bfaa8ec82def8d8168c4f13615990d6ce5996fe52bd49bfb5e05134/fonttools-4.62.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c", size = 5042987, upload-time = "2026-03-13T13:54:13.569Z" }, + { url = "https://files.pythonhosted.org/packages/90/aa/dfbbe24c6a6afc5c203d90cc0343e24bcbb09e76d67c4d6eef8c2558d7ba/fonttools-4.62.1-cp314-cp314t-win32.whl", hash = "sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a", size = 2348021, upload-time = "2026-03-13T13:54:16.98Z" }, + { url = "https://files.pythonhosted.org/packages/13/6f/ae9c4e4dd417948407b680855c2c7790efb52add6009aaecff1e3bc50e8e/fonttools-4.62.1-cp314-cp314t-win_amd64.whl", hash = "sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e", size = 2414147, upload-time = "2026-03-13T13:54:19.416Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ba/56147c165442cc5ba7e82ecf301c9a68353cede498185869e6e02b4c264f/fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd", size = 1152647, upload-time = "2026-03-13T13:54:22.735Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/cf/b50ddf667c15276a9ab15a70ef5f257564de271957933ffea49d2cdbcdfb/fsspec-2026.3.0.tar.gz", hash = "sha256:1ee6a0e28677557f8c2f994e3eea77db6392b4de9cd1f5d7a9e87a0ae9d01b41", size = 313547, upload-time = "2026-03-27T19:11:14.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/1f/5f4a3cd9e4440e9d9bc78ad0a91a1c8d46b4d429d5239ebe6793c9fe5c41/fsspec-2026.3.0-py3-none-any.whl", hash = "sha256:d2ceafaad1b3457968ed14efa28798162f1638dbb5d2a6868a2db002a5ee39a4", size = 202595, upload-time = "2026-03-27T19:11:13.595Z" }, +] + +[[package]] +name = "h5netcdf" +version = "1.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/03/92d6cc02c0055158167255980461155d6e17f1c4143c03f8bcc18d3e3f3a/h5netcdf-1.8.1.tar.gz", hash = "sha256:9b396a4cc346050fc1a4df8523bc1853681ec3544e0449027ae397cb953c7a16", size = 78679, upload-time = "2026-01-23T07:35:31.233Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/8b/88f16936a8e8070a83d36239555227ecd91728f9ef222c5382cda07e0fd6/h5netcdf-1.8.1-py3-none-any.whl", hash = "sha256:a76ed7cfc9b8a8908ea7057c4e57e27307acff1049b7f5ed52db6c2247636879", size = 62915, upload-time = "2026-01-23T07:35:30.195Z" }, +] + +[[package]] +name = "h5py" +version = "3.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/33/acd0ce6863b6c0d7735007df01815403f5589a21ff8c2e1ee2587a38f548/h5py-3.16.0.tar.gz", hash = "sha256:a0dbaad796840ccaa67a4c144a0d0c8080073c34c76d5a6941d6818678ef2738", size = 446526, upload-time = "2026-03-06T13:49:08.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/6b/231413e58a787a89b316bb0d1777da3c62257e4797e09afd8d17ad3549dc/h5py-3.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e06f864bedb2c8e7c1358e6c73af48519e317457c444d6f3d332bb4e8fa6d7d9", size = 3724137, upload-time = "2026-03-06T13:47:35.242Z" }, + { url = "https://files.pythonhosted.org/packages/74/f9/557ce3aad0fe8471fb5279bab0fc56ea473858a022c4ce8a0b8f303d64e9/h5py-3.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec86d4fffd87a0f4cb3d5796ceb5a50123a2a6d99b43e616e5504e66a953eca3", size = 3090112, upload-time = "2026-03-06T13:47:37.634Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f5/e15b3d0dc8a18e56409a839e6468d6fb589bc5207c917399c2e0706eeb44/h5py-3.16.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:86385ea895508220b8a7e45efa428aeafaa586bd737c7af9ee04661d8d84a10d", size = 4844847, upload-time = "2026-03-06T13:47:39.811Z" }, + { url = "https://files.pythonhosted.org/packages/cb/92/a8851d936547efe30cc0ce5245feac01f3ec6171f7899bc3f775c72030b3/h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8975273c2c5921c25700193b408e28d6bdd0111c37468b2d4e25dcec4cd1d84d", size = 5065352, upload-time = "2026-03-06T13:47:41.489Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ae/f2adc5d0ca9626db3277a3d87516e124cbc5d0eea0bd79bc085702d04f2c/h5py-3.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1677ad48b703f44efc9ea0c3ab284527f81bc4f318386aaaebc5fede6bbae56f", size = 4839173, upload-time = "2026-03-06T13:47:43.586Z" }, + { url = "https://files.pythonhosted.org/packages/64/0b/e0c8c69da1d8838da023a50cd3080eae5d475691f7636b35eff20bb6ef20/h5py-3.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c4dd4cf5f0a4e36083f73172f6cfc25a5710789269547f132a20975bfe2434c", size = 5076216, upload-time = "2026-03-06T13:47:45.315Z" }, + { url = "https://files.pythonhosted.org/packages/66/35/d88fd6718832133c885004c61ceeeb24dbd6397ef877dbed6b3a64d6a286/h5py-3.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdef06507725b455fccba9c16529121a5e1fbf56aa375f7d9713d9e8ff42454d", size = 3183639, upload-time = "2026-03-06T13:47:47.041Z" }, + { url = "https://files.pythonhosted.org/packages/ba/95/a825894f3e45cbac7554c4e97314ce886b233a20033787eda755ca8fecc7/h5py-3.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:719439d14b83f74eeb080e9650a6c7aa6d0d9ea0ca7f804347b05fac6fbf18af", size = 3721663, upload-time = "2026-03-06T13:47:49.599Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3b/38ff88b347c3e346cda1d3fc1b65a7aa75d40632228d8b8a5d7b58508c24/h5py-3.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3f0a0e136f2e95dd0b67146abb6668af4f1a69c81ef8651a2d316e8e01de447", size = 3087630, upload-time = "2026-03-06T13:47:51.249Z" }, + { url = "https://files.pythonhosted.org/packages/98/a8/2594cef906aee761601eff842c7dc598bea2b394a3e1c00966832b8eeb7c/h5py-3.16.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a6fbc5367d4046801f9b7db9191b31895f22f1c6df1f9987d667854cac493538", size = 4823472, upload-time = "2026-03-06T13:47:53.085Z" }, + { url = "https://files.pythonhosted.org/packages/52/a0/c1f604538ff6db22a0690be2dc44ab59178e115f63c917794e529356ab23/h5py-3.16.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fb1720028d99040792bb2fb31facb8da44a6f29df7697e0b84f0d79aff2e9bd3", size = 5027150, upload-time = "2026-03-06T13:47:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/2e/fd/301739083c2fc4fd89950f9bcfce75d6e14b40b0ca3d40e48a8993d1722c/h5py-3.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:314b6054fe0b1051c2b0cb2df5cbdab15622fb05e80f202e3b6a5eee0d6fe365", size = 4814544, upload-time = "2026-03-06T13:47:56.893Z" }, + { url = "https://files.pythonhosted.org/packages/4c/42/2193ed41ccee78baba8fcc0cff2c925b8b9ee3793305b23e1f22c20bf4c7/h5py-3.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ffbab2fedd6581f6aa31cf1639ca2cb86e02779de525667892ebf4cc9fd26434", size = 5034013, upload-time = "2026-03-06T13:47:59.01Z" }, + { url = "https://files.pythonhosted.org/packages/f7/20/e6c0ff62ca2ad1a396a34f4380bafccaaf8791ff8fccf3d995a1fc12d417/h5py-3.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:17d1f1630f92ad74494a9a7392ab25982ce2b469fc62da6074c0ce48366a2999", size = 3191673, upload-time = "2026-03-06T13:48:00.626Z" }, + { url = "https://files.pythonhosted.org/packages/f2/48/239cbe352ac4f2b8243a8e620fa1a2034635f633731493a7ff1ed71e8658/h5py-3.16.0-cp311-cp311-win_arm64.whl", hash = "sha256:85b9c49dd58dc44cf70af944784e2c2038b6f799665d0dcbbc812a26e0faa859", size = 2673834, upload-time = "2026-03-06T13:48:02.579Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c5313566f4643121a78503a473f0fb1e6dcc541d5115c44f05e037609c565c4d", size = 3685604, upload-time = "2026-03-06T13:48:04.198Z" }, + { url = "https://files.pythonhosted.org/packages/b0/42/c84efcc1d4caebafb1ecd8be4643f39c85c47a80fe254d92b8b43b1eadaf/h5py-3.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:42b012933a83e1a558c673176676a10ce2fd3759976a0fedee1e672d1e04fc9d", size = 3061940, upload-time = "2026-03-06T13:48:05.783Z" }, + { url = "https://files.pythonhosted.org/packages/89/84/06281c82d4d1686fde1ac6b0f307c50918f1c0151062445ab3b6fa5a921d/h5py-3.16.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:ff24039e2573297787c3063df64b60aab0591980ac898329a08b0320e0cf2527", size = 5198852, upload-time = "2026-03-06T13:48:07.482Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e", size = 5405250, upload-time = "2026-03-06T13:48:09.628Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/9790c1655eabeb85b92b1ecab7d7e62a2069e53baefd58c98f0909c7a948/h5py-3.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:698dd69291272642ffda44a0ecd6cd3bda5faf9621452d255f57ce91487b9794", size = 5190108, upload-time = "2026-03-06T13:48:11.26Z" }, + { url = "https://files.pythonhosted.org/packages/51/d7/ab693274f1bd7e8c5f9fdd6c7003a88d59bedeaf8752716a55f532924fbb/h5py-3.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b2c02b0a160faed5fb33f1ba8a264a37ee240b22e049ecc827345d0d9043074", size = 5419216, upload-time = "2026-03-06T13:48:13.322Z" }, + { url = "https://files.pythonhosted.org/packages/03/c1/0976b235cf29ead553e22f2fb6385a8252b533715e00d0ae52ed7b900582/h5py-3.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:96b422019a1c8975c2d5dadcf61d4ba6f01c31f92bbde6e4649607885fe502d6", size = 3182868, upload-time = "2026-03-06T13:48:15.759Z" }, + { url = "https://files.pythonhosted.org/packages/14/d9/866b7e570b39070f92d47b0ff1800f0f8239b6f9e45f02363d7112336c1f/h5py-3.16.0-cp312-cp312-win_arm64.whl", hash = "sha256:39c2838fb1e8d97bcf1755e60ad1f3dd76a7b2a475928dc321672752678b96db", size = 2653286, upload-time = "2026-03-06T13:48:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/0f/9e/6142ebfda0cb6e9349c091eae73c2e01a770b7659255248d637bec54a88b/h5py-3.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:370a845f432c2c9619db8eed334d1e610c6015796122b0e57aa46312c22617d9", size = 3671808, upload-time = "2026-03-06T13:48:19.737Z" }, + { url = "https://files.pythonhosted.org/packages/b0/65/5e088a45d0f43cd814bc5bec521c051d42005a472e804b1a36c48dada09b/h5py-3.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42108e93326c50c2810025aade9eac9d6827524cdccc7d4b75a546e5ab308edb", size = 3045837, upload-time = "2026-03-06T13:48:21.854Z" }, + { url = "https://files.pythonhosted.org/packages/da/1e/6172269e18cc5a484e2913ced33339aad588e02ba407fafd00d369e22ef3/h5py-3.16.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:099f2525c9dcf28de366970a5fb34879aab20491589fa89ce2863a84218bb524", size = 5193860, upload-time = "2026-03-06T13:48:24.071Z" }, + { url = "https://files.pythonhosted.org/packages/bd/98/ef2b6fe2903e377cbe870c3b2800d62552f1e3dbe81ce49e1923c53d1c5c/h5py-3.16.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9300ad32dea9dfc5171f94d5f6948e159ed93e4701280b0f508773b3f582f402", size = 5400417, upload-time = "2026-03-06T13:48:25.728Z" }, + { url = "https://files.pythonhosted.org/packages/bc/81/5b62d760039eed64348c98129d17061fdfc7839fc9c04eaaad6dee1004e4/h5py-3.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:171038f23bccddfc23f344cadabdfc9917ff554db6a0d417180d2747fe4c75a7", size = 5185214, upload-time = "2026-03-06T13:48:27.436Z" }, + { url = "https://files.pythonhosted.org/packages/28/c4/532123bcd9080e250696779c927f2cb906c8bf3447df98f5ceb8dcded539/h5py-3.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e420b539fb6023a259a1b14d4c9f6df8cf50d7268f48e161169987a57b737ff", size = 5414598, upload-time = "2026-03-06T13:48:29.49Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/a27997f84341fc0dfcdd1fe4179b6ba6c32a7aa880fdb8c514d4dad6fba3/h5py-3.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:18f2bbcd545e6991412253b98727374c356d67caa920e68dc79eab36bf5fedad", size = 3175509, upload-time = "2026-03-06T13:48:31.131Z" }, + { url = "https://files.pythonhosted.org/packages/a5/23/bb8647521d4fd770c30a76cfc6cb6a2f5495868904054e92f2394c5a78ff/h5py-3.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:656f00e4d903199a1d58df06b711cf3ca632b874b4207b7dbec86185b5c8c7d4", size = 2647362, upload-time = "2026-03-06T13:48:33.411Z" }, + { url = "https://files.pythonhosted.org/packages/48/3c/7fcd9b4c9eed82e91fb15568992561019ae7a829d1f696b2c844355d95dd/h5py-3.16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9c9d307c0ef862d1cd5714f72ecfafe0a5d7529c44845afa8de9f46e5ba8bd65", size = 3678608, upload-time = "2026-03-06T13:48:35.183Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8c1eff849cdd53cbc73c214c30ebdb6f1bb8b64790b4b4fc36acdb5e43570210", size = 3054773, upload-time = "2026-03-06T13:48:37.139Z" }, + { url = "https://files.pythonhosted.org/packages/58/a5/4964bc0e91e86340c2bbda83420225b2f770dcf1eb8a39464871ad769436/h5py-3.16.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e2c04d129f180019e216ee5f9c40b78a418634091c8782e1f723a6ca3658b965", size = 5198886, upload-time = "2026-03-06T13:48:38.879Z" }, + { url = "https://files.pythonhosted.org/packages/f1/16/d905e7f53e661ce2c24686c38048d8e2b750ffc4350009d41c4e6c6c9826/h5py-3.16.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e4360f15875a532bc7b98196c7592ed4fc92672a57c0a621355961cafb17a6dd", size = 5404883, upload-time = "2026-03-06T13:48:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f2/58f34cb74af46d39f4cd18ea20909a8514960c5a3e5b92fd06a28161e0a8/h5py-3.16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3fae9197390c325e62e0a1aa977f2f62d994aa87aab182abbea85479b791197c", size = 5192039, upload-time = "2026-03-06T13:48:43.117Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ca/934a39c24ce2e2db017268c08da0537c20fa0be7e1549be3e977313fc8f5/h5py-3.16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:43259303989ac8adacc9986695b31e35dba6fd1e297ff9c6a04b7da5542139cc", size = 5421526, upload-time = "2026-03-06T13:48:44.838Z" }, + { url = "https://files.pythonhosted.org/packages/3e/14/615a450205e1b56d16c6783f5ccd116cde05550faad70ae077c955654a75/h5py-3.16.0-cp314-cp314-win_amd64.whl", hash = "sha256:fa48993a0b799737ba7fd21e2350fa0a60701e58180fae9f2de834bc39a147ab", size = 3183263, upload-time = "2026-03-06T13:48:47.117Z" }, + { url = "https://files.pythonhosted.org/packages/7b/48/a6faef5ed632cae0c65ac6b214a6614a0b510c3183532c521bdb0055e117/h5py-3.16.0-cp314-cp314-win_arm64.whl", hash = "sha256:1897a771a7f40d05c262fc8f37376ec37873218544b70216872876c627640f63", size = 2663450, upload-time = "2026-03-06T13:48:48.707Z" }, + { url = "https://files.pythonhosted.org/packages/5d/32/0c8bb8aedb62c772cf7c1d427c7d1951477e8c2835f872bc0a13d1f85f86/h5py-3.16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:15922e485844f77c0b9d275396d435db3baa58292a9c2176a386e072e0cf2491", size = 3760693, upload-time = "2026-03-06T13:48:50.453Z" }, + { url = "https://files.pythonhosted.org/packages/1d/1f/fcc5977d32d6387c5c9a694afee716a5e20658ac08b3ff24fdec79fb05f2/h5py-3.16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:df02dd29bd247f98674634dfe41f89fd7c16ba3d7de8695ec958f58404a4e618", size = 3181305, upload-time = "2026-03-06T13:48:52.221Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a1/af87f64b9f986889884243643621ebbd4ac72472ba8ec8cec891ac8e2ca1/h5py-3.16.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:0f456f556e4e2cebeebd9d66adf8dc321770a42593494a0b6f0af54a7567b242", size = 5074061, upload-time = "2026-03-06T13:48:54.089Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d0/146f5eaff3dc246a9c7f6e5e4f42bd45cc613bce16693bcd4d1f7c958bf5/h5py-3.16.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:3e6cb3387c756de6a9492d601553dffea3fe11b5f22b443aac708c69f3f55e16", size = 5279216, upload-time = "2026-03-06T13:48:56.75Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9d/12a13424f1e604fc7df9497b73c0356fb78c2fb206abd7465ce47226e8fd/h5py-3.16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8389e13a1fd745ad2856873e8187fd10268b2d9677877bb667b41aebd771d8b7", size = 5070068, upload-time = "2026-03-06T13:48:59.169Z" }, + { url = "https://files.pythonhosted.org/packages/41/8c/bbe98f813722b4873818a8db3e15aa3e625b59278566905ac439725e8070/h5py-3.16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:346df559a0f7dcb31cf8e44805319e2ab24b8957c45e7708ce503b2ec79ba725", size = 5300253, upload-time = "2026-03-06T13:49:02.033Z" }, + { url = "https://files.pythonhosted.org/packages/32/9e/87e6705b4d6890e7cecdf876e2a7d3e40654a2ae37482d79a6f1b87f7b92/h5py-3.16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4c6ab014ab704b4feaa719ae783b86522ed0bf1f82184704ed3c9e4e3228796e", size = 3381671, upload-time = "2026-03-06T13:49:04.351Z" }, + { url = "https://files.pythonhosted.org/packages/96/91/9fad90cfc5f9b2489c7c26ad897157bce82f0e9534a986a221b99760b23b/h5py-3.16.0-cp314-cp314t-win_arm64.whl", hash = "sha256:faca8fb4e4319c09d83337adc80b2ca7d5c5a343c2d6f1b6388f32cfecca13c1", size = 2740706, upload-time = "2026-03-06T13:49:06.347Z" }, +] + +[[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.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" }, +] + +[[package]] +name = "image" +version = "1.5.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django", version = "5.2.13", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "django", version = "6.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pillow" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/be/961693ed384aa91bcc07525c90e3a34bc06c75f131655dfe21310234c933/image-1.5.33.tar.gz", hash = "sha256:baa2e09178277daa50f22fd6d1d51ec78f19c12688921cb9ab5808743f097126", size = 15975, upload-time = "2020-10-27T09:58:36.538Z" } + +[[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 = "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 = "jax" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "ml-dtypes", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "opt-einsum", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/1e/267f59c8fb7f143c3f778c76cb7ef1389db3fd7e4540f04b9f42ca90764d/jax-0.6.2.tar.gz", hash = "sha256:a437d29038cbc8300334119692744704ca7941490867b9665406b7f90665cd96", size = 2334091, upload-time = "2025-06-17T23:10:27.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/a8/97ef0cbb7a17143ace2643d600a7b80d6705b2266fc31078229e406bdef2/jax-0.6.2-py3-none-any.whl", hash = "sha256:bb24a82dc60ccf704dcaf6dbd07d04957f68a6c686db19630dd75260d1fb788c", size = 2722396, upload-time = "2025-06-17T23:10:25.293Z" }, +] + +[package.optional-dependencies] +cuda12 = [ + { name = "jax-cuda12-plugin", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, extra = ["with-cuda"], marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jaxlib", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "jax" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "jaxlib", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "ml-dtypes", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "opt-einsum", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/f0/bcb81d28267d2054d0daed766c7fa16bcee5e481331b4d1e14f5fbe662be/jax-0.10.0.tar.gz", hash = "sha256:0119c767de1645f407df72345d28a3837dc904f1d698911c121d8f2b396fdece", size = 2663397, upload-time = "2026-04-22T13:22:28.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/aa/dfac6d72cc35bc07e7587115b6946e333ef4ccb2e6cd26ecf639438c5d26/jax-0.10.0-py3-none-any.whl", hash = "sha256:76c42ba163c8db3dc2e449e225b888c0edfb623ded31efdc96d85e0fda1d26e8", size = 3094950, upload-time = "2026-04-16T12:32:11.576Z" }, +] + +[package.optional-dependencies] +cuda12 = [ + { name = "jax-cuda12-plugin", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, extra = ["with-cuda"], marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jaxlib", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +cuda13 = [ + { name = "jax-cuda13-plugin", extra = ["with-cuda"], marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jaxlib", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "jax-cuda12-pjrt" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/8b/096a12d91b1bc76a13cd8e63f2d8eae5ca9b5693b5ee2687e46be3b5d779/jax_cuda12_pjrt-0.6.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:22faf020d2e8f7ca1e2915633241f7df7678b73c7078f5f0b2f113248337f7de", size = 111228681, upload-time = "2025-06-17T23:11:55.179Z" }, + { url = "https://files.pythonhosted.org/packages/9c/8e/21c21b4335fce1c022c339da5e6b6249c246ad062e924d28fb0eda4bcef0/jax_cuda12_pjrt-0.6.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8cd9ead7948ea2c778a508fef5d1159e8b7abf4fccc7037c3fe1dbfcd95012dc", size = 125263999, upload-time = "2025-06-17T23:11:59.986Z" }, +] + +[[package]] +name = "jax-cuda12-pjrt" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/1b/98575de81c20ce4142ea3e9b3a7416182427565617bf1afa319e1b66130b/jax_cuda12_pjrt-0.10.0-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:36ac316c588a0e08eb64f868270526adca3856d4b70b13760b7e9b73be85d2cf", size = 159005873, upload-time = "2026-04-16T12:32:15.486Z" }, + { url = "https://files.pythonhosted.org/packages/5f/78/a3d9ceda0793f4fb43daa292af7b801932611a1aed442636ddfc93d58c7a/jax_cuda12_pjrt-0.10.0-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:309515453f59caad95bf76c8bc649c24bc0e3d12d07baf3cf792be082abdee3b", size = 164780016, upload-time = "2026-04-16T12:32:21.028Z" }, +] + +[[package]] +name = "jax-cuda12-plugin" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "jax-cuda12-pjrt", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/29/4b8822ca459da39bda9be7454908ae4e29d88cfb99b480b641cbb063af7a/jax_cuda12_plugin-0.6.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:bc5c3a75d05519b4d326e4669d0f7ad0fe0f0acf875f9313d913748ccca5a9ea", size = 15873729, upload-time = "2025-06-17T23:12:05.046Z" }, + { url = "https://files.pythonhosted.org/packages/4d/3d/f543bab6ef7eebb9840d618fb2272bdcc0e990e60aa012f14a3564532823/jax_cuda12_plugin-0.6.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:1751f88989269b3cdb0dfe4f7b072a6442149818c9bc98c3a395c8acaf910a79", size = 15879965, upload-time = "2025-06-17T23:12:07.323Z" }, + { url = "https://files.pythonhosted.org/packages/9e/99/90f81c660bf662698be17e8b959d8302682c5cd5ce0729c0bfc883d8affe/jax_cuda12_plugin-0.6.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:2cd8e279a59a38ba0c978a831e13adeb6ee9e4572fba387c7975ba3ad535dd38", size = 15873970, upload-time = "2025-06-17T23:12:09.492Z" }, + { url = "https://files.pythonhosted.org/packages/ad/00/e733c87a2fb7265c96f48c991a896552c873de949217823d519288724d91/jax_cuda12_plugin-0.6.2-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:0896cbb308d95291e205cd89d254029dee3a1df43d66e9831331a9afd2d27870", size = 15879563, upload-time = "2025-06-17T23:12:11.439Z" }, + { url = "https://files.pythonhosted.org/packages/1d/53/6ea0db7230ac3dcb26b732452f4f2e2c6868b75d3603be19cee388fef279/jax_cuda12_plugin-0.6.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:6c9b002d13b1fcb9403713eedd3876a227ad1ffbdfb3811b1f9f89af4c25a5f7", size = 15867462, upload-time = "2025-06-17T23:12:14.093Z" }, + { url = "https://files.pythonhosted.org/packages/a5/db/e6643143caf573273eedb991cb1af2bea964b84594a8887802eb0b6ba64a/jax_cuda12_plugin-0.6.2-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:febd099f970d350eb8fa5a2c9a2fb4b0ea7b3d6a89df1496663edfa7afe590e5", size = 15876401, upload-time = "2025-06-17T23:12:15.964Z" }, + { url = "https://files.pythonhosted.org/packages/b4/10/74fbae1c1bb9d11b113c62e03c445bdf0aaaa4981bc13d2de8e3f4f503ca/jax_cuda12_plugin-0.6.2-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:773efa8b55a837406c561f0ef02144dda9019181193760ec5419eec9dd2b9aac", size = 15868561, upload-time = "2025-06-17T23:12:18.189Z" }, + { url = "https://files.pythonhosted.org/packages/2b/96/53928ad62ecddbf76f4c413025fdeab5a90adf7fbd970d800162399e504a/jax_cuda12_plugin-0.6.2-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:db4c6103c912d8cd1adf94c34d313bb4760ca7f01c897ca7cd62e65f27994199", size = 15876276, upload-time = "2025-06-17T23:12:20.361Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/f1c1790d77ccad3587e6c97045b567006a8050fec151581d4cf883779e25/jax_cuda12_plugin-0.6.2-cp313-cp313t-manylinux2014_aarch64.whl", hash = "sha256:ed5316ca1818db7ef53230ee0a41398d3a60942e361dfb857a952eb4d92fc8d7", size = 15964355, upload-time = "2025-06-17T23:12:22.176Z" }, + { url = "https://files.pythonhosted.org/packages/07/af/c3224aafbc1d2d7654359a5410319bf15361067635bd3616cf5ad3e16af2/jax_cuda12_plugin-0.6.2-cp313-cp313t-manylinux2014_x86_64.whl", hash = "sha256:83345f52f610cdb8e90044566d8e120864150b8090968c8ab6dd8e0bfb9a6a9f", size = 16037754, upload-time = "2025-06-17T23:12:24.066Z" }, +] + +[package.optional-dependencies] +with-cuda = [ + { name = "nvidia-cublas-cu12", version = "12.6.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.6.80", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvcc-cu12", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu12", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.3.83", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.1.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.3.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu12", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu12", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "jax-cuda12-plugin" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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'", +] +dependencies = [ + { name = "jax-cuda12-pjrt", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/85/8d8d48eb162723141cb75c2af11a17f22c29c6d73c5d2dadf73ac526974f/jax_cuda12_plugin-0.10.0-cp311-cp311-manylinux_2_27_aarch64.whl", hash = "sha256:1a4a4a56a832ad30e01c14085b1fa2440a55fa4ce0808e405e73650eff8afb31", size = 6687706, upload-time = "2026-04-16T12:32:25Z" }, + { url = "https://files.pythonhosted.org/packages/05/46/e919cf1ff1e434b11f482c46879c1b87c51c49875c8e0903f65738f6a340/jax_cuda12_plugin-0.10.0-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:957317caff1e6b006a13551733770df235a2747064be26b027460fe3a58f58ee", size = 6723678, upload-time = "2026-04-16T12:32:26.663Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d0/daedce941c209d232dc8fe2b0ec48e633775820286177a6a682867328e21/jax_cuda12_plugin-0.10.0-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:eaf1a6195aa0eb48b420c71f22b92d19778d948024977cae4641279d5f6c1f81", size = 6682214, upload-time = "2026-04-16T12:32:28.189Z" }, + { url = "https://files.pythonhosted.org/packages/e6/87/67ec012db59ce55aabbf34b9184e420e9ec7e3d57e04d5cb8e91016a434d/jax_cuda12_plugin-0.10.0-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:a16ba00d72366145827ca39a8c849f9fee1177d6738c9edfd72b3a9fedf5cf18", size = 6721403, upload-time = "2026-04-16T12:32:30.445Z" }, + { url = "https://files.pythonhosted.org/packages/91/e0/05aa6b3d3749441842143666105a5be7e7bd92d08df0f50f319ff854ee7b/jax_cuda12_plugin-0.10.0-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:7479e67d9d98d4a0f525f94f8b81880dcc058631f6de118b91de91db1b4095ed", size = 6682499, upload-time = "2026-04-16T12:32:31.857Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b5/55ebd12c92c079e13e9ab5e61dee1df7764273fbfb7b5b044ca292a108a3/jax_cuda12_plugin-0.10.0-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:ed074d37967bce61c1bafddf9dd0a8302306c12f90700ca5adfa3d08fdd4aee7", size = 6721082, upload-time = "2026-04-16T12:32:33.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/d6/688c70714e44e9e12ba4fa3444940cc0c83cc5e29279d944b57439eff710/jax_cuda12_plugin-0.10.0-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:95e77953e774004488edfe953dae5b5c3891571a9a2d44727150410fc4a6de45", size = 6696411, upload-time = "2026-04-16T12:32:35.216Z" }, + { url = "https://files.pythonhosted.org/packages/81/12/776b17d958a1e739f6ce52218b34df202bb1dbb2d24300595d76df7f408f/jax_cuda12_plugin-0.10.0-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:7f892ba9e317b12d8cd09f7a62e3c0bee12709609a49c580092138864e898250", size = 6729448, upload-time = "2026-04-16T12:32:37.305Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/21cd2eea0e1ac6848e6b37f6c01a9b647cf0b2d5326fdd0aa81dae8d07c4/jax_cuda12_plugin-0.10.0-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:8886fc57975fee01be1725f898b69292f615b70830aef5c2fbde638333616b5d", size = 6682932, upload-time = "2026-04-16T12:32:38.698Z" }, + { url = "https://files.pythonhosted.org/packages/71/ec/9ba9f450f8a61c8388a3c8b74fe07d76230961aa6af65e7ed8d1bf9073fa/jax_cuda12_plugin-0.10.0-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:f7a6a1881349dc39f24481a2a019ff294b94909b80a8881efe21d45b6a5f691d", size = 6721568, upload-time = "2026-04-16T12:32:40.533Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/f643676c8aaf646c906eb405c2fbb4eb140a54097c21b2010f33f1e6aa23/jax_cuda12_plugin-0.10.0-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:81aeecfcc589ece960a0c731fa8b660e3ea40ced1bb2e6be0306018f25771620", size = 6696820, upload-time = "2026-04-16T12:32:42.049Z" }, + { url = "https://files.pythonhosted.org/packages/06/ff/3acff12660dd845390c1884f7d606fa7d605d3001236f9911315b6fce6b6/jax_cuda12_plugin-0.10.0-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:d439b23ad32ee56d64738aa5d2b2e7700aec8752b4ce27d313b3248525836394", size = 6729866, upload-time = "2026-04-16T12:32:43.651Z" }, +] + +[package.optional-dependencies] +with-cuda = [ + { name = "nvidia-cublas-cu12", version = "12.6.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.6.80", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvcc-cu12", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu12", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.3.83", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.1.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.3.90", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu12", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu12", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "jax-cuda13-pjrt" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/7b/222e957b28c38b6ae37cbcf0e397c9f2b5be0c08236ddf72c545d185b3f5/jax_cuda13_pjrt-0.10.0-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:18f8dcd3b18778f5174bc01313c214c5cb8bfb3fb1c3d01344795d7424fe2b51", size = 113182882, upload-time = "2026-04-16T12:32:46.599Z" }, + { url = "https://files.pythonhosted.org/packages/21/98/77f15d81fd0637da454e453c8456d4a2b5c8b2e66823b4237ee8689152cf/jax_cuda13_pjrt-0.10.0-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:848d6ae3e663d040c53e902ea9d380a902bfa5e7da881053cec408360036fa7a", size = 118949754, upload-time = "2026-04-16T12:32:51.216Z" }, +] + +[[package]] +name = "jax-cuda13-plugin" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jax-cuda13-pjrt", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/d6/969708896a4b870b55efc7b93e8f0d2956f641b77bd0dc0eb2ca5048b81a/jax_cuda13_plugin-0.10.0-cp311-cp311-manylinux_2_27_aarch64.whl", hash = "sha256:e3627f3378b93edb78ae9af097cf40e5f1f9ef47f7ed1f8f90f461a5dafebd03", size = 6079483, upload-time = "2026-04-16T12:32:54.327Z" }, + { url = "https://files.pythonhosted.org/packages/0c/34/ffb02e26060113db6397900a9a292e10a633a577e28b12ee8cb1efa744f1/jax_cuda13_plugin-0.10.0-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:92770e31f1ea82948b9541b6e915a87cc76d484e3172eca455152ccc6d7e2a05", size = 6119806, upload-time = "2026-04-16T12:32:56.098Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/6fadfbc22270a53b90e514d764d59c26a62a4c1159194868a69e9c6290f2/jax_cuda13_plugin-0.10.0-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:56f1ca2a5ebcc4d399aaa72d845543d9291574d49545dca75d1cb1fff04637b4", size = 6074330, upload-time = "2026-04-16T12:32:57.772Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/4e64882c7182828160236f92087f4a82cd0d9217608ef52d64bc91eeaa28/jax_cuda13_plugin-0.10.0-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:34bbe4978e5534ef88d944ca8c3d12480ebbcd53fc75a7deb3fcab80769afd39", size = 6117248, upload-time = "2026-04-16T12:32:59.263Z" }, + { url = "https://files.pythonhosted.org/packages/c0/7a/afb7dec2b393a916b479c61ebd86aa993429834ed805a03a6c2c5e68915d/jax_cuda13_plugin-0.10.0-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:894006be79b60310176c31fb2aae0f9182b7dc7a30081a2cb8de5917059f84bd", size = 6074152, upload-time = "2026-04-16T12:33:00.99Z" }, + { url = "https://files.pythonhosted.org/packages/49/86/d166a452240c299c99bde6a4c3d410c690597d17b13a251d3e2a0a7bff19/jax_cuda13_plugin-0.10.0-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:4c2022a2be1f4f3654dca98bd5487081ca9b5ae25b7004c8f86c449a4a1cd43f", size = 6116938, upload-time = "2026-04-16T12:33:02.517Z" }, + { url = "https://files.pythonhosted.org/packages/2c/cb/65abe3f07c3349d13fa526e38de00abaef962c25d336b3a33ac79bbe25f7/jax_cuda13_plugin-0.10.0-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:beca99daffb43690fa54f3bf73f42e68a0e1440b4ab36a0830da079786357222", size = 6089528, upload-time = "2026-04-16T12:33:04.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/0f/fa9a6ac2c0374c645430d799f91242ca3de47218e6bc4d88a3471b24e10e/jax_cuda13_plugin-0.10.0-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:4fd6fbd99ccc91c3c1bce9b9f566a5498922227085e55fa1109efb82e4842cd3", size = 6125592, upload-time = "2026-04-16T12:33:06.249Z" }, + { url = "https://files.pythonhosted.org/packages/18/28/5a520f59b29ae11b67ca71fa60828a39a758f2d7707b1bad02be0ad895a4/jax_cuda13_plugin-0.10.0-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:2ac8987e9a74376a4d26ed761d36008f44cba9279016a7a15c246cd6275cdd44", size = 6074511, upload-time = "2026-04-16T12:33:07.781Z" }, + { url = "https://files.pythonhosted.org/packages/8f/2b/5c63c29d155afdf1d7827f8c04efe8cac47fc6783d8c53959e43de879dcc/jax_cuda13_plugin-0.10.0-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:09dff8dadac0334dccd43a79b00bb81f27df74ab05656b78d10ef784a29ea5f6", size = 6117535, upload-time = "2026-04-16T12:33:09.673Z" }, + { url = "https://files.pythonhosted.org/packages/41/29/3f85cbb971a6083192d44171f26f6a834cec8b1446c95cd90badd08cd90a/jax_cuda13_plugin-0.10.0-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:2917c3e1d97d7158cd3ef2f1aee9bdc0bc3ccc544b53d57f259cf1c391404af4", size = 6089871, upload-time = "2026-04-16T12:33:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/d9/54/909abfa92bcaf264d6d89662a0643f928cdb1b48b79ec11b37aa65d90ee2/jax_cuda13_plugin-0.10.0-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:d551547d8f964395c1accc994313237b57488bc7733a631b1d309c0753ea480c", size = 6125978, upload-time = "2026-04-16T12:33:13.483Z" }, +] + +[package.optional-dependencies] +with-cuda = [ + { name = "nvidia-cublas", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvcc", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu13", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu13", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu13", marker = "(python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvvm", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[[package]] +name = "jaxlib" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "ml-dtypes", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/c5/41598634c99cbebba46e6777286fb76abc449d33d50aeae5d36128ca8803/jaxlib-0.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4601b2b5dc8c23d6afb293eacfb9aec4e1d1871cb2f29c5a151d103e73b0f8", size = 54298019, upload-time = "2025-06-17T23:10:36.916Z" }, + { url = "https://files.pythonhosted.org/packages/81/af/db07d746cd5867d5967528e7811da53374e94f64e80a890d6a5a4b95b130/jaxlib-0.6.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:4205d098ce8efb5f7fe2fe5098bae6036094dc8d8829f5e0e0d7a9b155326336", size = 79440052, upload-time = "2025-06-17T23:10:41.282Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d8/b7ae9e819c62c1854dbc2c70540a5c041173fbc8bec5e78ab7fd615a4aee/jaxlib-0.6.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:c087a0eb6fb7f6f8f54d56f4730328dfde5040dd3b5ddfa810e7c28ea7102b42", size = 89917034, upload-time = "2025-06-17T23:10:45.897Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e5/87e91bc70569ac5c3e3449eefcaf47986e892f10cfe1d5e5720dceae3068/jaxlib-0.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:153eaa51f778b60851720729d4f461a91edd9ba3932f6f3bc598d4413870038b", size = 57896337, upload-time = "2025-06-17T23:10:50.179Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ee/6899b0aed36a4acc51319465ddd83c7c300a062a9e236cceee00984ffe0b/jaxlib-0.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a208ff61c58128d306bb4e5ad0858bd2b0960f2c1c10ad42c548f74a60c0020e", size = 54300346, upload-time = "2025-06-17T23:10:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/e6/03/34bb6b346609079a71942cfbf507892e3c877a06a430a0df8429c455cebc/jaxlib-0.6.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:11eae7e05bc5a79875da36324afb9eddd4baeaef2a0386caf6d4f3720b9aef28", size = 79438425, upload-time = "2025-06-17T23:10:58.356Z" }, + { url = "https://files.pythonhosted.org/packages/80/02/49b05cbab519ffd3cb79586336451fbbf8b6523f67128a794acc9f179000/jaxlib-0.6.2-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:335d7e3515ce78b52a410136f46aa4a7ea14d0e7d640f34e1e137409554ad0ac", size = 89920354, upload-time = "2025-06-17T23:11:03.086Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7a/93b28d9452b46c15fc28dd65405672fc8a158b35d46beabaa0fe9631afb0/jaxlib-0.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6815509997d6b05e5c9daa7994b9ad473ce3e8c8a17bdbbcacc3c744f76f7a0", size = 57895707, upload-time = "2025-06-17T23:11:07.074Z" }, + { url = "https://files.pythonhosted.org/packages/ac/db/05e702d2534e87abf606b1067b46a273b120e6adc7d459696e3ce7399317/jaxlib-0.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34d8a684a8be949dd87dd4acc97101b4106a0dc9ad151ec891da072319a57b99", size = 54301644, upload-time = "2025-06-17T23:11:10.977Z" }, + { url = "https://files.pythonhosted.org/packages/0d/8a/b0a96887b97a25d45ae2c30e4acecd2f95acd074c18ec737dda8c5cc7016/jaxlib-0.6.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:87ec2dc9c3ed9ab936eec8535160c5fbd2c849948559f1c5daa75f63fabe5942", size = 79439161, upload-time = "2025-06-17T23:11:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e8/71c2555431edb5dd115cf86a7b599aa7e1be26728d89ae59aa11251d299c/jaxlib-0.6.2-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:f1dd09b481a93c1d4c750013f467f74194493ba7bd29fcd4d1cec16e3a214f65", size = 89942952, upload-time = "2025-06-17T23:11:19.181Z" }, + { url = "https://files.pythonhosted.org/packages/de/3a/06849113c844b86d20174df54735c84202ccf82cbd36d805f478c834418b/jaxlib-0.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:921dbd4db214eba19a29ba9f2450d880e08b2b2c7b968f28cc89da3e62366af4", size = 57919603, upload-time = "2025-06-17T23:11:23.207Z" }, + { url = "https://files.pythonhosted.org/packages/af/38/bed4279c2a3407820ed8bcd72dbad43c330ada35f88fafe9952b35abf785/jaxlib-0.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bff67b188133ce1f0111c7b163ac321fd646b59ed221ea489063e2e0f85cb967", size = 54300638, upload-time = "2025-06-17T23:11:26.372Z" }, + { url = "https://files.pythonhosted.org/packages/52/dc/9e35a1dc089ddf3d6be53ef2e6ba4718c5b6c0f90bccc535a20edac0c895/jaxlib-0.6.2-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:70498837caf538bd458ff6858c8bfd404db82015aba8f663670197fa9900ff02", size = 79439983, upload-time = "2025-06-17T23:11:30.016Z" }, + { url = "https://files.pythonhosted.org/packages/34/16/e93f0184b80a4e1ad38c6998aa3a2f7569c0b0152cbae39f7572393eda04/jaxlib-0.6.2-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:f94163f14c8fd3ba93ae14b631abacf14cb031bba0b59138869984b4d10375f8", size = 89941720, upload-time = "2025-06-17T23:11:34.62Z" }, + { url = "https://files.pythonhosted.org/packages/06/b9/ea50792ee0333dba764e06c305fe098bce1cb938dcb66fbe2fc47ef5dd02/jaxlib-0.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:b977604cd36c74b174d25ed685017379468138eb747d865f75e466cb273c801d", size = 57919073, upload-time = "2025-06-17T23:11:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/09/ce/9596391c104a0547fcaf6a8c72078bbae79dbc8e7f0843dc8318f6606328/jaxlib-0.6.2-cp313-cp313t-manylinux2014_aarch64.whl", hash = "sha256:39cf9555f85ae1ce2e2c1a59fc71f2eca4f9867a7cb934fef881ba56b11371d1", size = 79579638, upload-time = "2025-06-17T23:11:43.054Z" }, + { url = "https://files.pythonhosted.org/packages/10/79/f6e80f7f4cacfc9f03e64ac57ecb856b140de7c2f939b25f8dcf1aff63f9/jaxlib-0.6.2-cp313-cp313t-manylinux2014_x86_64.whl", hash = "sha256:3abd536e44b05fb1657507e3ff1fc3691f99613bae3921ecab9e82f27255f784", size = 90066675, upload-time = "2025-06-17T23:11:47.454Z" }, +] + +[[package]] +name = "jaxlib" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "ml-dtypes", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/5c/64a60f90d48bb6ab68ece63b7fa78855e8f8cefc4045f198a5c8695bfd99/jaxlib-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:277032e9f074c3fd5ffd1e0cb03d4fe66e272de472667cdbc418ad99b21b646a", size = 60115498, upload-time = "2026-04-16T12:33:15.93Z" }, + { url = "https://files.pythonhosted.org/packages/71/bc/b75d9e09bcf46e00fd9cdd6c457219a8fe2033d351c2d133917662e8cbaa/jaxlib-0.10.0-cp311-cp311-manylinux_2_27_aarch64.whl", hash = "sha256:3db94ebc859375d955de3504182add7ce1733ce3d30c15e0ef031602cb51a559", size = 79395106, upload-time = "2026-04-16T12:33:19.648Z" }, + { url = "https://files.pythonhosted.org/packages/64/13/a94b53b0acd3fccce0441e3811e86224e5b21ac122f2dea4be1ccdeb7dc0/jaxlib-0.10.0-cp311-cp311-manylinux_2_27_x86_64.whl", hash = "sha256:9be229993a41e5b2b84f234ecc19a5de02f35eddb1195cf027bd539e1601e15d", size = 85005588, upload-time = "2026-04-16T12:33:23.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/36/fbc303c0a41ac26daceeba0a9884d9206657e8eb1981f3f76da17f1ecc7f/jaxlib-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:421cdf3a4a5c2ee41471035e586954c8dc599d677ce9b11b063c3926a82a7850", size = 64195649, upload-time = "2026-04-16T12:33:26.972Z" }, + { url = "https://files.pythonhosted.org/packages/79/0c/279cb4dc009fe87a8315d1b182f520693236ad07b852152df344ea4e4021/jaxlib-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c1d9b463327c7a2333f210114ecb04f28fefc51ba8233a85a2280cce75bdb42", size = 60137156, upload-time = "2026-04-16T12:33:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cd/59ead5a90df739d1b8c1d1d00443558fd30adf5abb0319966ce340d49ff3/jaxlib-0.10.0-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:aa1d70f1a4e27eb403654e71e2fb28d5786d3e9b77fc1847e8c5389880927ca4", size = 79398938, upload-time = "2026-04-16T12:33:34.14Z" }, + { url = "https://files.pythonhosted.org/packages/b5/20/9b07fc8b327b222b6f72a4978eb4f2ebe856ee71237d63c4d808ec3945e0/jaxlib-0.10.0-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:b0bfb865a07df2e6d7418c0b0c292dd294b5500523b1dd5872b180db2aa480d4", size = 85028702, upload-time = "2026-04-16T12:33:37.815Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/4f798fffed4229a2d7de07c1f4feabac7676a26c695a418796dbe29bae7f/jaxlib-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:25bf167e0d8b594e0ec50783ff4892c0b7ec37236c88b2b425a7c252823f8680", size = 64221923, upload-time = "2026-04-16T12:33:41.343Z" }, + { url = "https://files.pythonhosted.org/packages/d4/b6/b66b0abb9df8f9f8f19a5244b849cb07fc7389a4a5e1fb7794f7cefd7f26/jaxlib-0.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:384635fff55899a295bbc82ee6c6f773a300e787dc472ca92bbe79abfaac8369", size = 60138213, upload-time = "2026-04-16T12:33:45.13Z" }, + { url = "https://files.pythonhosted.org/packages/30/1e/844e525a72a08a2744ae2722e2332a0159a6d0efdc1e561cf378f7259a01/jaxlib-0.10.0-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:6d8d78b7070b34e4c5bba5f7e10927e7f4aac9b69be17e9b0a5898553a4338f3", size = 79401054, upload-time = "2026-04-16T12:33:49.263Z" }, + { url = "https://files.pythonhosted.org/packages/f7/95/305854c2ef2b645f7df1666be66b1167c392cc39384d09aca2e9499b71bf/jaxlib-0.10.0-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:d303dc31b65e8b793d5600f81b1583be03dc9b876a4c10b3e259b6609a1cbe3b", size = 85027218, upload-time = "2026-04-16T12:33:54.325Z" }, + { url = "https://files.pythonhosted.org/packages/a8/63/a5e1dcb65dca6efbae7189f185588fc939e17c284f272254fbeb68a39817/jaxlib-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:3869be623c2f3391be2ee86f8b412372b102492e67cac0a5f0ab1037bbc3a5cc", size = 64221972, upload-time = "2026-04-16T12:46:24.762Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d6/411e580b70f64a5a4b095cb2c03c1e2c7b3b35c6754e5cacd4a8f8a2d480/jaxlib-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9050ce2ae7eeca62b1a235065056cad62cac590ddc035486faa4472a47eed9f6", size = 60250897, upload-time = "2026-04-16T12:46:13.185Z" }, + { url = "https://files.pythonhosted.org/packages/2c/5c/f40ac9d40eb39c359f268e087ff1f21bdad664f86691c52a288d0f9152e8/jaxlib-0.10.0-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:59e07aab3bdfaad9bdd3cf32e0d3d4f228837b9b231c53f5ae1c0fc284481094", size = 79518774, upload-time = "2026-04-16T12:46:16.684Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/dea7a0ea64a5551244e2140ef6ad36e2dff308b6f5facaa6f1c1272bb47f/jaxlib-0.10.0-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:3088503812cfe49f34a3083d3b7ef5cb3aaf33d89ceb1b3f647fa52713aee59d", size = 85134776, upload-time = "2026-04-16T12:46:20.855Z" }, + { url = "https://files.pythonhosted.org/packages/a7/25/e1e52a21786b321fb6a2edf9ef9971aa70f06bb2738aef9afd6d8f46a441/jaxlib-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98b26672943672742873f65bc03216819fc55325c99f146590d007c0172bff30", size = 60141273, upload-time = "2026-04-16T12:46:27.922Z" }, + { url = "https://files.pythonhosted.org/packages/9c/3b/21e3382ce6f4ee84bcce52810f3786ae3663991ec863acadcd0765b6f767/jaxlib-0.10.0-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:ad47e072430979ec21637aa487d4dc464028b8e9be27268f37de69536c76e341", size = 79416404, upload-time = "2026-04-16T12:46:31.326Z" }, + { url = "https://files.pythonhosted.org/packages/a1/8e/b2a08ffc51c93842de71f7f988865cebfa7f43d6721957812dc8cc8b9d40/jaxlib-0.10.0-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:2a42cf04c0f88bc03b150a17fa7ddbb2f40e096667ec8a1b840ed87913e6e735", size = 85035152, upload-time = "2026-04-16T12:46:36.129Z" }, + { url = "https://files.pythonhosted.org/packages/24/08/26e6a3ecf0a95f1ec0dcd7a668d5c9a72e581c40fe4ae51e102ca63174c5/jaxlib-0.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:450b771c01b3662c3497e2dceada3f6fc893112ae637ef85ef1dcc7dc68892a8", size = 66661443, upload-time = "2026-04-16T12:46:51.088Z" }, + { url = "https://files.pythonhosted.org/packages/37/d7/06383d19217824134c4a6119d2efe7b53cde6a0a66fb1d643d9f725d2697/jaxlib-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f62026c9fb1f05998592082a6dcb62f70b466342bc139f711802a9b184ba9a46", size = 60253088, upload-time = "2026-04-16T12:46:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ce/f66f955c01cce1ffda0cfbb1c02bb9234e0cac1d40b46fe17c315155d62f/jaxlib-0.10.0-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:e66bdc0b57ed5649950799d3f0d67a6bb67f03d06b49ea3fced0bdd6140a9943", size = 79517974, upload-time = "2026-04-16T12:46:43.147Z" }, + { url = "https://files.pythonhosted.org/packages/5e/74/b358923d0cce13fc7608051d0cc60ce3379f14350dc42540bdbabdbffab2/jaxlib-0.10.0-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:4dccd9065b30954879869641472d5d12fe4d7914175a5cad56293af8429ce7e0", size = 85134286, upload-time = "2026-04-16T12:46:47.416Z" }, +] + +[[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" }, +] +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-client" +version = "8.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/e4/ba649102a3bc3fbca54e7239fb924fd434c766f855693d86de0b1f2bec81/jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e", size = 348020, upload-time = "2026-01-08T13:55:47.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a", size = 107371, upload-time = "2026-01-08T13:55:45.562Z" }, +] + +[[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 = "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 = "librt" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/6b/3d5c13fb3e3c4f43206c8f9dfed13778c2ed4f000bacaa0b7ce3c402a265/librt-0.9.0.tar.gz", hash = "sha256:a0951822531e7aee6e0dfb556b30d5ee36bbe234faf60c20a16c01be3530869d", size = 184368, upload-time = "2026-04-09T16:06:26.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/4a/c64265d71b84030174ff3ac2cd16d8b664072afab8c41fccd8e2ee5a6f8d/librt-0.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f8e12706dcb8ff6b3ed57514a19e45c49ad00bcd423e87b2b2e4b5f64578443", size = 67529, upload-time = "2026-04-09T16:04:27.373Z" }, + { url = "https://files.pythonhosted.org/packages/23/b1/30ca0b3a8bdac209a00145c66cf42e5e7da2cc056ffc6ebc5c7b430ddd34/librt-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4e3dda8345307fd7306db0ed0cb109a63a2c85ba780eb9dc2d09b2049a931f9c", size = 70248, upload-time = "2026-04-09T16:04:28.758Z" }, + { url = "https://files.pythonhosted.org/packages/fa/fc/c6018dc181478d6ac5aa24a5846b8185101eb90894346db239eb3ea53209/librt-0.9.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:de7dac64e3eb832ffc7b840eb8f52f76420cde1b845be51b2a0f6b870890645e", size = 202184, upload-time = "2026-04-09T16:04:29.893Z" }, + { url = "https://files.pythonhosted.org/packages/bf/58/d69629f002203370ef41ea69ff71c49a2c618aec39b226ff49986ecd8623/librt-0.9.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22a904cbdb678f7cb348c90d543d3c52f581663d687992fee47fd566dcbf5285", size = 212926, upload-time = "2026-04-09T16:04:31.126Z" }, + { url = "https://files.pythonhosted.org/packages/cc/55/01d859f57824e42bd02465c77bec31fa5ef9d8c2bcee702ccf8ef1b9f508/librt-0.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:224b9727eb8bc188bc3bcf29d969dba0cd61b01d9bac80c41575520cc4baabb2", size = 225664, upload-time = "2026-04-09T16:04:32.352Z" }, + { url = "https://files.pythonhosted.org/packages/9b/02/32f63ad0ef085a94a70315291efe1151a48b9947af12261882f8445b2a30/librt-0.9.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e94cbc6ad9a6aeea46d775cbb11f361022f778a9cc8cc90af653d3a594b057ce", size = 219534, upload-time = "2026-04-09T16:04:33.667Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5a/9d77111a183c885acf3b3b6e4c00f5b5b07b5817028226499a55f1fedc59/librt-0.9.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7bc30ad339f4e1a01d4917d645e522a0bc0030644d8973f6346397c93ba1503f", size = 227322, upload-time = "2026-04-09T16:04:34.945Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e7/05d700c93063753e12ab230b972002a3f8f3b9c95d8a980c2f646c8b6963/librt-0.9.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:56d65b583cf43b8cf4c8fbe1e1da20fa3076cc32a1149a141507af1062718236", size = 223407, upload-time = "2026-04-09T16:04:36.22Z" }, + { url = "https://files.pythonhosted.org/packages/c0/26/26c3124823c67c987456977c683da9a27cc874befc194ddcead5f9988425/librt-0.9.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0a1be03168b2691ba61927e299b352a6315189199ca18a57b733f86cb3cc8d38", size = 221302, upload-time = "2026-04-09T16:04:37.62Z" }, + { url = "https://files.pythonhosted.org/packages/50/2b/c7cc2be5cf4ff7b017d948a789256288cb33a517687ff1995e72a7eea79f/librt-0.9.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:63c12efcd160e1d14da11af0c46c0217473e1e0d2ae1acbccc83f561ea4c2a7b", size = 243893, upload-time = "2026-04-09T16:04:38.909Z" }, + { url = "https://files.pythonhosted.org/packages/62/d3/da553d37417a337d12660450535d5fd51373caffbedf6962173c87867246/librt-0.9.0-cp310-cp310-win32.whl", hash = "sha256:e9002e98dcb1c0a66723592520decd86238ddcef168b37ff6cfb559200b4b774", size = 55375, upload-time = "2026-04-09T16:04:40.148Z" }, + { url = "https://files.pythonhosted.org/packages/9b/5a/46fa357bab8311b6442a83471591f2f9e5b15ecc1d2121a43725e0c529b8/librt-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9fcb461fbf70654a52a7cc670e606f04449e2374c199b1825f754e16dacfedd8", size = 62581, upload-time = "2026-04-09T16:04:41.452Z" }, + { url = "https://files.pythonhosted.org/packages/e2/1e/2ec7afcebcf3efea593d13aee18bbcfdd3a243043d848ebf385055e9f636/librt-0.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90904fac73c478f4b83f4ed96c99c8208b75e6f9a8a1910548f69a00f1eaa671", size = 67155, upload-time = "2026-04-09T16:04:42.933Z" }, + { url = "https://files.pythonhosted.org/packages/18/77/72b85afd4435268338ad4ec6231b3da8c77363f212a0227c1ff3b45e4d35/librt-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:789fff71757facc0738e8d89e3b84e4f0251c1c975e85e81b152cdaca927cc2d", size = 69916, upload-time = "2026-04-09T16:04:44.042Z" }, + { url = "https://files.pythonhosted.org/packages/27/fb/948ea0204fbe2e78add6d46b48330e58d39897e425560674aee302dca81c/librt-0.9.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1bf465d1e5b0a27713862441f6467b5ab76385f4ecf8f1f3a44f8aa3c695b4b6", size = 199635, upload-time = "2026-04-09T16:04:45.5Z" }, + { url = "https://files.pythonhosted.org/packages/ac/cd/894a29e251b296a27957856804cfd21e93c194aa131de8bb8032021be07e/librt-0.9.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f819e0c6413e259a17a7c0d49f97f405abadd3c2a316a3b46c6440b7dbbedbb1", size = 211051, upload-time = "2026-04-09T16:04:47.016Z" }, + { url = "https://files.pythonhosted.org/packages/18/8f/dcaed0bc084a35f3721ff2d081158db569d2c57ea07d35623ddaca5cfc8e/librt-0.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e0785c2fb4a81e1aece366aa3e2e039f4a4d7d21aaaded5227d7f3c703427882", size = 224031, upload-time = "2026-04-09T16:04:48.207Z" }, + { url = "https://files.pythonhosted.org/packages/03/44/88f6c1ed1132cd418601cc041fbd92fed28b3a09f39de81978e0822d13ff/librt-0.9.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:80b25c7b570a86c03b5da69e665809deb39265476e8e21d96a9328f9762f9990", size = 218069, upload-time = "2026-04-09T16:04:50.025Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/7d02e981c2db12188d82b4410ff3e35bfdb844b26aecd02233626f46af2b/librt-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d4d16b608a1c43d7e33142099a75cd93af482dadce0bf82421e91cad077157f4", size = 224857, upload-time = "2026-04-09T16:04:51.684Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/c77e706b7215ca32e928d47535cf13dbc3d25f096f84ddf8fbc06693e229/librt-0.9.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:194fc1a32e1e21fe809d38b5faea66cc65eaa00217c8901fbdb99866938adbdb", size = 219865, upload-time = "2026-04-09T16:04:52.949Z" }, + { url = "https://files.pythonhosted.org/packages/52/d1/32b0c1a0eb8461c70c11656c46a29f760b7c7edf3c36d6f102470c17170f/librt-0.9.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8c6bc1384d9738781cfd41d09ad7f6e8af13cfea2c75ece6bd6d2566cdea2076", size = 218451, upload-time = "2026-04-09T16:04:54.174Z" }, + { url = "https://files.pythonhosted.org/packages/74/d1/adfd0f9c44761b1d49b1bec66173389834c33ee2bd3c7fd2e2367f1942d4/librt-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:15cb151e52a044f06e54ac7f7b47adbfc89b5c8e2b63e1175a9d587c43e8942a", size = 241300, upload-time = "2026-04-09T16:04:55.452Z" }, + { url = "https://files.pythonhosted.org/packages/09/b0/9074b64407712f0003c27f5b1d7655d1438979155f049720e8a1abd9b1a1/librt-0.9.0-cp311-cp311-win32.whl", hash = "sha256:f100bfe2acf8a3689af9d0cc660d89f17286c9c795f9f18f7b62dd1a6b247ae6", size = 55668, upload-time = "2026-04-09T16:04:56.689Z" }, + { url = "https://files.pythonhosted.org/packages/24/19/40b77b77ce80b9389fb03971431b09b6b913911c38d412059e0b3e2a9ef2/librt-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:0b73e4266307e51c95e09c0750b7ec383c561d2e97d58e473f6f6a209952fbb8", size = 62976, upload-time = "2026-04-09T16:04:57.733Z" }, + { url = "https://files.pythonhosted.org/packages/70/9d/9fa7a64041e29035cb8c575af5f0e3840be1b97b4c4d9061e0713f171849/librt-0.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc5518873822d2faa8ebdd2c1a4d7c8ef47b01a058495ab7924cb65bdbf5fc9a", size = 53502, upload-time = "2026-04-09T16:04:58.806Z" }, + { url = "https://files.pythonhosted.org/packages/bf/90/89ddba8e1c20b0922783cd93ed8e64f34dc05ab59c38a9c7e313632e20ff/librt-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9b3e3bc363f71bda1639a4ee593cb78f7fbfeacc73411ec0d4c92f00730010a4", size = 68332, upload-time = "2026-04-09T16:05:00.09Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/7aa4da1fb08bdeeb540cb07bfc8207cb32c5c41642f2594dbd0098a0662d/librt-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a09c2f5869649101738653a9b7ab70cf045a1105ac66cbb8f4055e61df78f2d", size = 70581, upload-time = "2026-04-09T16:05:01.213Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/73a2187e1031041e93b7e3a25aae37aa6f13b838c550f7e0f06f66766212/librt-0.9.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5ca8e133d799c948db2ab1afc081c333a825b5540475164726dcbf73537e5c2f", size = 203984, upload-time = "2026-04-09T16:05:02.542Z" }, + { url = "https://files.pythonhosted.org/packages/5e/3d/23460d571e9cbddb405b017681df04c142fb1b04cbfce77c54b08e28b108/librt-0.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:603138ee838ee1583f1b960b62d5d0007845c5c423feb68e44648b1359014e27", size = 215762, upload-time = "2026-04-09T16:05:04.127Z" }, + { url = "https://files.pythonhosted.org/packages/de/1e/42dc7f8ab63e65b20640d058e63e97fd3e482c1edbda3570d813b4d0b927/librt-0.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4003f70c56a5addd6aa0897f200dd59afd3bf7bcd5b3cce46dd21f925743bc2", size = 230288, upload-time = "2026-04-09T16:05:05.883Z" }, + { url = "https://files.pythonhosted.org/packages/dc/08/ca812b6d8259ad9ece703397f8ad5c03af5b5fedfce64279693d3ce4087c/librt-0.9.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:78042f6facfd98ecb25e9829c7e37cce23363d9d7c83bc5f72702c5059eb082b", size = 224103, upload-time = "2026-04-09T16:05:07.148Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3f/620490fb2fa66ffd44e7f900254bc110ebec8dac6c1b7514d64662570e6f/librt-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a361c9434a64d70a7dbb771d1de302c0cc9f13c0bffe1cf7e642152814b35265", size = 232122, upload-time = "2026-04-09T16:05:08.386Z" }, + { url = "https://files.pythonhosted.org/packages/e9/83/12864700a1b6a8be458cf5d05db209b0d8e94ae281e7ec261dbe616597b4/librt-0.9.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:dd2c7e082b0b92e1baa4da28163a808672485617bc855cc22a2fd06978fa9084", size = 225045, upload-time = "2026-04-09T16:05:09.707Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1b/845d339c29dc7dbc87a2e992a1ba8d28d25d0e0372f9a0a2ecebde298186/librt-0.9.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7e6274fd33fc5b2a14d41c9119629d3ff395849d8bcbc80cf637d9e8d2034da8", size = 227372, upload-time = "2026-04-09T16:05:10.942Z" }, + { url = "https://files.pythonhosted.org/packages/8d/fe/277985610269d926a64c606f761d58d3db67b956dbbf40024921e95e7fcb/librt-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5093043afb226ecfa1400120d1ebd4442b4f99977783e4f4f7248879009b227f", size = 248224, upload-time = "2026-04-09T16:05:12.254Z" }, + { url = "https://files.pythonhosted.org/packages/92/1b/ee486d244b8de6b8b5dbaefabe6bfdd4a72e08f6353edf7d16d27114da8d/librt-0.9.0-cp312-cp312-win32.whl", hash = "sha256:9edcc35d1cae9fd5320171b1a838c7da8a5c968af31e82ecc3dff30b4be0957f", size = 55986, upload-time = "2026-04-09T16:05:13.529Z" }, + { url = "https://files.pythonhosted.org/packages/89/7a/ba1737012308c17dc6d5516143b5dce9a2c7ba3474afd54e11f44a4d1ef3/librt-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:3cc2917258e131ae5f958a4d872e07555b51cb7466a43433218061c74ef33745", size = 63260, upload-time = "2026-04-09T16:05:14.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/e4/01752c113da15127f18f7bf11142f5640038f062407a611c059d0036c6aa/librt-0.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:90e6d5420fc8a300518d4d2288154ff45005e920425c22cbbfe8330f3f754bd9", size = 53694, upload-time = "2026-04-09T16:05:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d7/1b3e26fffde1452d82f5666164858a81c26ebe808e7ae8c9c88628981540/librt-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29b68cd9714531672db62cc54f6e8ff981900f824d13fa0e00749189e13778e", size = 68367, upload-time = "2026-04-09T16:05:17.243Z" }, + { url = "https://files.pythonhosted.org/packages/a5/5b/c61b043ad2e091fbe1f2d35d14795e545d0b56b03edaa390fa1dcee3d160/librt-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d5c8a5929ac325729f6119802070b561f4db793dffc45e9ac750992a4ed4d22", size = 70595, upload-time = "2026-04-09T16:05:18.471Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/2448471196d8a73370aa2f23445455dc42712c21404081fcd7a03b9e0749/librt-0.9.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:756775d25ec8345b837ab52effee3ad2f3b2dfd6bbee3e3f029c517bd5d8f05a", size = 204354, upload-time = "2026-04-09T16:05:19.593Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5e/39fc4b153c78cfd2c8a2dcb32700f2d41d2312aa1050513183be4540930d/librt-0.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8f5d00b49818f4e2b1667db994488b045835e0ac16fe2f924f3871bd2b8ac5", size = 216238, upload-time = "2026-04-09T16:05:20.868Z" }, + { url = "https://files.pythonhosted.org/packages/d7/42/bc2d02d0fa7badfa63aa8d6dcd8793a9f7ef5a94396801684a51ed8d8287/librt-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c81aef782380f0f13ead670aae01825eb653b44b046aa0e5ebbb79f76ed4aa11", size = 230589, upload-time = "2026-04-09T16:05:22.305Z" }, + { url = "https://files.pythonhosted.org/packages/c8/7b/e2d95cc513866373692aa5edf98080d5602dd07cabfb9e5d2f70df2f25f7/librt-0.9.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66b58fed90a545328e80d575467244de3741e088c1af928f0b489ebec3ef3858", size = 224610, upload-time = "2026-04-09T16:05:23.647Z" }, + { url = "https://files.pythonhosted.org/packages/31/d5/6cec4607e998eaba57564d06a1295c21b0a0c8de76e4e74d699e627bd98c/librt-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e78fb7419e07d98c2af4b8567b72b3eaf8cb05caad642e9963465569c8b2d87e", size = 232558, upload-time = "2026-04-09T16:05:25.025Z" }, + { url = "https://files.pythonhosted.org/packages/95/8c/27f1d8d3aaf079d3eb26439bf0b32f1482340c3552e324f7db9dca858671/librt-0.9.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c3786f0f4490a5cd87f1ed6cefae833ad6b1060d52044ce0434a2e85893afd0", size = 225521, upload-time = "2026-04-09T16:05:26.311Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d8/1e0d43b1c329b416017619469b3c3801a25a6a4ef4a1c68332aeaa6f72ca/librt-0.9.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8494cfc61e03542f2d381e71804990b3931175a29b9278fdb4a5459948778dc2", size = 227789, upload-time = "2026-04-09T16:05:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/d3d842e88610fcd4c8eec7067b0c23ef2d7d3bff31496eded6a83b0f99be/librt-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:07cf11f769831186eeac424376e6189f20ace4f7263e2134bdb9757340d84d4d", size = 248616, upload-time = "2026-04-09T16:05:29.181Z" }, + { url = "https://files.pythonhosted.org/packages/ec/28/527df8ad0d1eb6c8bdfa82fc190f1f7c4cca5a1b6d7b36aeabf95b52d74d/librt-0.9.0-cp313-cp313-win32.whl", hash = "sha256:850d6d03177e52700af605fd60db7f37dcb89782049a149674d1a9649c2138fd", size = 56039, upload-time = "2026-04-09T16:05:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a7/413652ad0d92273ee5e30c000fc494b361171177c83e57c060ecd3c21538/librt-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:a5af136bfba820d592f86c67affcef9b3ff4d4360ac3255e341e964489b48519", size = 63264, upload-time = "2026-04-09T16:05:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0a/92c244309b774e290ddb15e93363846ae7aa753d9586b8aad511c5e6145b/librt-0.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:4c4d0440a3a8e31d962340c3e1cc3fc9ee7febd34c8d8f770d06adb947779ea5", size = 53728, upload-time = "2026-04-09T16:05:33.31Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c1/184e539543f06ea2912f4b92a5ffaede4f9b392689e3f00acbf8134bee92/librt-0.9.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:3f05d145df35dca5056a8bc3838e940efebd893a54b3e19b2dda39ceaa299bcb", size = 67830, upload-time = "2026-04-09T16:05:34.517Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/23399bdcb7afca819acacdef31b37ee59de261bd66b503a7995c03c4b0dc/librt-0.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1c587494461ebd42229d0f1739f3aa34237dd9980623ecf1be8d3bcba79f4499", size = 70280, upload-time = "2026-04-09T16:05:35.649Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0b/4542dc5a2b8772dbf92cafb9194701230157e73c14b017b6961a23598b03/librt-0.9.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0a2040f801406b93657a70b72fa12311063a319fee72ce98e1524da7200171f", size = 201925, upload-time = "2026-04-09T16:05:36.739Z" }, + { url = "https://files.pythonhosted.org/packages/31/d4/8ee7358b08fd0cfce051ef96695380f09b3c2c11b77c9bfbc367c921cce5/librt-0.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f38bc489037eca88d6ebefc9c4d41a4e07c8e8b4de5188a9e6d290273ad7ebb1", size = 212381, upload-time = "2026-04-09T16:05:38.043Z" }, + { url = "https://files.pythonhosted.org/packages/f2/94/a2025fe442abedf8b038038dab3dba942009ad42b38ea064a1a9e6094241/librt-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3fd278f5e6bf7c75ccd6d12344eb686cc020712683363b66f46ac79d37c799f", size = 227065, upload-time = "2026-04-09T16:05:39.394Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e9/b9fcf6afa909f957cfbbf918802f9dada1bd5d3c1da43d722fd6a310dc3f/librt-0.9.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fcbdf2a9ca24e87bbebb47f1fe34e531ef06f104f98c9ccfc953a3f3344c567a", size = 221333, upload-time = "2026-04-09T16:05:40.999Z" }, + { url = "https://files.pythonhosted.org/packages/ac/7c/ba54cd6aa6a3c8cd12757a6870e0c79a64b1e6327f5248dcff98423f4d43/librt-0.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e306d956cfa027fe041585f02a1602c32bfa6bb8ebea4899d373383295a6c62f", size = 229051, upload-time = "2026-04-09T16:05:42.605Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4b/8cfdbad314c8677a0148bf0b70591d6d18587f9884d930276098a235461b/librt-0.9.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:465814ab157986acb9dfa5ccd7df944be5eefc0d08d31ec6e8d88bc71251d845", size = 222492, upload-time = "2026-04-09T16:05:43.842Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d1/2eda69563a1a88706808decdce035e4b32755dbfbb0d05e1a65db9547ed1/librt-0.9.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:703f4ae36d6240bfe24f542bac784c7e4194ec49c3ba5a994d02891649e2d85b", size = 223849, upload-time = "2026-04-09T16:05:45.054Z" }, + { url = "https://files.pythonhosted.org/packages/04/44/b2ed37df6be5b3d42cfe36318e0598e80843d5c6308dd63d0bf4e0ce5028/librt-0.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3be322a15ee5e70b93b7a59cfd074614f22cc8c9ff18bd27f474e79137ea8d3b", size = 245001, upload-time = "2026-04-09T16:05:46.34Z" }, + { url = "https://files.pythonhosted.org/packages/47/e7/617e412426df89169dd2a9ed0cc8752d5763336252c65dbf945199915119/librt-0.9.0-cp314-cp314-win32.whl", hash = "sha256:b8da9f8035bb417770b1e1610526d87ad4fc58a2804dc4d79c53f6d2cf5a6eb9", size = 51799, upload-time = "2026-04-09T16:05:47.738Z" }, + { url = "https://files.pythonhosted.org/packages/24/ed/c22ca4db0ca3cbc285e4d9206108746beda561a9792289c3c31281d7e9df/librt-0.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:b8bd70d5d816566a580d193326912f4a76ec2d28a97dc4cd4cc831c0af8e330e", size = 59165, upload-time = "2026-04-09T16:05:49.198Z" }, + { url = "https://files.pythonhosted.org/packages/24/56/875398fafa4cbc8f15b89366fc3287304ddd3314d861f182a4b87595ace0/librt-0.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:fc5758e2b7a56532dc33e3c544d78cbaa9ecf0a0f2a2da2df882c1d6b99a317f", size = 49292, upload-time = "2026-04-09T16:05:50.362Z" }, + { url = "https://files.pythonhosted.org/packages/4c/61/bc448ecbf9b2d69c5cff88fe41496b19ab2a1cbda0065e47d4d0d51c0867/librt-0.9.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f24b90b0e0c8cc9491fb1693ae91fe17cb7963153a1946395acdbdd5818429a4", size = 70175, upload-time = "2026-04-09T16:05:51.564Z" }, + { url = "https://files.pythonhosted.org/packages/60/f2/c47bb71069a73e2f04e70acbd196c1e5cc411578ac99039a224b98920fd4/librt-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3fe56e80badb66fdcde06bef81bbaa5bfcf6fbd7aefb86222d9e369c38c6b228", size = 72951, upload-time = "2026-04-09T16:05:52.699Z" }, + { url = "https://files.pythonhosted.org/packages/29/19/0549df59060631732df758e8886d92088da5fdbedb35b80e4643664e8412/librt-0.9.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:527b5b820b47a09e09829051452bb0d1dd2122261254e2a6f674d12f1d793d54", size = 225864, upload-time = "2026-04-09T16:05:53.895Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f8/3b144396d302ac08e50f89e64452c38db84bc7b23f6c60479c5d3abd303c/librt-0.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d429bdd4ac0ab17c8e4a8af0ed2a7440b16eba474909ab357131018fe8c7e71", size = 241155, upload-time = "2026-04-09T16:05:55.191Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ce/ee67ec14581de4043e61d05786d2aed6c9b5338816b7859bcf07455c6a9f/librt-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7202bdcac47d3a708271c4304a474a8605a4a9a4a709e954bf2d3241140aa938", size = 252235, upload-time = "2026-04-09T16:05:56.549Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fa/0ead15daa2b293a54101550b08d4bafe387b7d4a9fc6d2b985602bae69b6/librt-0.9.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0d620e74897f8c2613b3c4e2e9c1e422eb46d2ddd07df540784d44117836af3", size = 244963, upload-time = "2026-04-09T16:05:57.858Z" }, + { url = "https://files.pythonhosted.org/packages/29/68/9fbf9a9aa704ba87689e40017e720aced8d9a4d2b46b82451d8142f91ec9/librt-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d69fc39e627908f4c03297d5a88d9284b73f4d90b424461e32e8c2485e21c283", size = 257364, upload-time = "2026-04-09T16:05:59.686Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8d/9d60869f1b6716c762e45f66ed945b1e5dd649f7377684c3b176ae424648/librt-0.9.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c2640e23d2b7c98796f123ffd95cf2022c7777aa8a4a3b98b36c570d37e85eee", size = 247661, upload-time = "2026-04-09T16:06:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/a5c365093962310bfdb4f6af256f191085078ffb529b3f0cbebb5b33ebe2/librt-0.9.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:451daa98463b7695b0a30aa56bf637831ea559e7b8101ac2ef6382e8eb15e29c", size = 248238, upload-time = "2026-04-09T16:06:02.537Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3c/2d34365177f412c9e19c0a29f969d70f5343f27634b76b765a54d8b27705/librt-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:928bd06eca2c2bbf4349e5b817f837509b0604342e65a502de1d50a7570afd15", size = 269457, upload-time = "2026-04-09T16:06:03.833Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/de45b239ea3bdf626f982a00c14bfcf2e12d261c510ba7db62c5969a27cd/librt-0.9.0-cp314-cp314t-win32.whl", hash = "sha256:a9c63e04d003bc0fb6a03b348018b9a3002f98268200e22cc80f146beac5dc40", size = 52453, upload-time = "2026-04-09T16:06:05.229Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f9/bfb32ae428aa75c0c533915622176f0a17d6da7b72b5a3c6363685914f70/librt-0.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f162af66a2ed3f7d1d161a82ca584efd15acd9c1cff190a373458c32f7d42118", size = 60044, upload-time = "2026-04-09T16:06:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/aa/47/7d70414bcdbb3bc1f458a8d10558f00bbfdb24e5a11740fc8197e12c3255/librt-0.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:a4b25c6c25cac5d0d9d6d6da855195b254e0021e513e0249f0e3b444dc6e0e61", size = 50009, upload-time = "2026-04-09T16:06:07.995Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/f5/a1bde3aa8c43524b0acaf3f72fb3d80a32dd29dbb42d7dc434f84584cdcc/llvmlite-0.47.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41270b0b1310717f717cf6f2a9c68d3c43bd7905c33f003825aebc361d0d1b17", size = 37232772, upload-time = "2026-03-31T18:28:12.198Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fb/76d88fc05ee1f9c1a6efe39eb493c4a727e5d1690412469017cd23bcb776/llvmlite-0.47.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f9d118bc1dd7623e0e65ca9ac485ec6dd543c3b77bc9928ddc45ebd34e1e30a7", size = 56275179, upload-time = "2026-03-31T18:28:15.725Z" }, + { url = "https://files.pythonhosted.org/packages/4d/08/29da7f36217abd56a0c389ef9a18bea47960826e691ced1a36c92c6ce93c/llvmlite-0.47.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ea5cfb04a6ab5b18e46be72b41b015975ba5980c4ddb41f1975b83e19031063", size = 55128632, upload-time = "2026-03-31T18:28:19.946Z" }, + { url = "https://files.pythonhosted.org/packages/df/f8/5e12e9ed447d65f04acf6fcf2d79cded2355640b5131a46cee4c99a5949d/llvmlite-0.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:166b896a2262a2039d5fc52df5ee1659bd1ccd081183df7a2fba1b74702dd5ea", size = 38138402, upload-time = "2026-03-31T18:28:23.327Z" }, + { url = "https://files.pythonhosted.org/packages/34/0b/b9d1911cfefa61399821dfb37f486d83e0f42630a8d12f7194270c417002/llvmlite-0.47.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74090f0dcfd6f24ebbef3f21f11e38111c4d7e6919b54c4416e1e357c3446b07", size = 37232770, upload-time = "2026-03-31T18:28:26.765Z" }, + { url = "https://files.pythonhosted.org/packages/46/27/5799b020e4cdfb25a7c951c06a96397c135efcdc21b78d853bbd9c814c7d/llvmlite-0.47.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca14f02e29134e837982497959a8e2193d6035235de1cb41a9cb2bd6da4eedbb", size = 56275177, upload-time = "2026-03-31T18:28:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/7e/51/48a53fedf01cb1f3f43ef200be17ebf83c8d9a04018d3783c1a226c342c2/llvmlite-0.47.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12a69d4bb05f402f30477e21eeabe81911e7c251cecb192bed82cd83c9db10d8", size = 55128631, upload-time = "2026-03-31T18:28:36.046Z" }, + { url = "https://files.pythonhosted.org/packages/a2/50/59227d06bdc96e23322713c381af4e77420949d8cd8a042c79e0043096cc/llvmlite-0.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:c37d6eb7aaabfa83ab9c2ff5b5cdb95a5e6830403937b2c588b7490724e05327", size = 38138400, upload-time = "2026-03-31T18:28:40.076Z" }, + { url = "https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:306a265f408c259067257a732c8e159284334018b4083a9e35f67d19792b164f", size = 37232769, upload-time = "2026-03-31T18:28:43.735Z" }, + { url = "https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd", size = 56275178, upload-time = "2026-03-31T18:28:48.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/a3b4a543185305a9bdf3d9759d53646ed96e55e7dfd43f53e7a421b8fbae/llvmlite-0.47.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:003bcf7fa579e14db59c1a1e113f93ab8a06b56a4be31c7f08264d1d4072d077", size = 55128632, upload-time = "2026-03-31T18:28:52.901Z" }, + { url = "https://files.pythonhosted.org/packages/2f/f5/d281ae0f79378a5a91f308ea9fdb9f9cc068fddd09629edc0725a5a8fde1/llvmlite-0.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:f3079f25bdc24cd9d27c4b2b5e68f5f60c4fdb7e8ad5ee2b9b006007558f9df7", size = 38138692, upload-time = "2026-03-31T18:28:57.147Z" }, + { url = "https://files.pythonhosted.org/packages/77/6f/4615353e016799f80fa52ccb270a843c413b22361fadda2589b2922fb9b0/llvmlite-0.47.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a3c6a735d4e1041808434f9d440faa3d78d9b4af2ee64d05a66f351883b6ceec", size = 37232771, upload-time = "2026-03-31T18:29:01.324Z" }, + { url = "https://files.pythonhosted.org/packages/31/b8/69f5565f1a280d032525878a86511eebed0645818492feeb169dfb20ae8e/llvmlite-0.47.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2699a74321189e812d476a43d6d7f652f51811e7b5aad9d9bba842a1c7927acb", size = 56275178, upload-time = "2026-03-31T18:29:05.748Z" }, + { url = "https://files.pythonhosted.org/packages/d6/da/b32cafcb926fb0ce2aa25553bf32cb8764af31438f40e2481df08884c947/llvmlite-0.47.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c6951e2b29930227963e53ee152441f0e14be92e9d4231852102d986c761e40", size = 55128632, upload-time = "2026-03-31T18:29:11.235Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/4898b44e4042c60fafcb1162dfb7014f6f15b1ec19bf29cfea6bf26df90d/llvmlite-0.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2e9adf8698d813a9a5efb2d4370caf344dbc1e145019851fee6a6f319ba760e", size = 38138695, upload-time = "2026-03-31T18:29:15.43Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d4/33c8af00f0bf6f552d74f3a054f648af2c5bc6bece97972f3bfadce4f5ec/llvmlite-0.47.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:de966c626c35c9dff5ae7bf12db25637738d0df83fc370cf793bc94d43d92d14", size = 37232773, upload-time = "2026-03-31T18:29:19.453Z" }, + { url = "https://files.pythonhosted.org/packages/64/1d/a760e993e0c0ba6db38d46b9f48f6c7dceb8ac838824997fb9e25f97bc04/llvmlite-0.47.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ddbccff2aeaff8670368340a158abefc032fe9b3ccf7d9c496639263d00151aa", size = 56275176, upload-time = "2026-03-31T18:29:24.149Z" }, + { url = "https://files.pythonhosted.org/packages/84/3b/e679bc3b29127182a7f4aa2d2e9e5bea42adb93fb840484147d59c236299/llvmlite-0.47.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4a7b778a2e144fc64468fb9bf509ac1226c9813a00b4d7afea5d988c4e22fca", size = 55128631, upload-time = "2026-03-31T18:29:29.536Z" }, + { url = "https://files.pythonhosted.org/packages/be/f7/19e2a09c62809c9e63bbd14ce71fb92c6ff7b7b3045741bb00c781efc3c9/llvmlite-0.47.0-cp314-cp314-win_amd64.whl", hash = "sha256:694e3c2cdc472ed2bd8bd4555ca002eec4310961dd58ef791d508f57b5cc4c94", size = 39153826, upload-time = "2026-03-31T18:29:33.681Z" }, + { url = "https://files.pythonhosted.org/packages/40/a1/581a8c707b5e80efdbbe1dd94527404d33fe50bceb71f39d5a7e11bd57b7/llvmlite-0.47.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:92ec8a169a20b473c1c54d4695e371bde36489fc1efa3688e11e99beba0abf9c", size = 37232772, upload-time = "2026-03-31T18:29:37.952Z" }, + { url = "https://files.pythonhosted.org/packages/11/03/16090dd6f74ba2b8b922276047f15962fbeea0a75d5601607edb301ba945/llvmlite-0.47.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa1cbd800edd3b20bc141521f7fd45a6185a5b84109aa6855134e81397ffe72b", size = 56275178, upload-time = "2026-03-31T18:29:42.58Z" }, + { url = "https://files.pythonhosted.org/packages/f5/cb/0abf1dd4c5286a95ffe0c1d8c67aec06b515894a0dd2ac97f5e27b82ab0b/llvmlite-0.47.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6725179b89f03b17dabe236ff3422cb8291b4c1bf40af152826dfd34e350ae8", size = 55128632, upload-time = "2026-03-31T18:29:46.939Z" }, + { url = "https://files.pythonhosted.org/packages/4f/79/d3bbab197e86e0ff4f9c07122895b66a3e0d024247fcff7f12c473cb36d9/llvmlite-0.47.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6842cf6f707ec4be3d985a385ad03f72b2d724439e118fcbe99b2929964f0453", size = 39153839, upload-time = "2026-03-31T18:29:51.004Z" }, +] + +[[package]] +name = "logical-unification" +version = "0.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "multipledispatch" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/5d/37673e494a4eed550785ad1268df0202e69aa081bcbf7c0aafd0a853b0fc/logical_unification-0.4.7.tar.gz", hash = "sha256:3d73b263a870827b3f52d89c94f3336afd7fcaecf1e0c67fa18e73025399775c", size = 13513, upload-time = "2025-10-20T21:42:24.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/d0/337b3c49cbe742ab5c118d14730fbc7b14b57d1a130d4f39efaa9ec04226/logical_unification-0.4.7-py3-none-any.whl", hash = "sha256:077f49e32693bc66a418f08c1de540f55b5a20f237ffb80ea85d99bfc6139c3b", size = 13469, upload-time = "2025-10-20T21:42:24.024Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[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-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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 = "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 = "minikanren" +version = "1.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cons" }, + { name = "etuples" }, + { name = "logical-unification" }, + { name = "multipledispatch" }, + { name = "toolz" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3d/bbab3c19771efbfafc52de98db8ad7cf3c2c444bbbd7241c2b06e9f305bc/minikanren-1.0.5.tar.gz", hash = "sha256:c030e3e9a3fa5f372f84b66966776a8dc63b16b98768b78be0401982b892e00d", size = 21699, upload-time = "2025-06-24T21:38:51.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/02/5e9ae831946db26f172e03e896fe83b07c5ca643df2b32c1b81557f0e77f/minikanren-1.0.5-py3-none-any.whl", hash = "sha256:22c24f4fdf009a56e30655787af45c90f0704bcc24e8d3e651378675b4bccb21", size = 24072, upload-time = "2025-06-24T21:38:50.113Z" }, +] + +[[package]] +name = "mistune" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467, upload-time = "2025-12-23T11:36:34.994Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598, upload-time = "2025-12-23T11:36:33.211Z" }, +] + +[[package]] +name = "ml-dtypes" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/3a/c5b855752a70267ff729c349e650263adb3c206c29d28cc8ea7ace30a1d5/ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c", size = 679735, upload-time = "2025-11-17T22:31:31.367Z" }, + { url = "https://files.pythonhosted.org/packages/41/79/7433f30ee04bd4faa303844048f55e1eb939131c8e5195a00a96a0939b64/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a", size = 5051883, upload-time = "2025-11-17T22:31:33.658Z" }, + { url = "https://files.pythonhosted.org/packages/10/b1/8938e8830b0ee2e167fc75a094dea766a1152bde46752cd9bfc57ee78a82/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270", size = 5030369, upload-time = "2025-11-17T22:31:35.595Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a3/51886727bd16e2f47587997b802dd56398692ce8c6c03c2e5bb32ecafe26/ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2", size = 210738, upload-time = "2025-11-17T22:31:37.43Z" }, + { url = "https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90", size = 679734, upload-time = "2025-11-17T22:31:39.223Z" }, + { url = "https://files.pythonhosted.org/packages/4f/cf/912146dfd4b5c0eea956836c01dcd2fce6c9c844b2691f5152aca196ce4f/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040", size = 5056165, upload-time = "2025-11-17T22:31:41.071Z" }, + { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, + { url = "https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb", size = 210742, upload-time = "2025-11-17T22:31:44.068Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c9/64230ef14e40aa3f1cb254ef623bf812735e6bec7772848d19131111ac0d/ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de", size = 160709, upload-time = "2025-11-17T22:31:46.557Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac", size = 676927, upload-time = "2025-11-17T22:31:48.182Z" }, + { url = "https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900", size = 5028464, upload-time = "2025-11-17T22:31:50.135Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff", size = 5009002, upload-time = "2025-11-17T22:31:52.001Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7", size = 212222, upload-time = "2025-11-17T22:31:53.742Z" }, + { url = "https://files.pythonhosted.org/packages/16/2e/9acc86985bfad8f2c2d30291b27cd2bb4c74cea08695bd540906ed744249/ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460", size = 160793, upload-time = "2025-11-17T22:31:55.358Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a1/4008f14bbc616cfb1ac5b39ea485f9c63031c4634ab3f4cf72e7541f816a/ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48", size = 676888, upload-time = "2025-11-17T22:31:56.907Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b7/dff378afc2b0d5a7d6cd9d3209b60474d9819d1189d347521e1688a60a53/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b", size = 5036993, upload-time = "2025-11-17T22:31:58.497Z" }, + { url = "https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d", size = 5010956, upload-time = "2025-11-17T22:31:59.931Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8b/200088c6859d8221454825959df35b5244fa9bdf263fd0249ac5fb75e281/ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328", size = 212224, upload-time = "2025-11-17T22:32:01.349Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/dfc3775cb36367816e678f69a7843f6f03bd4e2bcd79941e01ea960a068e/ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175", size = 160798, upload-time = "2025-11-17T22:32:02.864Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/e9ddb35fd1dd43b1106c20ced3f53c2e8e7fc7598c15638e9f80677f81d4/ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6", size = 702083, upload-time = "2025-11-17T22:32:04.08Z" }, + { url = "https://files.pythonhosted.org/packages/74/f5/667060b0aed1aa63166b22897fdf16dca9eb704e6b4bbf86848d5a181aa7/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d", size = 5354111, upload-time = "2025-11-17T22:32:05.546Z" }, + { url = "https://files.pythonhosted.org/packages/40/49/0f8c498a28c0efa5f5c95a9e374c83ec1385ca41d0e85e7cf40e5d519a21/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298", size = 5366453, upload-time = "2025-11-17T22:32:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/8c/27/12607423d0a9c6bbbcc780ad19f1f6baa2b68b18ce4bddcdc122c4c68dc9/ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6", size = 225612, upload-time = "2025-11-17T22:32:08.615Z" }, + { url = "https://files.pythonhosted.org/packages/e5/80/5a5929e92c72936d5b19872c5fb8fc09327c1da67b3b68c6a13139e77e20/ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1", size = 164145, upload-time = "2025-11-17T22:32:09.782Z" }, + { url = "https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22", size = 673781, upload-time = "2025-11-17T22:32:11.364Z" }, + { url = "https://files.pythonhosted.org/packages/04/f9/067b84365c7e83bda15bba2b06c6ca250ce27b20630b1128c435fb7a09aa/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465", size = 5036145, upload-time = "2025-11-17T22:32:12.783Z" }, + { url = "https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f", size = 5010230, upload-time = "2025-11-17T22:32:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56", size = 221032, upload-time = "2025-11-17T22:32:15.763Z" }, + { url = "https://files.pythonhosted.org/packages/76/a3/9c912fe6ea747bb10fe2f8f54d027eb265db05dfb0c6335e3e063e74e6e8/ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049", size = 163353, upload-time = "2025-11-17T22:32:16.932Z" }, + { url = "https://files.pythonhosted.org/packages/cd/02/48aa7d84cc30ab4ee37624a2fd98c56c02326785750cd212bc0826c2f15b/ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9", size = 702085, upload-time = "2025-11-17T22:32:18.175Z" }, + { url = "https://files.pythonhosted.org/packages/5a/e7/85cb99fe80a7a5513253ec7faa88a65306be071163485e9a626fce1b6e84/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7", size = 5355358, upload-time = "2025-11-17T22:32:19.7Z" }, + { url = "https://files.pythonhosted.org/packages/79/2b/a826ba18d2179a56e144aef69e57fb2ab7c464ef0b2111940ee8a3a223a2/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf", size = 5366332, upload-time = "2025-11-17T22:32:21.193Z" }, + { url = "https://files.pythonhosted.org/packages/84/44/f4d18446eacb20ea11e82f133ea8f86e2bf2891785b67d9da8d0ab0ef525/ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1", size = 236612, upload-time = "2025-11-17T22:32:22.579Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3f/3d42e9a78fe5edf792a83c074b13b9b770092a4fbf3462872f4303135f09/ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d", size = 168825, upload-time = "2025-11-17T22:32:23.766Z" }, +] + +[[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 = "multidict" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/4a/7874ca44a1c9b23796c767dd94159f6c17e31c0e7d090552a1c623247d82/multidict-6.2.0.tar.gz", hash = "sha256:0085b0afb2446e57050140240a8595846ed64d1cbd26cef936bfab3192c673b8", size = 71066, upload-time = "2025-03-17T16:55:54.689Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/ca/3ae4d9c9ba78e7bcb63e3f12974b8fa16b9a20de44e9785f5d291ccb823c/multidict-6.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b9f6392d98c0bd70676ae41474e2eecf4c7150cb419237a41f8f96043fcb81d1", size = 49238, upload-time = "2025-03-17T16:53:32.192Z" }, + { url = "https://files.pythonhosted.org/packages/25/a4/55e595d2df586e442c85b2610542d1e14def4c6f641761125d35fb38f87c/multidict-6.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3501621d5e86f1a88521ea65d5cad0a0834c77b26f193747615b7c911e5422d2", size = 29748, upload-time = "2025-03-17T16:53:34.057Z" }, + { url = "https://files.pythonhosted.org/packages/35/6f/09bc361a34bbf953e9897f69823f9c4b46aec0aaed6ec94ce63093ede317/multidict-6.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:32ed748ff9ac682eae7859790d3044b50e3076c7d80e17a44239683769ff485e", size = 30026, upload-time = "2025-03-17T16:53:35.378Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c7/5b51816f7c38049fc50786f46e63c009e6fecd1953fbbafa8bfe4e2eb39d/multidict-6.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc826b9a8176e686b67aa60fd6c6a7047b0461cae5591ea1dc73d28f72332a8a", size = 132393, upload-time = "2025-03-17T16:53:37.684Z" }, + { url = "https://files.pythonhosted.org/packages/1a/21/c51aca665afa93b397d2c47369f6c267193977611a55a7c9d8683dc095bc/multidict-6.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:214207dcc7a6221d9942f23797fe89144128a71c03632bf713d918db99bd36de", size = 139237, upload-time = "2025-03-17T16:53:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/2e/9b/a7b91f8ed63314e7a3c276b4ca90ae5d0267a584ca2e42106baa728622d6/multidict-6.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05fefbc3cddc4e36da209a5e49f1094bbece9a581faa7f3589201fd95df40e5d", size = 134920, upload-time = "2025-03-17T16:53:40.6Z" }, + { url = "https://files.pythonhosted.org/packages/c8/84/4b590a121b1009fe79d1ae5875b4aa9339d37d23e368dd3bcf5e36d27452/multidict-6.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e851e6363d0dbe515d8de81fd544a2c956fdec6f8a049739562286727d4a00c3", size = 129764, upload-time = "2025-03-17T16:53:41.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/de/831be406b5ab0dc0d25430ddf597c6ce1a2e23a4991363f1ca48f16fb817/multidict-6.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32c9b4878f48be3e75808ea7e499d6223b1eea6d54c487a66bc10a1871e3dc6a", size = 122121, upload-time = "2025-03-17T16:53:43.848Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2f/892334f4d3efc7cd11e3a64dc922a85611627380ee2de3d0627ac159a975/multidict-6.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7243c5a6523c5cfeca76e063efa5f6a656d1d74c8b1fc64b2cd1e84e507f7e2a", size = 135640, upload-time = "2025-03-17T16:53:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/6c/53/bf91c5fdede9406247dcbceaa9d7e7fa08e4d0e27fa3c76a0dab126bc6b2/multidict-6.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0e5a644e50ef9fb87878d4d57907f03a12410d2aa3b93b3acdf90a741df52c49", size = 129655, upload-time = "2025-03-17T16:53:47.322Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7a/f98e1c5d14c1bbbb83025a69da9a37344f7556c09fef39979cf62b464d60/multidict-6.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0dc25a3293c50744796e87048de5e68996104d86d940bb24bc3ec31df281b191", size = 140691, upload-time = "2025-03-17T16:53:48.634Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c9/af0ab78b53d5b769bc1fa751e53cc7356cef422bd1cf38ed653985a46ddf/multidict-6.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a49994481b99cd7dedde07f2e7e93b1d86c01c0fca1c32aded18f10695ae17eb", size = 135254, upload-time = "2025-03-17T16:53:49.866Z" }, + { url = "https://files.pythonhosted.org/packages/c9/53/28cc971b17e25487a089bcf720fe284478f264a6fc619427ddf7145fcb2b/multidict-6.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:641cf2e3447c9ecff2f7aa6e9eee9eaa286ea65d57b014543a4911ff2799d08a", size = 133620, upload-time = "2025-03-17T16:53:51.713Z" }, + { url = "https://files.pythonhosted.org/packages/b6/9a/d7637fbe1d5928b9f6a33ce36c2ff37e0aab9aa22f5fc9552fd75fe7f364/multidict-6.2.0-cp310-cp310-win32.whl", hash = "sha256:0c383d28857f66f5aebe3e91d6cf498da73af75fbd51cedbe1adfb85e90c0460", size = 27044, upload-time = "2025-03-17T16:53:53.859Z" }, + { url = "https://files.pythonhosted.org/packages/4e/11/04758cc18a51227dbb350a8a25c7db0620d63fb23db5b8d1f87762f05cbe/multidict-6.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a33273a541f1e1a8219b2a4ed2de355848ecc0254264915b9290c8d2de1c74e1", size = 29149, upload-time = "2025-03-17T16:53:55.076Z" }, + { url = "https://files.pythonhosted.org/packages/97/aa/879cf5581bd56c19f1bd2682ee4ecfd4085a404668d4ee5138b0a08eaf2a/multidict-6.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:84e87a7d75fa36839a3a432286d719975362d230c70ebfa0948549cc38bd5b46", size = 49125, upload-time = "2025-03-17T16:53:56.148Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d8/e6d47c166c13c48be8efb9720afe0f5cdc4da4687547192cbc3c03903041/multidict-6.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8de4d42dffd5ced9117af2ce66ba8722402541a3aa98ffdf78dde92badb68932", size = 29689, upload-time = "2025-03-17T16:53:57.381Z" }, + { url = "https://files.pythonhosted.org/packages/a4/20/f3f0a2ca142c81100b6d4cbf79505961b54181d66157615bba3955304442/multidict-6.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d91a230c7f8af86c904a5a992b8c064b66330544693fd6759c3d6162382ecf", size = 29975, upload-time = "2025-03-17T16:53:58.549Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2d/1724972c7aeb7aa1916a3276cb32f9c39e186456ee7ed621504e7a758322/multidict-6.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f6cad071960ba1914fa231677d21b1b4a3acdcce463cee41ea30bc82e6040cf", size = 135688, upload-time = "2025-03-17T16:53:59.653Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/ea54e7e245aaf0bb1c758578e5afba394ffccb8bd80d229a499b9b83f2b1/multidict-6.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f74f2fc51555f4b037ef278efc29a870d327053aba5cb7d86ae572426c7cccc", size = 142703, upload-time = "2025-03-17T16:54:01.552Z" }, + { url = "https://files.pythonhosted.org/packages/97/76/960dee0424f38c71eda54101ee1ca7bb47c5250ed02f7b3e8e50b1ce0603/multidict-6.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14ed9ed1bfedd72a877807c71113deac292bf485159a29025dfdc524c326f3e1", size = 138559, upload-time = "2025-03-17T16:54:02.973Z" }, + { url = "https://files.pythonhosted.org/packages/d0/35/969fd792e2e72801d80307f0a14f5b19c066d4a51d34dded22c71401527d/multidict-6.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac3fcf9a2d369bd075b2c2965544036a27ccd277fc3c04f708338cc57533081", size = 133312, upload-time = "2025-03-17T16:54:04.265Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b8/f96657a2f744d577cfda5a7edf9da04a731b80d3239eafbfe7ca4d944695/multidict-6.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fc6af8e39f7496047c7876314f4317736eac82bf85b54c7c76cf1a6f8e35d98", size = 125652, upload-time = "2025-03-17T16:54:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/35/9d/97696d052297d8e2e08195a25c7aae873a6186c147b7635f979edbe3acde/multidict-6.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f8cb1329f42fadfb40d6211e5ff568d71ab49be36e759345f91c69d1033d633", size = 139015, upload-time = "2025-03-17T16:54:07.791Z" }, + { url = "https://files.pythonhosted.org/packages/31/a0/5c106e28d42f20288c10049bc6647364287ba049dc00d6ae4f1584eb1bd1/multidict-6.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5389445f0173c197f4a3613713b5fb3f3879df1ded2a1a2e4bc4b5b9c5441b7e", size = 132437, upload-time = "2025-03-17T16:54:09.491Z" }, + { url = "https://files.pythonhosted.org/packages/55/57/d5c60c075fef73422ae3b8f914221485b9ff15000b2db657c03bd190aee0/multidict-6.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:94a7bb972178a8bfc4055db80c51efd24baefaced5e51c59b0d598a004e8305d", size = 144037, upload-time = "2025-03-17T16:54:11.189Z" }, + { url = "https://files.pythonhosted.org/packages/eb/56/a23f599c697a455bf65ecb0f69a5b052d6442c567d380ed423f816246824/multidict-6.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da51d8928ad8b4244926fe862ba1795f0b6e68ed8c42cd2f822d435db9c2a8f4", size = 138535, upload-time = "2025-03-17T16:54:12.453Z" }, + { url = "https://files.pythonhosted.org/packages/34/3a/a06ff9b5899090f4bbdbf09e237964c76cecfe75d2aa921e801356314017/multidict-6.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:063be88bd684782a0715641de853e1e58a2f25b76388538bd62d974777ce9bc2", size = 136885, upload-time = "2025-03-17T16:54:13.648Z" }, + { url = "https://files.pythonhosted.org/packages/d6/28/489c0eca1df3800cb5d0a66278d5dd2a4deae747a41d1cf553e6a4c0a984/multidict-6.2.0-cp311-cp311-win32.whl", hash = "sha256:52b05e21ff05729fbea9bc20b3a791c3c11da61649ff64cce8257c82a020466d", size = 27044, upload-time = "2025-03-17T16:54:16.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/b5/c7cd5ba9581add40bc743980f82426b90d9f42db0b56502011f1b3c929df/multidict-6.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1e2a2193d3aa5cbf5758f6d5680a52aa848e0cf611da324f71e5e48a9695cc86", size = 29145, upload-time = "2025-03-17T16:54:18.009Z" }, + { url = "https://files.pythonhosted.org/packages/a4/e2/0153a8db878aef9b2397be81e62cbc3b32ca9b94e0f700b103027db9d506/multidict-6.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:437c33561edb6eb504b5a30203daf81d4a9b727e167e78b0854d9a4e18e8950b", size = 49204, upload-time = "2025-03-17T16:54:19.193Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9d/5ccb3224a976d1286f360bb4e89e67b7cdfb87336257fc99be3c17f565d7/multidict-6.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9f49585f4abadd2283034fc605961f40c638635bc60f5162276fec075f2e37a4", size = 29807, upload-time = "2025-03-17T16:54:20.398Z" }, + { url = "https://files.pythonhosted.org/packages/62/32/ef20037f51b84b074a89bab5af46d4565381c3f825fc7cbfc19c1ee156be/multidict-6.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5dd7106d064d05896ce28c97da3f46caa442fe5a43bc26dfb258e90853b39b44", size = 30000, upload-time = "2025-03-17T16:54:21.845Z" }, + { url = "https://files.pythonhosted.org/packages/97/81/b0a7560bfc3ec72606232cd7e60159e09b9cf29e66014d770c1315868fa2/multidict-6.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e25b11a0417475f093d0f0809a149aff3943c2c56da50fdf2c3c88d57fe3dfbd", size = 131820, upload-time = "2025-03-17T16:54:23.404Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/768bfc0e41179fbccd3a22925329a11755b7fdd53bec66dbf6b8772f0bce/multidict-6.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac380cacdd3b183338ba63a144a34e9044520a6fb30c58aa14077157a033c13e", size = 136272, upload-time = "2025-03-17T16:54:24.636Z" }, + { url = "https://files.pythonhosted.org/packages/71/ac/fd2be3fe98ff54e7739448f771ba730d42036de0870737db9ae34bb8efe9/multidict-6.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61d5541f27533f803a941d3a3f8a3d10ed48c12cf918f557efcbf3cd04ef265c", size = 135233, upload-time = "2025-03-17T16:54:25.884Z" }, + { url = "https://files.pythonhosted.org/packages/93/76/1657047da771315911a927b364a32dafce4135b79b64208ce4ac69525c56/multidict-6.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:facaf11f21f3a4c51b62931feb13310e6fe3475f85e20d9c9fdce0d2ea561b87", size = 132861, upload-time = "2025-03-17T16:54:27.154Z" }, + { url = "https://files.pythonhosted.org/packages/19/a5/9f07ffb9bf68b8aaa406c2abee27ad87e8b62a60551587b8e59ee91aea84/multidict-6.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:095a2eabe8c43041d3e6c2cb8287a257b5f1801c2d6ebd1dd877424f1e89cf29", size = 122166, upload-time = "2025-03-17T16:54:28.417Z" }, + { url = "https://files.pythonhosted.org/packages/95/23/b5ce3318d9d6c8f105c3679510f9d7202980545aad8eb4426313bd8da3ee/multidict-6.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0cc398350ef31167e03f3ca7c19313d4e40a662adcb98a88755e4e861170bdd", size = 136052, upload-time = "2025-03-17T16:54:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5c/02cffec58ffe120873dce520af593415b91cc324be0345f534ad3637da4e/multidict-6.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7c611345bbe7cb44aabb877cb94b63e86f2d0db03e382667dbd037866d44b4f8", size = 130094, upload-time = "2025-03-17T16:54:31.137Z" }, + { url = "https://files.pythonhosted.org/packages/49/f3/3b19a83f4ebf53a3a2a0435f3e447aa227b242ba3fd96a92404b31fb3543/multidict-6.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8cd1a0644ccaf27e9d2f6d9c9474faabee21f0578fe85225cc5af9a61e1653df", size = 140962, upload-time = "2025-03-17T16:54:32.415Z" }, + { url = "https://files.pythonhosted.org/packages/cc/1a/c916b54fb53168c24cb6a3a0795fd99d0a59a0ea93fa9f6edeff5565cb20/multidict-6.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:89b3857652183b8206a891168af47bac10b970d275bba1f6ee46565a758c078d", size = 138082, upload-time = "2025-03-17T16:54:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/ef/1a/dcb7fb18f64b3727c61f432c1e1a0d52b3924016124e4bbc8a7d2e4fa57b/multidict-6.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:125dd82b40f8c06d08d87b3510beaccb88afac94e9ed4a6f6c71362dc7dbb04b", size = 136019, upload-time = "2025-03-17T16:54:35.086Z" }, + { url = "https://files.pythonhosted.org/packages/fb/02/7695485375106f5c542574f70e1968c391f86fa3efc9f1fd76aac0af7237/multidict-6.2.0-cp312-cp312-win32.whl", hash = "sha256:76b34c12b013d813e6cb325e6bd4f9c984db27758b16085926bbe7ceeaace626", size = 26676, upload-time = "2025-03-17T16:54:36.32Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f5/f147000fe1f4078160157b15b0790fff0513646b0f9b7404bf34007a9b44/multidict-6.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:0b183a959fb88ad1be201de2c4bdf52fa8e46e6c185d76201286a97b6f5ee65c", size = 28899, upload-time = "2025-03-17T16:54:37.583Z" }, + { url = "https://files.pythonhosted.org/packages/a4/6c/5df5590b1f9a821154589df62ceae247537b01ab26b0aa85997c35ca3d9e/multidict-6.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5c5e7d2e300d5cb3b2693b6d60d3e8c8e7dd4ebe27cd17c9cb57020cac0acb80", size = 49151, upload-time = "2025-03-17T16:54:38.756Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ca/c917fbf1be989cd7ea9caa6f87e9c33844ba8d5fbb29cd515d4d2833b84c/multidict-6.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:256d431fe4583c5f1e0f2e9c4d9c22f3a04ae96009b8cfa096da3a8723db0a16", size = 29803, upload-time = "2025-03-17T16:54:40.256Z" }, + { url = "https://files.pythonhosted.org/packages/22/19/d97086fc96f73acf36d4dbe65c2c4175911969df49c4e94ef082be59d94e/multidict-6.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a3c0ff89fe40a152e77b191b83282c9664357dce3004032d42e68c514ceff27e", size = 29947, upload-time = "2025-03-17T16:54:41.545Z" }, + { url = "https://files.pythonhosted.org/packages/e3/3b/203476b6e915c3f51616d5f87230c556e2f24b168c14818a3d8dae242b1b/multidict-6.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef7d48207926edbf8b16b336f779c557dd8f5a33035a85db9c4b0febb0706817", size = 130369, upload-time = "2025-03-17T16:54:43.166Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4f/67470007cf03b2bb6df8ae6d716a8eeb0a7d19e0c8dba4e53fa338883bca/multidict-6.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c099d3899b14e1ce52262eb82a5f5cb92157bb5106bf627b618c090a0eadc", size = 135231, upload-time = "2025-03-17T16:54:44.572Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f5/7a5ce64dc9a3fecc7d67d0b5cb9c262c67e0b660639e5742c13af63fd80f/multidict-6.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e16e7297f29a544f49340012d6fc08cf14de0ab361c9eb7529f6a57a30cbfda1", size = 133634, upload-time = "2025-03-17T16:54:45.998Z" }, + { url = "https://files.pythonhosted.org/packages/05/93/ab2931907e318c0437a4cd156c9cfff317ffb33d99ebbfe2d64200a870f7/multidict-6.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:042028348dc5a1f2be6c666437042a98a5d24cee50380f4c0902215e5ec41844", size = 131349, upload-time = "2025-03-17T16:54:47.837Z" }, + { url = "https://files.pythonhosted.org/packages/54/aa/ab8eda83a6a85f5b4bb0b1c28e62b18129b14519ef2e0d4cfd5f360da73c/multidict-6.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08549895e6a799bd551cf276f6e59820aa084f0f90665c0f03dd3a50db5d3c48", size = 120861, upload-time = "2025-03-17T16:54:49.201Z" }, + { url = "https://files.pythonhosted.org/packages/15/2f/7d08ea7c5d9f45786893b4848fad59ec8ea567367d4234691a721e4049a1/multidict-6.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ccfd74957ef53fa7380aaa1c961f523d582cd5e85a620880ffabd407f8202c0", size = 134611, upload-time = "2025-03-17T16:54:50.811Z" }, + { url = "https://files.pythonhosted.org/packages/8b/07/387047bb1eac563981d397a7f85c75b306df1fff3c20b90da5a6cf6e487e/multidict-6.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83b78c680d4b15d33042d330c2fa31813ca3974197bddb3836a5c635a5fd013f", size = 128955, upload-time = "2025-03-17T16:54:52.48Z" }, + { url = "https://files.pythonhosted.org/packages/8d/6e/7ae18f764a5282c2d682f1c90c6b2a0f6490327730170139a7a63bf3bb20/multidict-6.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b4c153863dd6569f6511845922c53e39c8d61f6e81f228ad5443e690fca403de", size = 139759, upload-time = "2025-03-17T16:54:53.877Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f4/c1b3b087b9379b9e56229bcf6570b9a963975c205a5811ac717284890598/multidict-6.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:98aa8325c7f47183b45588af9c434533196e241be0a4e4ae2190b06d17675c02", size = 136426, upload-time = "2025-03-17T16:54:56.506Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0e/ef7b39b161ffd40f9e25dd62e59644b2ccaa814c64e9573f9bc721578419/multidict-6.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e658d1373c424457ddf6d55ec1db93c280b8579276bebd1f72f113072df8a5d", size = 134648, upload-time = "2025-03-17T16:54:57.896Z" }, + { url = "https://files.pythonhosted.org/packages/37/5c/7905acd0ca411c97bcae62ab167d9922f0c5a1d316b6d3af875d4bda3551/multidict-6.2.0-cp313-cp313-win32.whl", hash = "sha256:3157126b028c074951839233647bd0e30df77ef1fedd801b48bdcad242a60f4e", size = 26680, upload-time = "2025-03-17T16:54:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/89/36/96b071d1dad6ac44fe517e4250329e753787bb7a63967ef44bb9b3a659f6/multidict-6.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:2e87f1926e91855ae61769ba3e3f7315120788c099677e0842e697b0bfb659f2", size = 28942, upload-time = "2025-03-17T16:55:00.813Z" }, + { url = "https://files.pythonhosted.org/packages/f5/05/d686cd2a12d648ecd434675ee8daa2901a80f477817e89ab3b160de5b398/multidict-6.2.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:2529ddbdaa424b2c6c2eb668ea684dd6b75b839d0ad4b21aad60c168269478d7", size = 50807, upload-time = "2025-03-17T16:55:02.162Z" }, + { url = "https://files.pythonhosted.org/packages/4c/1f/c7db5aac8fea129fa4c5a119e3d279da48d769138ae9624d1234aa01a06f/multidict-6.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:13551d0e2d7201f0959725a6a769b6f7b9019a168ed96006479c9ac33fe4096b", size = 30474, upload-time = "2025-03-17T16:55:04.097Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/1fb27514f4d73cea165429dcb7d90cdc4a45445865832caa0c50dd545420/multidict-6.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d1996ee1330e245cd3aeda0887b4409e3930524c27642b046e4fae88ffa66c5e", size = 30841, upload-time = "2025-03-17T16:55:06.098Z" }, + { url = "https://files.pythonhosted.org/packages/d6/6b/9487169e549a23c8958edbb332afaf1ab55d61f0c03cb758ee07ff8f74fb/multidict-6.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c537da54ce4ff7c15e78ab1292e5799d0d43a2108e006578a57f531866f64025", size = 148658, upload-time = "2025-03-17T16:55:07.556Z" }, + { url = "https://files.pythonhosted.org/packages/d7/22/79ebb2e4f70857c94999ce195db76886ae287b1b6102da73df24dcad4903/multidict-6.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f249badb360b0b4d694307ad40f811f83df4da8cef7b68e429e4eea939e49dd", size = 151988, upload-time = "2025-03-17T16:55:09.141Z" }, + { url = "https://files.pythonhosted.org/packages/49/5d/63b17f3c1a2861587d26705923a94eb6b2600e5222d6b0d513bce5a78720/multidict-6.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48d39b1824b8d6ea7de878ef6226efbe0773f9c64333e1125e0efcfdd18a24c7", size = 148432, upload-time = "2025-03-17T16:55:11.089Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/55204eec45c4280fa431c11494ad64d6da0dc89af76282fc6467432360a0/multidict-6.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b99aac6bb2c37db336fa03a39b40ed4ef2818bf2dfb9441458165ebe88b793af", size = 143161, upload-time = "2025-03-17T16:55:12.625Z" }, + { url = "https://files.pythonhosted.org/packages/97/e6/202b2cf5af161228767acab8bc49e73a91f4a7de088c9c71f3c02950a030/multidict-6.2.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bfa8bc649783e703263f783f73e27fef8cd37baaad4389816cf6a133141331", size = 136820, upload-time = "2025-03-17T16:55:14.073Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/dbedae0e94c7edc48fddef0c39483f2313205d9bc566fd7f11777b168616/multidict-6.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2c00ad31fbc2cbac85d7d0fcf90853b2ca2e69d825a2d3f3edb842ef1544a2c", size = 150875, upload-time = "2025-03-17T16:55:15.625Z" }, + { url = "https://files.pythonhosted.org/packages/f3/04/38ccf25d4bf8beef76a22bad7d9833fd088b4594c9765fe6fede39aa6c89/multidict-6.2.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0d57a01a2a9fa00234aace434d8c131f0ac6e0ac6ef131eda5962d7e79edfb5b", size = 142050, upload-time = "2025-03-17T16:55:17.186Z" }, + { url = "https://files.pythonhosted.org/packages/9e/89/4f6b43386e7b79a4aad560d751981a0a282a1943c312ac72f940d7cf8f9f/multidict-6.2.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:abf5b17bc0cf626a8a497d89ac691308dbd825d2ac372aa990b1ca114e470151", size = 154117, upload-time = "2025-03-17T16:55:19.115Z" }, + { url = "https://files.pythonhosted.org/packages/24/e3/3dde5b193f86d30ad6400bd50e116b0df1da3f0c7d419661e3bd79e5ad86/multidict-6.2.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:f7716f7e7138252d88607228ce40be22660d6608d20fd365d596e7ca0738e019", size = 149408, upload-time = "2025-03-17T16:55:20.689Z" }, + { url = "https://files.pythonhosted.org/packages/df/b2/ec1e27e8e3da12fcc9053e1eae2f6b50faa8708064d83ea25aa7fb77ffd2/multidict-6.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d5a36953389f35f0a4e88dc796048829a2f467c9197265504593f0e420571547", size = 145767, upload-time = "2025-03-17T16:55:22.271Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8e/c07a648a9d592fa9f3a19d1c7e1c7738ba95aff90db967a5a09cff1e1f37/multidict-6.2.0-cp313-cp313t-win32.whl", hash = "sha256:e653d36b1bf48fa78c7fcebb5fa679342e025121ace8c87ab05c1cefd33b34fc", size = 28950, upload-time = "2025-03-17T16:55:23.807Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a9/bebb5485b94d7c09831638a4df9a1a924c32431a750723f0bf39cd16a787/multidict-6.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ca23db5fb195b5ef4fd1f77ce26cadefdf13dba71dab14dadd29b34d457d7c44", size = 32001, upload-time = "2025-03-17T16:55:25.184Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fd/b247aec6add5601956d440488b7f23151d8343747e82c038af37b28d6098/multidict-6.2.0-py3-none-any.whl", hash = "sha256:5d26547423e5e71dcc562c4acdc134b900640a39abd9066d7326a7cc2324c530", size = 10266, upload-time = "2025-03-17T16:55:52.771Z" }, +] + +[[package]] +name = "multipledispatch" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/3e/a62c3b824c7dec33c4a1578bcc842e6c30300051033a4e5975ed86cc2536/multipledispatch-1.0.0.tar.gz", hash = "sha256:5c839915465c68206c3e9c473357908216c28383b425361e5d144594bf85a7e0", size = 12385, upload-time = "2023-06-27T16:45:11.074Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl", hash = "sha256:0c53cd8b077546da4e48869f49b13164bebafd0c2a5afceb6bb6a316e7fb46e4", size = 12818, upload-time = "2023-06-27T16:45:09.418Z" }, +] + +[[package]] +name = "mypy" +version = "1.20.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "librt", marker = "platform_python_implementation != 'PyPy' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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 = "nbclient" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554, upload-time = "2025-12-23T07:45:46.369Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465, upload-time = "2025-12-23T07:45:44.51Z" }, +] + +[[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 = "nbsphinx" +version = "0.9.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/d1/82081750f8a78ad0399c6ed831d42623b891904e8e7b8a75878225cf1dce/nbsphinx-0.9.8.tar.gz", hash = "sha256:d0765908399a8ee2b57be7ae881cf2ea58d66db3af7bbf33e6eb48f83bea5495", size = 417469, upload-time = "2025-11-28T17:41:02.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/78/843bcf0cf31f88d2f8a9a063d2d80817b1901657d83d65b89b3aa835732e/nbsphinx-0.9.8-py3-none-any.whl", hash = "sha256:92d95ee91784e56bc633b60b767a6b6f23a0445f891e24641ce3c3f004759ccf", size = 31961, upload-time = "2025-11-28T17:41:00.796Z" }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +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.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +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 = "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 = "numba" +version = "0.65.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1b/3c5a7daf683a95465bf23504bcd1a2d5db8cd5e5e276ca87505d020dffe9/numba-0.65.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9d993ed0a257aa4116e6f553f114004bcfdee540c7276ab8ea48f650d514c452", size = 2680870, upload-time = "2026-04-24T02:02:10.623Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a4/1831836814018a898e7d252aebe09c0f3ce1f26d145b68264b4ae0be6822/numba-0.65.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f098109f361681e57295f7e84d8ab2426902539a141811de0703ace52826981", size = 3739780, upload-time = "2026-04-24T02:02:13.097Z" }, + { url = "https://files.pythonhosted.org/packages/9c/1b/a813ddc81def09e257d2b1f67521982ce4b06204a87268796ffc8187271c/numba-0.65.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973fd8173f2312815e6b7aaae887c4ce8a817eeff46a4f8840b828305b75bc95", size = 3446722, upload-time = "2026-04-24T02:02:15.083Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/ee1d8b3becda384fe0552221641e05aa668a35e8a77470db4db7f6475000/numba-0.65.1-cp310-cp310-win_amd64.whl", hash = "sha256:c63aa0c4193694026452da55d0ef9d85156c1a7a333454c103bb30dec81b7bf8", size = 2747539, upload-time = "2026-04-24T02:02:16.79Z" }, + { url = "https://files.pythonhosted.org/packages/96/b3/650500c2eab4534d98e9166f4298e0f3c69c742afdf24e6eabccd1f16ad8/numba-0.65.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:7020d74b19cdb8cff16506542fdd510756e28c5e7f3bd0b7f574f0f42272fcd9", size = 2680563, upload-time = "2026-04-24T02:02:18.414Z" }, + { url = "https://files.pythonhosted.org/packages/44/0b/0615dbedb98f5b32a35a53290fbdc6e22306968109278d7e58df82d7a9f6/numba-0.65.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f80ed83774b5173abd6581cd8d2165d1d38e13d2e5c8155c0c0b421784745420", size = 3745018, upload-time = "2026-04-24T02:02:20.252Z" }, + { url = "https://files.pythonhosted.org/packages/49/aa/4361698f35bf63bff67dfe6c90493731177f48ede954f77b0588731537bc/numba-0.65.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7ed425a43b0a5f9772f2f4e2dd0bbd12eabecae1af0b24efcfd4e053f012aac6", size = 3450962, upload-time = "2026-04-24T02:02:22.449Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9a/af61ec03b3116c161fd7a06b9e8a265729a8718458333e8ffbb06d9a3978/numba-0.65.1-cp311-cp311-win_amd64.whl", hash = "sha256:df40a5028a975b9ea66f6a2a3f7abbdbd541a863070e34ed367aff21141248e4", size = 2747417, upload-time = "2026-04-24T02:02:24.43Z" }, + { url = "https://files.pythonhosted.org/packages/57/bc/76f8f8c5cf9adee47fdb7bbb03be8900f76f902d451d7477cf12b845e1de/numba-0.65.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac3f1e77c352dd0ea9712732c2d8f9ca507717435eec5b5013bf138ac33c4a08", size = 2681371, upload-time = "2026-04-24T02:02:26.105Z" }, + { url = "https://files.pythonhosted.org/packages/69/47/a415af0283e4db0398104c6d1c11c9861a98dc67a7aa442a7769ed5d6196/numba-0.65.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:52bc6f3ceb8fcaff9b2ae26b4c6b1e9fee39db8d355534c0fe4f39a901246b84", size = 3802467, upload-time = "2026-04-24T02:02:27.712Z" }, + { url = "https://files.pythonhosted.org/packages/46/36/246f73ec99cfeab2f2cb2ce7d4218766cc36a2da418901223f4f4da9c813/numba-0.65.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90ca10b3463bae0bd70589726fe3c77d01d6b5fc86bee54bcdf9fb6b47c28977", size = 3502628, upload-time = "2026-04-24T02:02:29.763Z" }, + { url = "https://files.pythonhosted.org/packages/db/9e/3c679b2ee078425b9e99a91e44f8d132a6830d8ccce5227bc5e9181aeed8/numba-0.65.1-cp312-cp312-win_amd64.whl", hash = "sha256:5971c632be2a2351500431f46213821dba8d02b18a9f7d02fd36bd2743e41a6a", size = 2750611, upload-time = "2026-04-24T02:02:31.477Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/14a4579049c1eb673afd0de0cb4842982acd55b9ce2643e763db858bcea0/numba-0.65.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1735c15c1134a5108b4d6a5c77fc0947924ea066a738dc09a52008c13df9cad3", size = 2681344, upload-time = "2026-04-24T02:02:33.65Z" }, + { url = "https://files.pythonhosted.org/packages/a0/22/b8d873f6466b20aa563fc9b33acd48dec89a07803ddaa2f1c8ca1cd33126/numba-0.65.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c09f49117ef255e1f1c6dad0c7a1ed39868243862a73be5706793241a3755f1b", size = 3810619, upload-time = "2026-04-24T02:02:36.041Z" }, + { url = "https://files.pythonhosted.org/packages/62/08/e16a8b5d9a018962ebb5c66be662317cde32b9f5dab08441f90bed5522fb/numba-0.65.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:594a8680b3fadac99e97e489b1fd89007177e5336713745c3b769528c635a464", size = 3509783, upload-time = "2026-04-24T02:02:38.245Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a5/03c970d57f4c1741354837353ce39fb5206952ae1dba8922d29c86f64805/numba-0.65.1-cp313-cp313-win_amd64.whl", hash = "sha256:85be74c0d036842699a30058f82fb88fc5ffdc59f7615cab5792ea92914c9b62", size = 2750534, upload-time = "2026-04-24T02:02:39.903Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2e/8aed9b726d9ba5f11ad287645fd479e88278db3060a25cb1225d730eb2b7/numba-0.65.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:33f5eb68eb1c843511615d14663ce60258525d6a4c65ab040e2c2b0c4cf17450", size = 2681554, upload-time = "2026-04-24T02:02:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/87/96/f3eb235fafa82a34e2ab5dd7dc9ffff998ebf5f0bbc23fa56a96aeb44da6/numba-0.65.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71e73029bf53a62cc6afcf96be4bd942290d8b4c55f0a454fb536158115790f7", size = 3779602, upload-time = "2026-04-24T02:02:43.726Z" }, + { url = "https://files.pythonhosted.org/packages/09/90/b0f09b48752d23640b8284f22aa597737e8adaddc7fbfacc4708b7f73a4c/numba-0.65.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a07635e0be926b9bdbffb09137c230fb13f6ec0e564914ba937cee12ce3eb35", size = 3479532, upload-time = "2026-04-24T02:02:45.427Z" }, + { url = "https://files.pythonhosted.org/packages/56/46/3f7fc04fb853559e74b210e0b62c19974ec844cefec611f9e535f4da3761/numba-0.65.1-cp314-cp314-win_amd64.whl", hash = "sha256:2a20fcdabdefbdacf88d85caf70c3b18c4bcb7ebb8f82e6a19486383dd26ab63", size = 2752637, upload-time = "2026-04-24T02:02:47.664Z" }, + { url = "https://files.pythonhosted.org/packages/81/7b/c1a341a9067367778f4152a5f01061cf281fb09582c92c510ec4918cabf6/numba-0.65.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:548dd4b3a4508d5062768d1514b2cd7b015f9a25ec7af651c50dee243965e652", size = 2684600, upload-time = "2026-04-24T02:02:49.653Z" }, + { url = "https://files.pythonhosted.org/packages/03/36/98ddbcf3e4f04a6dd07e1c67249955920579ba4af6bb6868e3088f4ed282/numba-0.65.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:78abc28feff2c2ff8307fff3975b6438352759c9acb797ecd6b1fb6e7e39e31d", size = 3817198, upload-time = "2026-04-24T02:02:51.266Z" }, + { url = "https://files.pythonhosted.org/packages/a3/83/0dad21057ece5a835599f5d24099b091703995e23dbbf894f259e91c010b/numba-0.65.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee7676cb389555805f9b9a1840cbcd1ea6c8bd5376ab6918e3a29c5ea1dbda20", size = 3533862, upload-time = "2026-04-24T02:02:52.987Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/8be7118ffd4c8440881046eac3d0982cc5ab42909508cf5d67024d62a2e4/numba-0.65.1-cp314-cp314t-win_amd64.whl", hash = "sha256:20609346e3bd75204950dcbbfe383a8d7dbf4902f442aedbf00f97fef4aa8f38", size = 2758237, upload-time = "2026-04-24T02:02:54.612Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +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.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +sdist = { url = "https://files.pythonhosted.org/packages/10/8b/c265f4823726ab832de836cdd184d0986dcf94480f81e8739692a7ac7af2/numpy-2.4.3.tar.gz", hash = "sha256:483a201202b73495f00dbc83796c6ae63137a9bdade074f7648b3e32613412dd", size = 20727743, upload-time = "2026-03-09T07:58:53.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/51/5093a2df15c4dc19da3f79d1021e891f5dcf1d9d1db6ba38891d5590f3fe/numpy-2.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33b3bf58ee84b172c067f56aeadc7ee9ab6de69c5e800ab5b10295d54c581adb", size = 16957183, upload-time = "2026-03-09T07:55:57.774Z" }, + { url = "https://files.pythonhosted.org/packages/b5/7c/c061f3de0630941073d2598dc271ac2f6cbcf5c83c74a5870fea07488333/numpy-2.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ba7b51e71c05aa1f9bc3641463cd82308eab40ce0d5c7e1fd4038cbf9938147", size = 14968734, upload-time = "2026-03-09T07:56:00.494Z" }, + { url = "https://files.pythonhosted.org/packages/ef/27/d26c85cbcd86b26e4f125b0668e7a7c0542d19dd7d23ee12e87b550e95b5/numpy-2.4.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1988292870c7cb9d0ebb4cc96b4d447513a9644801de54606dc7aabf2b7d920", size = 5475288, upload-time = "2026-03-09T07:56:02.857Z" }, + { url = "https://files.pythonhosted.org/packages/2b/09/3c4abbc1dcd8010bf1a611d174c7aa689fc505585ec806111b4406f6f1b1/numpy-2.4.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:23b46bb6d8ecb68b58c09944483c135ae5f0e9b8d8858ece5e4ead783771d2a9", size = 6805253, upload-time = "2026-03-09T07:56:04.53Z" }, + { url = "https://files.pythonhosted.org/packages/21/bc/e7aa3f6817e40c3f517d407742337cbb8e6fc4b83ce0b55ab780c829243b/numpy-2.4.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a016db5c5dba78fa8fe9f5d80d6708f9c42ab087a739803c0ac83a43d686a470", size = 15969479, upload-time = "2026-03-09T07:56:06.638Z" }, + { url = "https://files.pythonhosted.org/packages/78/51/9f5d7a41f0b51649ddf2f2320595e15e122a40610b233d51928dd6c92353/numpy-2.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:715de7f82e192e8cae5a507a347d97ad17598f8e026152ca97233e3666daaa71", size = 16901035, upload-time = "2026-03-09T07:56:09.405Z" }, + { url = "https://files.pythonhosted.org/packages/64/6e/b221dd847d7181bc5ee4857bfb026182ef69499f9305eb1371cbb1aea626/numpy-2.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2ddb7919366ee468342b91dea2352824c25b55814a987847b6c52003a7c97f15", size = 17325657, upload-time = "2026-03-09T07:56:12.067Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b8/8f3fd2da596e1063964b758b5e3c970aed1949a05200d7e3d46a9d46d643/numpy-2.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a315e5234d88067f2d97e1f2ef670a7569df445d55400f1e33d117418d008d52", size = 18635512, upload-time = "2026-03-09T07:56:14.629Z" }, + { url = "https://files.pythonhosted.org/packages/5c/24/2993b775c37e39d2f8ab4125b44337ab0b2ba106c100980b7c274a22bee7/numpy-2.4.3-cp311-cp311-win32.whl", hash = "sha256:2b3f8d2c4589b1a2028d2a770b0fc4d1f332fb5e01521f4de3199a896d158ddd", size = 6238100, upload-time = "2026-03-09T07:56:17.243Z" }, + { url = "https://files.pythonhosted.org/packages/76/1d/edccf27adedb754db7c4511d5eac8b83f004ae948fe2d3509e8b78097d4c/numpy-2.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:77e76d932c49a75617c6d13464e41203cd410956614d0a0e999b25e9e8d27eec", size = 12609816, upload-time = "2026-03-09T07:56:19.089Z" }, + { url = "https://files.pythonhosted.org/packages/92/82/190b99153480076c8dce85f4cfe7d53ea84444145ffa54cb58dcd460d66b/numpy-2.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:eb610595dd91560905c132c709412b512135a60f1851ccbd2c959e136431ff67", size = 10485757, upload-time = "2026-03-09T07:56:21.753Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ed/6388632536f9788cea23a3a1b629f25b43eaacd7d7377e5d6bc7b9deb69b/numpy-2.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61b0cbabbb6126c8df63b9a3a0c4b1f44ebca5e12ff6997b80fcf267fb3150ef", size = 16669628, upload-time = "2026-03-09T07:56:24.252Z" }, + { url = "https://files.pythonhosted.org/packages/74/1b/ee2abfc68e1ce728b2958b6ba831d65c62e1b13ce3017c13943f8f9b5b2e/numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7395e69ff32526710748f92cd8c9849b361830968ea3e24a676f272653e8983e", size = 14696872, upload-time = "2026-03-09T07:56:26.991Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d1/780400e915ff5638166f11ca9dc2c5815189f3d7cf6f8759a1685e586413/numpy-2.4.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:abdce0f71dcb4a00e4e77f3faf05e4616ceccfe72ccaa07f47ee79cda3b7b0f4", size = 5203489, upload-time = "2026-03-09T07:56:29.414Z" }, + { url = "https://files.pythonhosted.org/packages/0b/bb/baffa907e9da4cc34a6e556d6d90e032f6d7a75ea47968ea92b4858826c4/numpy-2.4.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:48da3a4ee1336454b07497ff7ec83903efa5505792c4e6d9bf83d99dc07a1e18", size = 6550814, upload-time = "2026-03-09T07:56:32.225Z" }, + { url = "https://files.pythonhosted.org/packages/7b/12/8c9f0c6c95f76aeb20fc4a699c33e9f827fa0d0f857747c73bb7b17af945/numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e3bef222ad6b052280311d1d60db8e259e4947052c3ae7dd6817451fc8a4c5", size = 15666601, upload-time = "2026-03-09T07:56:34.461Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/cc665495e4d57d0aa6fbcc0aa57aa82671dfc78fbf95fe733ed86d98f52a/numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7dd01a46700b1967487141a66ac1a3cf0dd8ebf1f08db37d46389401512ca97", size = 16621358, upload-time = "2026-03-09T07:56:36.852Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/b4ecb7224af1065c3539f5ecfff879d090de09608ad1008f02c05c770cb3/numpy-2.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:76f0f283506c28b12bba319c0fab98217e9f9b54e6160e9c79e9f7348ba32e9c", size = 17016135, upload-time = "2026-03-09T07:56:39.337Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b1/6a88e888052eed951afed7a142dcdf3b149a030ca59b4c71eef085858e43/numpy-2.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737f630a337364665aba3b5a77e56a68cc42d350edd010c345d65a3efa3addcc", size = 18345816, upload-time = "2026-03-09T07:56:42.31Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8f/103a60c5f8c3d7fc678c19cd7b2476110da689ccb80bc18050efbaeae183/numpy-2.4.3-cp312-cp312-win32.whl", hash = "sha256:26952e18d82a1dbbc2f008d402021baa8d6fc8e84347a2072a25e08b46d698b9", size = 5960132, upload-time = "2026-03-09T07:56:44.851Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7c/f5ee1bf6ed888494978046a809df2882aad35d414b622893322df7286879/numpy-2.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:65f3c2455188f09678355f5cae1f959a06b778bc66d535da07bf2ef20cd319d5", size = 12316144, upload-time = "2026-03-09T07:56:47.057Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/8d1cb3f7a00f2fb6394140e7e6623696e54c6318a9d9691bb4904672cf42/numpy-2.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:2abad5c7fef172b3377502bde47892439bae394a71bc329f31df0fd829b41a9e", size = 10220364, upload-time = "2026-03-09T07:56:49.849Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d0/1fe47a98ce0df229238b77611340aff92d52691bcbc10583303181abf7fc/numpy-2.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b346845443716c8e542d54112966383b448f4a3ba5c66409771b8c0889485dd3", size = 16665297, upload-time = "2026-03-09T07:56:52.296Z" }, + { url = "https://files.pythonhosted.org/packages/27/d9/4e7c3f0e68dfa91f21c6fb6cf839bc829ec920688b1ce7ec722b1a6202fb/numpy-2.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2629289168f4897a3c4e23dc98d6f1731f0fc0fe52fb9db19f974041e4cc12b9", size = 14691853, upload-time = "2026-03-09T07:56:54.992Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/bd096b13a87549683812b53ab211e6d413497f84e794fb3c39191948da97/numpy-2.4.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bb2e3cf95854233799013779216c57e153c1ee67a0bf92138acca0e429aefaee", size = 5198435, upload-time = "2026-03-09T07:56:57.184Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/687722910b5a5601de2135c891108f51dfc873d8e43c8ed9f4ebb440b4a2/numpy-2.4.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:7f3408ff897f8ab07a07fbe2823d7aee6ff644c097cc1f90382511fe982f647f", size = 6546347, upload-time = "2026-03-09T07:56:59.531Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/7971c4e98d86c564750393fab8d7d83d0a9432a9d78bb8a163a6dc59967a/numpy-2.4.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:decb0eb8a53c3b009b0962378065589685d66b23467ef5dac16cbe818afde27f", size = 15664626, upload-time = "2026-03-09T07:57:01.385Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/7daecbea84ec935b7fc732e18f532073064a3816f0932a40a17f3349185f/numpy-2.4.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5f51900414fc9204a0e0da158ba2ac52b75656e7dce7e77fb9f84bfa343b4cc", size = 16608916, upload-time = "2026-03-09T07:57:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/df/58/2a2b4a817ffd7472dca4421d9f0776898b364154e30c95f42195041dc03b/numpy-2.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6bd06731541f89cdc01b261ba2c9e037f1543df7472517836b78dfb15bd6e476", size = 17015824, upload-time = "2026-03-09T07:57:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ca/627a828d44e78a418c55f82dd4caea8ea4a8ef24e5144d9e71016e52fb40/numpy-2.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:22654fe6be0e5206f553a9250762c653d3698e46686eee53b399ab90da59bd92", size = 18334581, upload-time = "2026-03-09T07:57:09.114Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c0/76f93962fc79955fcba30a429b62304332345f22d4daec1cb33653425643/numpy-2.4.3-cp313-cp313-win32.whl", hash = "sha256:d71e379452a2f670ccb689ec801b1218cd3983e253105d6e83780967e899d687", size = 5958618, upload-time = "2026-03-09T07:57:11.432Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3c/88af0040119209b9b5cb59485fa48b76f372c73068dbf9254784b975ac53/numpy-2.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:0a60e17a14d640f49146cb38e3f105f571318db7826d9b6fef7e4dce758faecd", size = 12312824, upload-time = "2026-03-09T07:57:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/58/ce/3d07743aced3d173f877c3ef6a454c2174ba42b584ab0b7e6d99374f51ed/numpy-2.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:c9619741e9da2059cd9c3f206110b97583c7152c1dc9f8aafd4beb450ac1c89d", size = 10221218, upload-time = "2026-03-09T07:57:16.183Z" }, + { url = "https://files.pythonhosted.org/packages/62/09/d96b02a91d09e9d97862f4fc8bfebf5400f567d8eb1fe4b0cc4795679c15/numpy-2.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7aa4e54f6469300ebca1d9eb80acd5253cdfa36f2c03d79a35883687da430875", size = 14819570, upload-time = "2026-03-09T07:57:18.564Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ca/0b1aba3905fdfa3373d523b2b15b19029f4f3031c87f4066bd9d20ef6c6b/numpy-2.4.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d1b90d840b25874cf5cd20c219af10bac3667db3876d9a495609273ebe679070", size = 5326113, upload-time = "2026-03-09T07:57:21.052Z" }, + { url = "https://files.pythonhosted.org/packages/c0/63/406e0fd32fcaeb94180fd6a4c41e55736d676c54346b7efbce548b94a914/numpy-2.4.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a749547700de0a20a6718293396ec237bb38218049cfce788e08fcb716e8cf73", size = 6646370, upload-time = "2026-03-09T07:57:22.804Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d0/10f7dc157d4b37af92720a196be6f54f889e90dcd30dce9dc657ed92c257/numpy-2.4.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f3c4a151a2e529adf49c1d54f0f57ff8f9b233ee4d44af623a81553ab86368", size = 15723499, upload-time = "2026-03-09T07:57:24.693Z" }, + { url = "https://files.pythonhosted.org/packages/66/f1/d1c2bf1161396629701bc284d958dc1efa3a5a542aab83cf11ee6eb4cba5/numpy-2.4.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c31dc07025123aedf7f2db9e91783df13f1776dc52c6b22c620870dc0fab22", size = 16657164, upload-time = "2026-03-09T07:57:27.676Z" }, + { url = "https://files.pythonhosted.org/packages/1a/be/cca19230b740af199ac47331a21c71e7a3d0ba59661350483c1600d28c37/numpy-2.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:148d59127ac95979d6f07e4d460f934ebdd6eed641db9c0db6c73026f2b2101a", size = 17081544, upload-time = "2026-03-09T07:57:30.664Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/9602b0cbb703a0936fb40f8a95407e8171935b15846de2f0776e08af04c7/numpy-2.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a97cbf7e905c435865c2d939af3d93f99d18eaaa3cabe4256f4304fb51604349", size = 18380290, upload-time = "2026-03-09T07:57:33.763Z" }, + { url = "https://files.pythonhosted.org/packages/ed/81/9f24708953cd30be9ee36ec4778f4b112b45165812f2ada4cc5ea1c1f254/numpy-2.4.3-cp313-cp313t-win32.whl", hash = "sha256:be3b8487d725a77acccc9924f65fd8bce9af7fac8c9820df1049424a2115af6c", size = 6082814, upload-time = "2026-03-09T07:57:36.491Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9e/52f6eaa13e1a799f0ab79066c17f7016a4a8ae0c1aefa58c82b4dab690b4/numpy-2.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1ec84fd7c8e652b0f4aaaf2e6e9cc8eaa9b1b80a537e06b2e3a2fb176eedcb26", size = 12452673, upload-time = "2026-03-09T07:57:38.281Z" }, + { url = "https://files.pythonhosted.org/packages/c4/04/b8cece6ead0b30c9fbd99bb835ad7ea0112ac5f39f069788c5558e3b1ab2/numpy-2.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:120df8c0a81ebbf5b9020c91439fccd85f5e018a927a39f624845be194a2be02", size = 10290907, upload-time = "2026-03-09T07:57:40.747Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/3936f79adebf8caf81bd7a599b90a561334a658be4dcc7b6329ebf4ee8de/numpy-2.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5884ce5c7acfae1e4e1b6fde43797d10aa506074d25b531b4f54bde33c0c31d4", size = 16664563, upload-time = "2026-03-09T07:57:43.817Z" }, + { url = "https://files.pythonhosted.org/packages/9b/62/760f2b55866b496bb1fa7da2a6db076bef908110e568b02fcfc1422e2a3a/numpy-2.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:297837823f5bc572c5f9379b0c9f3a3365f08492cbdc33bcc3af174372ebb168", size = 14702161, upload-time = "2026-03-09T07:57:46.169Z" }, + { url = "https://files.pythonhosted.org/packages/32/af/a7a39464e2c0a21526fb4fb76e346fb172ebc92f6d1c7a07c2c139cc17b1/numpy-2.4.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a111698b4a3f8dcbe54c64a7708f049355abd603e619013c346553c1fd4ca90b", size = 5208738, upload-time = "2026-03-09T07:57:48.506Z" }, + { url = "https://files.pythonhosted.org/packages/29/8c/2a0cf86a59558fa078d83805589c2de490f29ed4fb336c14313a161d358a/numpy-2.4.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:4bd4741a6a676770e0e97fe9ab2e51de01183df3dcbcec591d26d331a40de950", size = 6543618, upload-time = "2026-03-09T07:57:50.591Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b8/612ce010c0728b1c363fa4ea3aa4c22fe1c5da1de008486f8c2f5cb92fae/numpy-2.4.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54f29b877279d51e210e0c80709ee14ccbbad647810e8f3d375561c45ef613dd", size = 15680676, upload-time = "2026-03-09T07:57:52.34Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7e/4f120ecc54ba26ddf3dc348eeb9eb063f421de65c05fc961941798feea18/numpy-2.4.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:679f2a834bae9020f81534671c56fd0cc76dd7e5182f57131478e23d0dc59e24", size = 16613492, upload-time = "2026-03-09T07:57:54.91Z" }, + { url = "https://files.pythonhosted.org/packages/2c/86/1b6020db73be330c4b45d5c6ee4295d59cfeef0e3ea323959d053e5a6909/numpy-2.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d84f0f881cb2225c2dfd7f78a10a5645d487a496c6668d6cc39f0f114164f3d0", size = 17031789, upload-time = "2026-03-09T07:57:57.641Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/3b90463bf41ebc21d1b7e06079f03070334374208c0f9a1f05e4ae8455e7/numpy-2.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d213c7e6e8d211888cc359bab7199670a00f5b82c0978b9d1c75baf1eddbeac0", size = 18339941, upload-time = "2026-03-09T07:58:00.577Z" }, + { url = "https://files.pythonhosted.org/packages/a8/74/6d736c4cd962259fd8bae9be27363eb4883a2f9069763747347544c2a487/numpy-2.4.3-cp314-cp314-win32.whl", hash = "sha256:52077feedeff7c76ed7c9f1a0428558e50825347b7545bbb8523da2cd55c547a", size = 6007503, upload-time = "2026-03-09T07:58:03.331Z" }, + { url = "https://files.pythonhosted.org/packages/48/39/c56ef87af669364356bb011922ef0734fc49dad51964568634c72a009488/numpy-2.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:0448e7f9caefb34b4b7dd2b77f21e8906e5d6f0365ad525f9f4f530b13df2afc", size = 12444915, upload-time = "2026-03-09T07:58:06.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1f/ab8528e38d295fd349310807496fabb7cf9fe2e1f70b97bc20a483ea9d4a/numpy-2.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:b44fd60341c4d9783039598efadd03617fa28d041fc37d22b62d08f2027fa0e7", size = 10494875, upload-time = "2026-03-09T07:58:08.734Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ef/b7c35e4d5ef141b836658ab21a66d1a573e15b335b1d111d31f26c8ef80f/numpy-2.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a195f4216be9305a73c0e91c9b026a35f2161237cf1c6de9b681637772ea657", size = 14822225, upload-time = "2026-03-09T07:58:11.034Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8d/7730fa9278cf6648639946cc816e7cc89f0d891602584697923375f801ed/numpy-2.4.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:cd32fbacb9fd1bf041bf8e89e4576b6f00b895f06d00914820ae06a616bdfef7", size = 5328769, upload-time = "2026-03-09T07:58:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/47/01/d2a137317c958b074d338807c1b6a383406cdf8b8e53b075d804cc3d211d/numpy-2.4.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:2e03c05abaee1f672e9d67bc858f300b5ccba1c21397211e8d77d98350972093", size = 6649461, upload-time = "2026-03-09T07:58:15.912Z" }, + { url = "https://files.pythonhosted.org/packages/5c/34/812ce12bc0f00272a4b0ec0d713cd237cb390666eb6206323d1cc9cedbb2/numpy-2.4.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d1ce23cce91fcea443320a9d0ece9b9305d4368875bab09538f7a5b4131938a", size = 15725809, upload-time = "2026-03-09T07:58:17.787Z" }, + { url = "https://files.pythonhosted.org/packages/25/c0/2aed473a4823e905e765fee3dc2cbf504bd3e68ccb1150fbdabd5c39f527/numpy-2.4.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c59020932feb24ed49ffd03704fbab89f22aa9c0d4b180ff45542fe8918f5611", size = 16655242, upload-time = "2026-03-09T07:58:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c8/7e052b2fc87aa0e86de23f20e2c42bd261c624748aa8efd2c78f7bb8d8c6/numpy-2.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9684823a78a6cd6ad7511fc5e25b07947d1d5b5e2812c93fe99d7d4195130720", size = 17080660, upload-time = "2026-03-09T07:58:23.067Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3d/0876746044db2adcb11549f214d104f2e1be00f07a67edbb4e2812094847/numpy-2.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0200b25c687033316fb39f0ff4e3e690e8957a2c3c8d22499891ec58c37a3eb5", size = 18380384, upload-time = "2026-03-09T07:58:25.839Z" }, + { url = "https://files.pythonhosted.org/packages/07/12/8160bea39da3335737b10308df4f484235fd297f556745f13092aa039d3b/numpy-2.4.3-cp314-cp314t-win32.whl", hash = "sha256:5e10da9e93247e554bb1d22f8edc51847ddd7dde52d85ce31024c1b4312bfba0", size = 6154547, upload-time = "2026-03-09T07:58:28.289Z" }, + { url = "https://files.pythonhosted.org/packages/42/f3/76534f61f80d74cc9cdf2e570d3d4eeb92c2280a27c39b0aaf471eda7b48/numpy-2.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:45f003dbdffb997a03da2d1d0cb41fbd24a87507fb41605c0420a3db5bd4667b", size = 12633645, upload-time = "2026-03-09T07:58:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/1f/b6/7c0d4334c15983cec7f92a69e8ce9b1e6f31857e5ee3a413ac424e6bd63d/numpy-2.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:4d382735cecd7bcf090172489a525cd7d4087bc331f7df9f60ddc9a296cf208e", size = 10565454, upload-time = "2026-03-09T07:58:33.031Z" }, + { url = "https://files.pythonhosted.org/packages/64/e4/4dab9fb43c83719c29241c535d9e07be73bea4bc0c6686c5816d8e1b6689/numpy-2.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c6b124bfcafb9e8d3ed09130dbee44848c20b3e758b6bbf006e641778927c028", size = 16834892, upload-time = "2026-03-09T07:58:35.334Z" }, + { url = "https://files.pythonhosted.org/packages/c9/29/f8b6d4af90fed3dfda84ebc0df06c9833d38880c79ce954e5b661758aa31/numpy-2.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:76dbb9d4e43c16cf9aa711fcd8de1e2eeb27539dcefb60a1d5e9f12fae1d1ed8", size = 14893070, upload-time = "2026-03-09T07:58:37.7Z" }, + { url = "https://files.pythonhosted.org/packages/9a/04/a19b3c91dbec0a49269407f15d5753673a09832daed40c45e8150e6fa558/numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:29363fbfa6f8ee855d7569c96ce524845e3d726d6c19b29eceec7dd555dab152", size = 5399609, upload-time = "2026-03-09T07:58:39.853Z" }, + { url = "https://files.pythonhosted.org/packages/79/34/4d73603f5420eab89ea8a67097b31364bf7c30f811d4dd84b1659c7476d9/numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:bc71942c789ef415a37f0d4eab90341425a00d538cd0642445d30b41023d3395", size = 6714355, upload-time = "2026-03-09T07:58:42.365Z" }, + { url = "https://files.pythonhosted.org/packages/58/ad/1100d7229bb248394939a12a8074d485b655e8ed44207d328fdd7fcebc7b/numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e58765ad74dcebd3ef0208a5078fba32dc8ec3578fe84a604432950cd043d79", size = 15800434, upload-time = "2026-03-09T07:58:44.837Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fd/16d710c085d28ba4feaf29ac60c936c9d662e390344f94a6beaa2ac9899b/numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e236dbda4e1d319d681afcbb136c0c4a8e0f1a5c58ceec2adebb547357fe857", size = 16729409, upload-time = "2026-03-09T07:58:47.972Z" }, + { url = "https://files.pythonhosted.org/packages/57/a7/b35835e278c18b85206834b3aa3abe68e77a98769c59233d1f6300284781/numpy-2.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4b42639cdde6d24e732ff823a3fa5b701d8acad89c4142bc1d0bd6dc85200ba5", size = 12504685, upload-time = "2026-03-09T07:58:50.525Z" }, +] + +[[package]] +name = "numpydoc" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/3c/dfccc9e7dee357fb2aa13c3890d952a370dd0ed071e0f7ed62ed0df567c1/numpydoc-1.10.0.tar.gz", hash = "sha256:3f7970f6eee30912260a6b31ac72bba2432830cd6722569ec17ee8d3ef5ffa01", size = 94027, upload-time = "2025-12-02T16:39:12.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl", hash = "sha256:3149da9874af890bcc2a82ef7aae5484e5aa81cb2778f08e3c307ba6d963721b", size = 69255, upload-time = "2025-12-02T16:39:11.561Z" }, +] + +[[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.6.4.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/eb/ff4b8c503fa1f1796679dce648854d58751982426e4e4b37d6fce49d259c/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08ed2686e9875d01b58e3cb379c6896df8e76c75e0d4a7f7dace3d7b6d9ef8eb", size = 393138322, upload-time = "2024-11-20T17:40:25.65Z" }, + { url = "https://files.pythonhosted.org/packages/97/0d/f1f0cadbf69d5b9ef2e4f744c9466cb0a850741d08350736dfdb4aa89569/nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:235f728d6e2a409eddf1df58d5b0921cf80cfa9e72b9f2775ccb7b4a87984668", size = 390794615, upload-time = "2024-11-20T17:39:52.715Z" }, + { url = "https://files.pythonhosted.org/packages/84/f7/985e9bdbe3e0ac9298fcc8cfa51a392862a46a0ffaccbbd56939b62a9c83/nvidia_cublas_cu12-12.6.4.1-py3-none-win_amd64.whl", hash = "sha256:9e4fa264f4d8a4eb0cdbd34beadc029f453b3bafae02401e999cf3d5a5af75f8", size = 434535301, upload-time = "2024-11-20T17:50:41.681Z" }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.8.4.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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-crt" +version = "13.2.78" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/8a/3954a429bbe1dea60c7e3fa4a0cf6a4fdb7df295b2cfb49a77a73bcd3ca4/nvidia_cuda_crt-13.2.78-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f5f1d7bf8a89e98f19f45a2f18bb5df99a806433bfb6f0bc487d9e8f4b3677b", size = 133298, upload-time = "2026-04-13T09:37:06.368Z" }, + { url = "https://files.pythonhosted.org/packages/ea/78/501eee5cce9202fba2f3476529e296a7f6d003261d80b52ab0abfa09ddd6/nvidia_cuda_crt-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c8615ee30ed466cb6298ecb8ffe9e6ea8b252ca833206152d155750bf831608", size = 133301, upload-time = "2026-04-13T09:37:36.922Z" }, + { url = "https://files.pythonhosted.org/packages/b7/5a/2f01037f080c72ba9eed048fc5a041336e017dc49d551e7a1563b041e246/nvidia_cuda_crt-13.2.78-py3-none-win_amd64.whl", hash = "sha256:6a5ac267680aecbec0405884c81b12db48f9baadfa67a62f230ab2f47f6ccaf1", size = 134064, upload-time = "2026-04-13T10:03:45.81Z" }, +] + +[[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.6.80" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8b/2f6230cb715646c3a9425636e513227ce5c93c4d65823a734f4bb86d43c3/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:166ee35a3ff1587f2490364f90eeeb8da06cd867bd5b701bf7f9a02b78bc63fc", size = 8236764, upload-time = "2024-11-20T17:35:41.03Z" }, + { url = "https://files.pythonhosted.org/packages/25/0f/acb326ac8fd26e13c799e0b4f3b2751543e1834f04d62e729485872198d4/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_aarch64.whl", hash = "sha256:358b4a1d35370353d52e12f0a7d1769fc01ff74a191689d3870b2123156184c4", size = 8236756, upload-time = "2024-10-01T16:57:45.507Z" }, + { url = "https://files.pythonhosted.org/packages/49/60/7b6497946d74bcf1de852a21824d63baad12cd417db4195fc1bfe59db953/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6768bad6cab4f19e8292125e5f1ac8aa7d1718704012a0e3272a6f61c4bce132", size = 8917980, upload-time = "2024-11-20T17:36:04.019Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/120ee57b218d9952c379d1e026c4479c9ece9997a4fb46303611ee48f038/nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a3eff6cdfcc6a4c35db968a06fcadb061cbc7d6dde548609a941ff8701b98b73", size = 8917972, upload-time = "2024-10-01T16:58:06.036Z" }, + { url = "https://files.pythonhosted.org/packages/1c/81/7796f096afaf726796b1b648f3bc80cafc61fe7f77f44a483c89e6c5ef34/nvidia_cuda_cupti_cu12-12.6.80-py3-none-win_amd64.whl", hash = "sha256:bbe6ae76e83ce5251b56e8c8e61a964f757175682bbad058b170b136266ab00a", size = 5724175, upload-time = "2024-10-01T17:09:47.955Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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-nvcc" +version = "13.2.78" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-crt", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvvm", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/df/faf551572ae1359290afa5cb05d2c4b7e6674b07b8283b20eab4dbad15f6/nvidia_cuda_nvcc-13.2.78-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dfc76950c775cd00ce588f15192f08c9b858c0dcfa7da685acf39a3d0d8f588b", size = 38713559, upload-time = "2026-04-13T09:42:17.478Z" }, + { url = "https://files.pythonhosted.org/packages/65/0f/c7c7d538c61794130e759ad74710ab5aa8cab1f700ee1754381f8c665605/nvidia_cuda_nvcc-13.2.78-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c3bd144dd9b6b25e062589acb7bbd43d93d3120c72fad71da808f9817aba1239", size = 44040318, upload-time = "2026-04-13T09:42:50.457Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f1/533329b960fad3d800a50e89f43a2e1b8dade07457ce340d4f0858203dcc/nvidia_cuda_nvcc-13.2.78-py3-none-win_amd64.whl", hash = "sha256:6bc1047a44ff0751b0506cb6d8c7565edb0d3ff71f69d562333c9d1c540dcfd1", size = 32002789, upload-time = "2026-04-13T10:05:40.376Z" }, +] + +[[package]] +name = "nvidia-cuda-nvcc-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:5d6a0d32fdc7ea39917c20065614ae93add6f577d840233237ff08e9a38f58f0", size = 40546229, upload-time = "2025-06-05T20:01:53.357Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/8cc072436787104bbbcbde1f76ab4a0d89e68f7cebc758dd2ad7913a43d0/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44e1eca4d08926193a558d2434b1bf83d57b4d5743e0c431c0c83d51da1df62b", size = 39411138, upload-time = "2025-06-05T20:01:43.182Z" }, + { url = "https://files.pythonhosted.org/packages/d2/9e/c71c53655a65d7531c89421c282359e2f626838762f1ce6180ea0bbebd29/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-win_amd64.whl", hash = "sha256:8ed7f0b17dea662755395be029376db3b94fed5cbb17c2d35cc866c5b1b84099", size = 34669845, upload-time = "2025-06-05T20:11:56.308Z" }, +] + +[[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.6.77" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/2f/72df534873235983cc0a5371c3661bebef7c4682760c275590b972c7b0f9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5847f1d6e5b757f1d2b3991a01082a44aad6f10ab3c5c0213fa3e25bddc25a13", size = 23162955, upload-time = "2024-10-01T16:59:50.922Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/46030320b5a80661e88039f59060d1790298b4718944a65a7f2aeda3d9e9/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:35b0cc6ee3a9636d5409133e79273ce1f3fd087abb0532d2d2e8fff1fe9efc53", size = 23650380, upload-time = "2024-10-01T17:00:14.643Z" }, + { url = "https://files.pythonhosted.org/packages/f5/46/d3a1cdda8bb113c80f43a0a6f3a853356d487b830f3483f92d49ce87fa55/nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-win_amd64.whl", hash = "sha256:f7007dbd914c56bd80ea31bc43e8e149da38f68158f423ba845fc3292684e45a", size = 39026742, upload-time = "2024-10-01T17:10:49.058Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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.6.77" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/ea/590b2ac00d772a8abd1c387a92b46486d2679ca6622fd25c18ff76265663/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6116fad3e049e04791c0256a9778c16237837c08b27ed8c8401e2e45de8d60cd", size = 908052, upload-time = "2024-11-20T17:35:19.905Z" }, + { url = "https://files.pythonhosted.org/packages/b7/3d/159023799677126e20c8fd580cca09eeb28d5c5a624adc7f793b9aa8bbfa/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d461264ecb429c84c8879a7153499ddc7b19b5f8d84c204307491989a365588e", size = 908040, upload-time = "2024-10-01T16:57:22.221Z" }, + { url = "https://files.pythonhosted.org/packages/e1/23/e717c5ac26d26cf39a27fbc076240fad2e3b817e5889d671b67f4f9f49c5/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba3b56a4f896141e25e19ab287cd71e52a6a0f4b29d0d31609f60e3b4d5219b7", size = 897690, upload-time = "2024-11-20T17:35:30.697Z" }, + { url = "https://files.pythonhosted.org/packages/f0/62/65c05e161eeddbafeca24dc461f47de550d9fa8a7e04eb213e32b55cfd99/nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a84d15d5e1da416dd4774cb42edf5e954a3e60cc945698dc1d5be02321c44dc8", size = 897678, upload-time = "2024-10-01T16:57:33.821Z" }, + { url = "https://files.pythonhosted.org/packages/fa/76/4c80fa138333cc975743fd0687a745fccb30d167f906f13c1c7f9a85e5ea/nvidia_cuda_runtime_cu12-12.6.77-py3-none-win_amd64.whl", hash = "sha256:86c58044c824bf3c173c49a2dbc7a6c8b53cb4e4dca50068be0bf64e9dab3f7f", size = 891773, upload-time = "2024-10-01T17:09:26.362Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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-cuda-runtime-cu12" +version = "12.9.79" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/e0/0279bd94539fda525e0c8538db29b72a5a8495b0c12173113471d28bce78/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83469a846206f2a733db0c42e223589ab62fd2fabac4432d2f8802de4bded0a4", size = 3515012, upload-time = "2025-06-05T20:00:35.519Z" }, + { url = "https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3", size = 3493179, upload-time = "2025-06-05T20:00:53.735Z" }, + { url = "https://files.pythonhosted.org/packages/59/df/e7c3a360be4f7b93cee39271b792669baeb3846c58a4df6dfcf187a7ffab/nvidia_cuda_runtime_cu12-12.9.79-py3-none-win_amd64.whl", hash = "sha256:8e018af8fa02363876860388bd10ccb89eb9ab8fb0aa749aaf58430a9f7c4891", size = 3591604, upload-time = "2025-06-05T20:11:17.036Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", version = "12.6.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.19.0.56" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/84/26025437c1e6b61a707442184fa0c03d083b661adf3a3eecfd6d21677740/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:6ed29ffaee1176c612daf442e4dd6cfeb6a0caa43ddcbeb59da94953030b1be4", size = 433781201, upload-time = "2026-02-03T20:40:53.805Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, + { url = "https://files.pythonhosted.org/packages/91/a2/f020386683ee9ab2c9a9f7f79290d9b0d07f7241de54dc746af2abd188d2/nvidia_cudnn_cu13-9.19.0.56-py3-none-win_amd64.whl", hash = "sha256:40d8c375005bcb01495f8edf375230b203a411a0c05fb6dc92a3781edcb23eac", size = 350547366, upload-time = "2026-02-03T20:50:49.563Z" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +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.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/37/c50d2b2f2c07e146776389e3080f4faf70bcc4fa6e19d65bb54ca174ebc3/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6", size = 200164144, upload-time = "2024-11-20T17:40:58.288Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f5/188566814b7339e893f8d210d3a5332352b1409815908dad6a363dcceac1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8510990de9f96c803a051822618d42bf6cb8f069ff3f48d93a8486efdacb48fb", size = 200164135, upload-time = "2024-10-01T17:03:24.212Z" }, + { url = "https://files.pythonhosted.org/packages/8f/16/73727675941ab8e6ffd86ca3a4b7b47065edcca7a997920b831f8147c99d/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ccba62eb9cef5559abd5e0d54ceed2d9934030f51163df018532142a8ec533e5", size = 200221632, upload-time = "2024-11-20T17:41:32.357Z" }, + { url = "https://files.pythonhosted.org/packages/60/de/99ec247a07ea40c969d904fc14f3a356b3e2a704121675b75c366b694ee1/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.whl", hash = "sha256:768160ac89f6f7b459bee747e8d175dbf53619cfe74b2a5636264163138013ca", size = 200221622, upload-time = "2024-10-01T17:03:58.79Z" }, + { url = "https://files.pythonhosted.org/packages/b4/38/36fd800cec8f6e89b7c1576edaaf8076e69ec631644cdbc1b5f2e2b5a9df/nvidia_cufft_cu12-11.3.0.4-py3-none-win_amd64.whl", hash = "sha256:6048ebddfb90d09d2707efb1fd78d4e3a77cb3ae4dc60e19aab6be0ece2ae464", size = 199356881, upload-time = "2024-10-01T17:13:01.861Z" }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.3.3.83" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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-cufft-cu12" +version = "11.4.1.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "nvidia-nvjitlink-cu12", version = "12.9.86", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep' or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/2b/76445b0af890da61b501fde30650a1a4bd910607261b209cccb5235d3daa/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1a28c9b12260a1aa7a8fd12f5ebd82d027963d635ba82ff39a1acfa7c4c0fbcf", size = 200822453, upload-time = "2025-06-05T20:05:27.889Z" }, + { url = "https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28", size = 200877592, upload-time = "2025-06-05T20:05:45.862Z" }, + { url = "https://files.pythonhosted.org/packages/20/ee/29955203338515b940bd4f60ffdbc073428f25ef9bfbce44c9a066aedc5c/nvidia_cufft_cu12-11.4.1.4-py3-none-win_amd64.whl", hash = "sha256:8e5bfaac795e93f80611f807d42844e8e27e340e0cde270dcb6c65386d795b80", size = 200067309, upload-time = "2025-06-05T20:13:59.762Z" }, +] + +[[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.11.1.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/66/cc9876340ac68ae71b15c743ddb13f8b30d5244af344ec8322b449e35426/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc23469d1c7e52ce6c1d55253273d32c565dd22068647f3aa59b3c6b005bf159", size = 1142103, upload-time = "2024-11-20T17:42:11.83Z" }, + { url = "https://files.pythonhosted.org/packages/17/bf/cc834147263b929229ce4aadd62869f0b195e98569d4c28b23edc72b85d9/nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:8f57a0051dcf2543f6dc2b98a98cb2719c37d3cee1baba8965d57f3bbc90d4db", size = 1066155, upload-time = "2024-11-20T17:41:49.376Z" }, +] + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.1.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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.7.77" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/ac/36543605358a355632f1a6faa3e2d5dfb91eab1e4bc7d552040e0383c335/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:6e82df077060ea28e37f48a3ec442a8f47690c7499bff392a5938614b56c98d8", size = 56289881, upload-time = "2024-10-01T17:04:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/73/1b/44a01c4e70933637c93e6e1a8063d1e998b50213a6b65ac5a9169c47e98e/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a42cd1344297f70b9e39a1e4f467a4e1c10f1da54ff7a85c12197f6c652c8bdf", size = 56279010, upload-time = "2024-11-20T17:42:50.958Z" }, + { url = "https://files.pythonhosted.org/packages/4a/aa/2c7ff0b5ee02eaef890c0ce7d4f74bc30901871c5e45dee1ae6d0083cd80/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:99f1a32f1ac2bd134897fc7a203f779303261268a65762a623bf30cc9fe79117", size = 56279000, upload-time = "2024-10-01T17:04:45.274Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/5362a9396f23f7de1dd8a64369e87c85ffff8216fc8194ace0fa45ba27a5/nvidia_curand_cu12-10.3.7.77-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:7b2ed8e95595c3591d984ea3603dd66fe6ce6812b886d59049988a712ed06b6e", size = 56289882, upload-time = "2024-11-20T17:42:25.222Z" }, + { url = "https://files.pythonhosted.org/packages/a9/a8/0cd0cec757bd4b4b4ef150fca62ec064db7d08a291dced835a0be7d2c147/nvidia_curand_cu12-10.3.7.77-py3-none-win_amd64.whl", hash = "sha256:6d6d935ffba0f3d439b7cd968192ff068fafd9018dbf1b85b37261b13cfc9905", size = 55783873, upload-time = "2024-10-01T17:13:30.377Z" }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.9.90" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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" }, + { name = "nvidia-cusparse" }, + { name = "nvidia-nvjitlink" }, +] +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.1.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-cublas-cu12", version = "12.6.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.4.2", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/17/dbe1aa865e4fdc7b6d4d0dd308fdd5aaab60f939abfc0ea1954eac4fb113/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0", size = 157833628, upload-time = "2024-10-01T17:05:05.591Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6e/c2cf12c9ff8b872e92b4a5740701e51ff17689c4d726fca91875b07f655d/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9e49843a7707e42022babb9bcfa33c29857a93b88020c4e4434656a655b698c", size = 158229790, upload-time = "2024-11-20T17:43:43.211Z" }, + { url = "https://files.pythonhosted.org/packages/9f/81/baba53585da791d043c10084cf9553e074548408e04ae884cfe9193bd484/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf28f17f64107a0c4d7802be5ff5537b2130bfc112f25d5a30df227058ca0e6", size = 158229780, upload-time = "2024-10-01T17:05:39.875Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5f/07d0ba3b7f19be5a5ec32a8679fc9384cfd9fc6c869825e93be9f28d6690/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:dbbe4fc38ec1289c7e5230e16248365e375c3673c9c8bac5796e2e20db07f56e", size = 157833630, upload-time = "2024-11-20T17:43:16.77Z" }, + { url = "https://files.pythonhosted.org/packages/d4/53/fff50a0808df7113d77e3bbc7c2b7eaed6f57d5eb80fbe93ead2aea1e09a/nvidia_cusolver_cu12-11.7.1.2-py3-none-win_amd64.whl", hash = "sha256:6813f9d8073f555444a8705f3ab0296d3e1cb37a16d694c5fc8b862a0d8706d7", size = 149287877, upload-time = "2024-10-01T17:13:49.804Z" }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.8.93", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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" }, +] +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.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu126' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/eb/6681efd0aa7df96b4f8067b3ce7246833dd36830bb4cec8896182773db7d/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887", size = 216451147, upload-time = "2024-11-20T17:44:18.055Z" }, + { url = "https://files.pythonhosted.org/packages/d3/56/3af21e43014eb40134dea004e8d0f1ef19d9596a39e4d497d5a7de01669f/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7aa32fa5470cf754f72d1116c7cbc300b4e638d3ae5304cfa4a638a5b87161b1", size = 216451135, upload-time = "2024-10-01T17:06:03.826Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/b8b7c2f4099a37b96af5c9bb158632ea9e5d9d27d7391d7eb8fc45236674/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7556d9eca156e18184b94947ade0fba5bb47d69cec46bf8660fd2c71a4b48b73", size = 216561367, upload-time = "2024-11-20T17:44:54.824Z" }, + { url = "https://files.pythonhosted.org/packages/43/ac/64c4316ba163e8217a99680c7605f779accffc6a4bcd0c778c12948d3707/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:23749a6571191a215cb74d1cdbff4a86e7b19f1200c071b3fcf844a5bea23a2f", size = 216561357, upload-time = "2024-10-01T17:06:29.861Z" }, + { url = "https://files.pythonhosted.org/packages/45/ef/876ad8e4260e1128e6d4aac803d9d51baf3791ebdb4a9b8d9b8db032b4b0/nvidia_cusparse_cu12-12.5.4.2-py3-none-win_amd64.whl", hash = "sha256:4acb8c08855a26d737398cba8fb6f8f5045d93f82612b4cfd84645a2332ccf20", size = 213712630, upload-time = "2024-10-01T17:14:23.779Z" }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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 = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-6-pylops-deep-cu128' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.6.85" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/d7/c5383e47c7e9bf1c99d5bd2a8c935af2b6d705ad831a7ec5c97db4d82f4f/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a", size = 19744971, upload-time = "2024-11-20T17:46:53.366Z" }, + { url = "https://files.pythonhosted.org/packages/31/db/dc71113d441f208cdfe7ae10d4983884e13f464a6252450693365e166dcf/nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41", size = 19270338, upload-time = "2024-11-20T17:46:29.758Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/93c1467b1387387440a4d25102d86b7794535449b689f8e2dc22c1c8ff7f/nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c", size = 161908572, upload-time = "2024-11-20T17:52:40.124Z" }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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-nvjitlink-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9", size = 39748338, upload-time = "2025-06-05T20:10:25.613Z" }, + { url = "https://files.pythonhosted.org/packages/97/bc/2dcba8e70cf3115b400fef54f213bcd6715a3195eba000f8330f11e40c45/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:994a05ef08ef4b0b299829cde613a424382aff7efb08a7172c1fa616cc3af2ca", size = 39514880, upload-time = "2025-06-05T20:10:04.89Z" }, + { url = "https://files.pythonhosted.org/packages/dd/7e/2eecb277d8a98184d881fb98a738363fd4f14577a4d2d7f8264266e82623/nvidia_nvjitlink_cu12-12.9.86-py3-none-win_amd64.whl", hash = "sha256:cc6fcec260ca843c10e34c936921a1c426b351753587fdd638e8cff7b16bb9db", size = 35584936, upload-time = "2025-06-05T20:16:08.525Z" }, +] + +[[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.6.77" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/93/80f8a520375af9d7ee44571a6544653a176e53c2b8ccce85b97b83c2491b/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f44f8d86bb7d5629988d61c8d3ae61dddb2015dee142740536bc7481b022fe4b", size = 90549, upload-time = "2024-11-20T17:38:17.387Z" }, + { url = "https://files.pythonhosted.org/packages/2b/53/36e2fd6c7068997169b49ffc8c12d5af5e5ff209df6e1a2c4d373b3a638f/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:adcaabb9d436c9761fca2b13959a2d237c5f9fd406c8e4b723c695409ff88059", size = 90539, upload-time = "2024-10-01T17:00:27.179Z" }, + { url = "https://files.pythonhosted.org/packages/56/9a/fff8376f8e3d084cd1530e1ef7b879bb7d6d265620c95c1b322725c694f4/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b90bed3df379fa79afbd21be8e04a0314336b8ae16768b58f2d34cb1d04cd7d2", size = 89276, upload-time = "2024-11-20T17:38:27.621Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/0d0c945463719429b7bd21dece907ad0bde437a2ff12b9b12fee94722ab0/nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6574241a3ec5fdc9334353ab8c479fe75841dbe8f4532a8fc97ce63503330ba1", size = 89265, upload-time = "2024-10-01T17:00:38.172Z" }, + { url = "https://files.pythonhosted.org/packages/f7/cd/98a447919d4ed14d407ac82b14b0a0c9c1dbfe81099934b1fc3bfd1e6316/nvidia_nvtx_cu12-12.6.77-py3-none-win_amd64.whl", hash = "sha256:2fb11a4af04a5e6c84073e6404d26588a34afd35379f0855a99797897efa75c0", size = 56434, upload-time = "2024-10-01T17:11:13.124Z" }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' 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'", +] +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 = "nvidia-nvvm" +version = "13.2.78" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/1f/930d63ccc8adcdf27bfc051a24e3e4da2cf6ef987848d6d1d642e29d704b/nvidia_nvvm-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:f5aa433631109bbdec81802c5b5f319bf10bc891fe2f212e4e445845211d6f77", size = 64279462, upload-time = "2026-04-13T10:02:25.719Z" }, + { url = "https://files.pythonhosted.org/packages/8b/fd/db44b7a662a6af75a9a0683ca4580c855a3f5fcfdf1261b0ddb9fce0ee26/nvidia_nvvm-13.2.78-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88075f87a361a1dce95c799cabc028f7093af616a5702dcfb74eba4045dbbd5f", size = 61886055, upload-time = "2026-04-13T10:02:00.345Z" }, + { url = "https://files.pythonhosted.org/packages/35/b9/c3862fd1073326c61233f05e816c17a28ab86a361db1b7561c7f33ac3af4/nvidia_nvvm-13.2.78-py3-none-win_amd64.whl", hash = "sha256:cf8e91654e74285e9c574b3a45b92928c0a6d135928906cf11ce470bbec6a8ec", size = 56752219, upload-time = "2026-04-13T10:15:11.102Z" }, +] + +[[package]] +name = "opt-einsum" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/b9/2ac072041e899a52f20cf9510850ff58295003aa75525e58343591b0cbfb/opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac", size = 63004, upload-time = "2024-09-26T14:33:24.483Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd", size = 71932, upload-time = "2024-09-26T14:33:23.039Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "python-dateutil", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytz", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "tzdata", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'emscripten' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'win32' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/99/b342345300f13440fe9fe385c3c481e2d9a595ee3bab4d3219247ac94e9a/pandas-3.0.2.tar.gz", hash = "sha256:f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043", size = 4645855, upload-time = "2026-03-31T06:48:30.816Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/35/6411db530c618e0e0005187e35aa02ce60ae4c4c4d206964a2f978217c27/pandas-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a727a73cbdba2f7458dc82449e2315899d5140b449015d822f515749a46cbbe0", size = 10326926, upload-time = "2026-03-31T06:46:08.29Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d3/b7da1d5d7dbdc5ef52ed7debd2b484313b832982266905315dad5a0bf0b1/pandas-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbbd4aa20ca51e63b53bbde6a0fa4254b1aaabb74d2f542df7a7959feb1d760c", size = 9926987, upload-time = "2026-03-31T06:46:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/52/77/9b1c2d6070b5dbe239a7bc889e21bfa58720793fb902d1e070695d87c6d0/pandas-3.0.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:339dda302bd8369dedeae979cb750e484d549b563c3f54f3922cb8ff4978c5eb", size = 10757067, upload-time = "2026-03-31T06:46:14.903Z" }, + { url = "https://files.pythonhosted.org/packages/20/17/ec40d981705654853726e7ac9aea9ddbb4a5d9cf54d8472222f4f3de06c2/pandas-3.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61c2fd96d72b983a9891b2598f286befd4ad262161a609c92dc1652544b46b76", size = 11258787, upload-time = "2026-03-31T06:46:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/90/e3/3f1126d43d3702ca8773871a81c9f15122a1f412342cc56284ffda5b1f70/pandas-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c934008c733b8bbea273ea308b73b3156f0181e5b72960790b09c18a2794fe1e", size = 11771616, upload-time = "2026-03-31T06:46:20.532Z" }, + { url = "https://files.pythonhosted.org/packages/2e/cf/0f4e268e1f5062e44a6bda9f925806721cd4c95c2b808a4c82ebe914f96b/pandas-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:60a80bb4feacbef5e1447a3f82c33209c8b7e07f28d805cfd1fb951e5cb443aa", size = 12337623, upload-time = "2026-03-31T06:46:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/44/a0/97a6339859d4acb2536efb24feb6708e82f7d33b2ed7e036f2983fcced82/pandas-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:ed72cb3f45190874eb579c64fa92d9df74e98fd63e2be7f62bce5ace0ade61df", size = 9897372, upload-time = "2026-03-31T06:46:26.703Z" }, + { url = "https://files.pythonhosted.org/packages/8f/eb/781516b808a99ddf288143cec46b342b3016c3414d137da1fdc3290d8860/pandas-3.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f12b1a9e332c01e09510586f8ca9b108fd631fd656af82e452d7315ef6df5f9f", size = 9154922, upload-time = "2026-03-31T06:46:30.284Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b0/c20bd4d6d3f736e6bd6b55794e9cd0a617b858eaad27c8f410ea05d953b7/pandas-3.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18", size = 10347921, upload-time = "2026-03-31T06:46:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/35/d0/4831af68ce30cc2d03c697bea8450e3225a835ef497d0d70f31b8cdde965/pandas-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:970762605cff1ca0d3f71ed4f3a769ea8f85fc8e6348f6e110b8fea7e6eb5a14", size = 9888127, upload-time = "2026-03-31T06:46:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/61/a9/16ea9346e1fc4a96e2896242d9bc674764fb9049b0044c0132502f7a771e/pandas-3.0.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aff4e6f4d722e0652707d7bcb190c445fe58428500c6d16005b02401764b1b3d", size = 10399577, upload-time = "2026-03-31T06:46:39.224Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a8/3a61a721472959ab0ce865ef05d10b0d6bfe27ce8801c99f33d4fa996e65/pandas-3.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f", size = 10880030, upload-time = "2026-03-31T06:46:42.412Z" }, + { url = "https://files.pythonhosted.org/packages/da/65/7225c0ea4d6ce9cb2160a7fb7f39804871049f016e74782e5dade4d14109/pandas-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f8d68083e49e16b84734eb1a4dcae4259a75c90fb6e2251ab9a00b61120c06ab", size = 11409468, upload-time = "2026-03-31T06:46:45.2Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/46e7c76032639f2132359b5cf4c785dd8cf9aea5ea64699eac752f02b9db/pandas-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:32cc41f310ebd4a296d93515fcac312216adfedb1894e879303987b8f1e2b97d", size = 11936381, upload-time = "2026-03-31T06:46:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8b/721a9cff6fa6a91b162eb51019c6243b82b3226c71bb6c8ef4a9bd65cbc6/pandas-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:a4785e1d6547d8427c5208b748ae2efb64659a21bd82bf440d4262d02bfa02a4", size = 9744993, upload-time = "2026-03-31T06:46:51.488Z" }, + { url = "https://files.pythonhosted.org/packages/d5/18/7f0bd34ae27b28159aa80f2a6799f47fda34f7fb938a76e20c7b7fe3b200/pandas-3.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:08504503f7101300107ecdc8df73658e4347586db5cfdadabc1592e9d7e7a0fd", size = 9056118, upload-time = "2026-03-31T06:46:54.548Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ca/3e639a1ea6fcd0617ca4e8ca45f62a74de33a56ae6cd552735470b22c8d3/pandas-3.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5918ba197c951dec132b0c5929a00c0bf05d5942f590d3c10a807f6e15a57d3", size = 10321105, upload-time = "2026-03-31T06:46:57.327Z" }, + { url = "https://files.pythonhosted.org/packages/0b/77/dbc82ff2fb0e63c6564356682bf201edff0ba16c98630d21a1fb312a8182/pandas-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d606a041c89c0a474a4702d532ab7e73a14fe35c8d427b972a625c8e46373668", size = 9864088, upload-time = "2026-03-31T06:46:59.935Z" }, + { url = "https://files.pythonhosted.org/packages/5c/2b/341f1b04bbca2e17e13cd3f08c215b70ef2c60c5356ef1e8c6857449edc7/pandas-3.0.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:710246ba0616e86891b58ab95f2495143bb2bc83ab6b06747c74216f583a6ac9", size = 10369066, upload-time = "2026-03-31T06:47:02.792Z" }, + { url = "https://files.pythonhosted.org/packages/12/c5/cbb1ffefb20a93d3f0e1fdcda699fb84976210d411b008f97f48bf6ce27e/pandas-3.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d3cfe227c725b1f3dff4278b43d8c784656a42a9325b63af6b1492a8232209e", size = 10876780, upload-time = "2026-03-31T06:47:06.205Z" }, + { url = "https://files.pythonhosted.org/packages/98/fe/2249ae5e0a69bd0ddf17353d0a5d26611d70970111f5b3600cdc8be883e7/pandas-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c3b723df9087a9a9a840e263ebd9f88b64a12075d1bf2ea401a5a42f254f084d", size = 11375181, upload-time = "2026-03-31T06:47:09.383Z" }, + { url = "https://files.pythonhosted.org/packages/de/64/77a38b09e70b6464883b8d7584ab543e748e42c1b5d337a2ee088e0df741/pandas-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3096110bf9eac0070b7208465f2740e2d8a670d5cb6530b5bb884eca495fd39", size = 11928899, upload-time = "2026-03-31T06:47:12.686Z" }, + { url = "https://files.pythonhosted.org/packages/5e/52/42855bf626868413f761addd574acc6195880ae247a5346477a4361c3acb/pandas-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:07a10f5c36512eead51bc578eb3354ad17578b22c013d89a796ab5eee90cd991", size = 9746574, upload-time = "2026-03-31T06:47:15.64Z" }, + { url = "https://files.pythonhosted.org/packages/88/39/21304ae06a25e8bf9fc820d69b29b2c495b2ae580d1e143146c309941760/pandas-3.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:5fdbfa05931071aba28b408e59226186b01eb5e92bea2ab78b65863ca3228d84", size = 9047156, upload-time = "2026-03-31T06:47:18.595Z" }, + { url = "https://files.pythonhosted.org/packages/72/20/7defa8b27d4f330a903bb68eea33be07d839c5ea6bdda54174efcec0e1d2/pandas-3.0.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:dbc20dea3b9e27d0e66d74c42b2d0c1bed9c2ffe92adea33633e3bedeb5ac235", size = 10756238, upload-time = "2026-03-31T06:47:22.012Z" }, + { url = "https://files.pythonhosted.org/packages/e9/95/49433c14862c636afc0e9b2db83ff16b3ad92959364e52b2955e44c8e94c/pandas-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b75c347eff42497452116ce05ef461822d97ce5b9ff8df6edacb8076092c855d", size = 10408520, upload-time = "2026-03-31T06:47:25.197Z" }, + { url = "https://files.pythonhosted.org/packages/3b/f8/462ad2b5881d6b8ec8e5f7ed2ea1893faa02290d13870a1600fe72ad8efc/pandas-3.0.2-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1478075142e83a5571782ad007fb201ed074bdeac7ebcc8890c71442e96adf7", size = 10324154, upload-time = "2026-03-31T06:47:28.097Z" }, + { url = "https://files.pythonhosted.org/packages/0a/65/d1e69b649cbcddda23ad6e4c40ef935340f6f652a006e5cbc3555ac8adb3/pandas-3.0.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5880314e69e763d4c8b27937090de570f1fb8d027059a7ada3f7f8e98bdcb677", size = 10714449, upload-time = "2026-03-31T06:47:30.85Z" }, + { url = "https://files.pythonhosted.org/packages/47/a4/85b59bc65b8190ea3689882db6cdf32a5003c0ccd5a586c30fdcc3ffc4fc/pandas-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b5329e26898896f06035241a626d7c335daa479b9bbc82be7c2742d048e41172", size = 11338475, upload-time = "2026-03-31T06:47:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c4/bc6966c6e38e5d9478b935272d124d80a589511ed1612a5d21d36f664c68/pandas-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:81526c4afd31971f8b62671442a4b2b51e0aa9acc3819c9f0f12a28b6fcf85f1", size = 11786568, upload-time = "2026-03-31T06:47:36.941Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/09298ca9740beed1d3504e073d67e128aa07e5ca5ca2824b0c674c0b8676/pandas-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:7cadd7e9a44ec13b621aec60f9150e744cfc7a3dd32924a7e2f45edff31823b0", size = 10488652, upload-time = "2026-03-31T06:47:40.612Z" }, + { url = "https://files.pythonhosted.org/packages/bb/40/c6ea527147c73b24fc15c891c3fcffe9c019793119c5742b8784a062c7db/pandas-3.0.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:db0dbfd2a6cdf3770aa60464d50333d8f3d9165b2f2671bcc299b72de5a6677b", size = 10326084, upload-time = "2026-03-31T06:47:43.834Z" }, + { url = "https://files.pythonhosted.org/packages/95/25/bdb9326c3b5455f8d4d3549fce7abcf967259de146fe2cf7a82368141948/pandas-3.0.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288", size = 9914146, upload-time = "2026-03-31T06:47:46.67Z" }, + { url = "https://files.pythonhosted.org/packages/8d/77/3a227ff3337aa376c60d288e1d61c5d097131d0ac71f954d90a8f369e422/pandas-3.0.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01f31a546acd5574ef77fe199bc90b55527c225c20ccda6601cf6b0fd5ed597c", size = 10444081, upload-time = "2026-03-31T06:47:49.681Z" }, + { url = "https://files.pythonhosted.org/packages/15/88/3cdd54fa279341afa10acf8d2b503556b1375245dccc9315659f795dd2e9/pandas-3.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535", size = 10897535, upload-time = "2026-03-31T06:47:53.033Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/98cc7a7624f7932e40f434299260e2917b090a579d75937cb8a57b9d2de3/pandas-3.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f48afd9bb13300ffb5a3316973324c787054ba6665cda0da3fbd67f451995db", size = 11446992, upload-time = "2026-03-31T06:47:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/9a/cd/19ff605cc3760e80602e6826ddef2824d8e7050ed80f2e11c4b079741dc3/pandas-3.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6c4d8458b97a35717b62469a4ea0e85abd5ed8687277f5ccfc67f8a5126f8c53", size = 11968257, upload-time = "2026-03-31T06:47:59.137Z" }, + { url = "https://files.pythonhosted.org/packages/db/60/aba6a38de456e7341285102bede27514795c1eaa353bc0e7638b6b785356/pandas-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf", size = 9865893, upload-time = "2026-03-31T06:48:02.038Z" }, + { url = "https://files.pythonhosted.org/packages/08/71/e5ec979dd2e8a093dacb8864598c0ff59a0cee0bbcdc0bfec16a51684d4f/pandas-3.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:63d141b56ef686f7f0d714cfb8de4e320475b86bf4b620aa0b7da89af8cbdbbb", size = 9188644, upload-time = "2026-03-31T06:48:05.045Z" }, + { url = "https://files.pythonhosted.org/packages/f1/6c/7b45d85db19cae1eb524f2418ceaa9d85965dcf7b764ed151386b7c540f0/pandas-3.0.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:140f0cffb1fa2524e874dde5b477d9defe10780d8e9e220d259b2c0874c89d9d", size = 10776246, upload-time = "2026-03-31T06:48:07.789Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3e/7b00648b086c106e81766f25322b48aa8dfa95b55e621dbdf2fdd413a117/pandas-3.0.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae37e833ff4fed0ba352f6bdd8b73ba3ab3256a85e54edfd1ab51ae40cca0af8", size = 10424801, upload-time = "2026-03-31T06:48:10.897Z" }, + { url = "https://files.pythonhosted.org/packages/da/6e/558dd09a71b53b4008e7fc8a98ec6d447e9bfb63cdaeea10e5eb9b2dabe8/pandas-3.0.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d888a5c678a419a5bb41a2a93818e8ed9fd3172246555c0b37b7cc27027effd", size = 10345643, upload-time = "2026-03-31T06:48:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/be/e3/921c93b4d9a280409451dc8d07b062b503bbec0531d2627e73a756e99a82/pandas-3.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b444dc64c079e84df91baa8bf613d58405645461cabca929d9178f2cd392398d", size = 10743641, upload-time = "2026-03-31T06:48:16.659Z" }, + { url = "https://files.pythonhosted.org/packages/56/ca/fd17286f24fa3b4d067965d8d5d7e14fe557dd4f979a0b068ac0deaf8228/pandas-3.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4544c7a54920de8eeacaa1466a6b7268ecfbc9bc64ab4dbb89c6bbe94d5e0660", size = 11361993, upload-time = "2026-03-31T06:48:19.475Z" }, + { url = "https://files.pythonhosted.org/packages/e4/a5/2f6ed612056819de445a433ca1f2821ac3dab7f150d569a59e9cc105de1d/pandas-3.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:734be7551687c00fbd760dc0522ed974f82ad230d4a10f54bf51b80d44a08702", size = 11815274, upload-time = "2026-03-31T06:48:22.695Z" }, + { url = "https://files.pythonhosted.org/packages/00/2f/b622683e99ec3ce00b0854bac9e80868592c5b051733f2cf3a868e5fea26/pandas-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:57a07209bebcbcf768d2d13c9b78b852f9a15978dac41b9e6421a81ad4cdd276", size = 10888530, upload-time = "2026-03-31T06:48:25.806Z" }, + { url = "https://files.pythonhosted.org/packages/cb/2b/f8434233fab2bd66a02ec014febe4e5adced20e2693e0e90a07d118ed30e/pandas-3.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", size = 9455341, upload-time = "2026-03-31T06:48:28.418Z" }, +] + +[[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 = "pathspec" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/17/9c3094b822982b9f1ea666d8580ce59000f61f87c1663556fb72031ad9ec/pathspec-1.1.0.tar.gz", hash = "sha256:f5d7c555da02fd8dde3e4a2354b6aba817a89112fa8f333f7917a2a4834dd080", size = 133918, upload-time = "2026-04-23T01:46:22.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/c9/8eed0486f074e9f1ca7f8ce5ad663e65f12fdab344028d658fa1b03d35e0/pathspec-1.1.0-py3-none-any.whl", hash = "sha256:574b128f7456bd899045ccd142dd446af7e6cfd0072d63ad73fbc55fbb4aaa42", size = 56264, upload-time = "2026-04-23T01:46:20.606Z" }, +] + +[[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.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/48/83/0d7d4e9efe3344b8e2fe25d93be44f64b65364d3c8d7bc6dc90198d5422e/pip-26.0.1.tar.gz", hash = "sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8", size = 1812747, upload-time = "2026-02-05T02:20:18.702Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl", hash = "sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b", size = 1787723, upload-time = "2026-02-05T02:20:16.416Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pooch" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "platformdirs" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/43/85ef45e8b36c6a48546af7b266592dc32d7f67837a6514d111bced6d7d75/pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed", size = 61788, upload-time = "2026-01-30T19:15:09.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2d/d4bf65e47cea8ff2c794a600c4fd1273a7902f268757c531e0ee9f18aa58/pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b", size = 67175, upload-time = "2026-01-30T19:15:08.36Z" }, +] + +[[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 = "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 = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, +] + +[[package]] +name = "pycodestyle" +version = "2.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, +] + +[[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 = "pyfftw" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/3f/ee1bc44b080fc1e81d293cd07bed563d254bc1997d63a3b8053804a87dfd/pyfftw-0.15.0.tar.gz", hash = "sha256:2f16b9854a40c8fdd10aa5803b24ddc6ab49f9cd559dbd7f07e7d61aa205c1ca", size = 164003, upload-time = "2024-11-06T16:01:19.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/66/99e0497a2dc8ff67aca6c23734895662b1885fce150a836de60ba9644ec6/pyFFTW-0.15.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:2c35205209dde186669b90eeda92ca6837dfff4814edc5aebb01536b32760eb0", size = 2835727, upload-time = "2024-11-06T16:00:34.678Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2a/9eb5c7aa582bdb0ba25d0ef522281ffa5ff0e34a1cc9d0fb564ee019239a/pyFFTW-0.15.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:28bb5888342114950b2d7df268264863c5644f34130a7fdc0acabd05c885d486", size = 1272455, upload-time = "2024-11-06T16:00:36.636Z" }, + { url = "https://files.pythonhosted.org/packages/af/13/e1c59f3a659ce6712d999b5315c22e547a75f1cc5f171f3cdb9ceae13474/pyFFTW-0.15.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5748f2d85d790684efd895ce8f3611cceedb75fde944c4788753e0ba1a88637a", size = 2449453, upload-time = "2024-11-06T16:00:38.491Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b6/55a5033fd41d7b69d3ff9991d7f170f1f90a4463953a0c85011c7c87d739/pyFFTW-0.15.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f8fe9c361bb69f58c9488d4d267047f94cfcea89ba7cd1ce6a148f807be88c6c", size = 3054268, upload-time = "2024-11-06T16:00:39.891Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f9/32cc147de14e30fd674a53097fc11e12a161bf88d120fbc4b5a3013e3ef1/pyFFTW-0.15.0-cp310-cp310-win32.whl", hash = "sha256:79a90799d4a4fc8d2c06b545e29a5e0575df81d0b9d131b20476a287f18817ee", size = 2234523, upload-time = "2024-11-06T16:00:41.222Z" }, + { url = "https://files.pythonhosted.org/packages/e0/dc/c469ccb4a06fa530cb34d7c61885cede184c3c0f39c873fb14bbc6c0450c/pyFFTW-0.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:80ed625c8e8b6c1ba3ba6741ca0c7584c62ac0d99d9d33d7b4617c5087977aa0", size = 2642503, upload-time = "2024-11-06T16:00:42.924Z" }, + { url = "https://files.pythonhosted.org/packages/17/6e/325833415acbb267b1533ea8c5dcd243df8b5bb3ecbc6e42778514859dfe/pyFFTW-0.15.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:facabac06cb2300fdfcb1cfab9af70b24380d24a725a9b4dbf8cdadf04c1a6c0", size = 2836851, upload-time = "2024-11-06T16:00:45.177Z" }, + { url = "https://files.pythonhosted.org/packages/11/cf/3e6e1fbb4dda9718682b38109018240a631f9078f659eea4add2189a6e6f/pyFFTW-0.15.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:730e86d23ea52a511fd3b0a0b8206dbe9f9f017522dabb838a7ca876e442ea8a", size = 1273108, upload-time = "2024-11-06T16:00:46.607Z" }, + { url = "https://files.pythonhosted.org/packages/41/b8/69fa1a05a9c1830fefa3805c0b67f43a5a6fa3d83950f2ab088b80826378/pyFFTW-0.15.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b8ab3ad5b6fadf64e34be2fdc34c9cc2b767b33c7a1b0f3e778f4b3fac0b2566", size = 2506868, upload-time = "2024-11-06T16:00:48.197Z" }, + { url = "https://files.pythonhosted.org/packages/29/ca/f9035218cbf7986f214bbe57bfb1f2951d344a0baf601d8ee065d0422e07/pyFFTW-0.15.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:076c42a2b8841fc06fc592d812bfa41a85355dc7f79b6f51016ce981a35efc97", size = 3111543, upload-time = "2024-11-06T16:00:50.044Z" }, + { url = "https://files.pythonhosted.org/packages/1e/68/8c56e66ab9903440a41c3859409c2ec06b218c187c859c432d954002e778/pyFFTW-0.15.0-cp311-cp311-win32.whl", hash = "sha256:5c50580ac16173fb547d18ad089148f030ef48a0f1f3b2faf3bb522b7f9fd8b6", size = 2234192, upload-time = "2024-11-06T16:00:52.23Z" }, + { url = "https://files.pythonhosted.org/packages/91/cf/1b8ba1f0c8fb91f2caaf0ff30011a8289d7732b21cfc812b826222cafbaa/pyFFTW-0.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:553d62715e8e9ad20c6a6aa556846d785488f16fa2a518abcac58ae3c7087654", size = 2643265, upload-time = "2024-11-06T16:00:53.542Z" }, + { url = "https://files.pythonhosted.org/packages/08/5d/5d30a3a39bbe1e1d083d8efe23a62f1deacc445a82e3a55289b820f0ad9d/pyFFTW-0.15.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:27410a9ac0e4ad7821a564549be031d5422d9a96bb35ea63d2d324774f709b65", size = 2833540, upload-time = "2024-11-06T16:00:54.985Z" }, + { url = "https://files.pythonhosted.org/packages/4b/dc/ff9969669fcbff0972c1a96a116fa7efad763d136fc9a58f6112bf770688/pyFFTW-0.15.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cd8bfb4a9e844693f8dd92ba97bc91d27404716b70580f846e80d74f6b092ffe", size = 1270715, upload-time = "2024-11-06T16:00:56.743Z" }, + { url = "https://files.pythonhosted.org/packages/c7/1c/30bc73495966285fdd3e79a4a7482dbdd863e505bf3021a455bf7b923423/pyFFTW-0.15.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7d08f75ed35c0af097333b2de368a0b30460a3e7e7bed47780aac3c27f9ec77b", size = 2499664, upload-time = "2024-11-06T16:00:58.166Z" }, + { url = "https://files.pythonhosted.org/packages/6d/81/e5f5769f08aa3efa9527b328a9ebac7a2817f81a2b0f2266e79276686f31/pyFFTW-0.15.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7ccae636ad163133bc5335d05f56afdb0c756ee013692c667b822a11e188a446", size = 3100310, upload-time = "2024-11-06T16:00:59.548Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/18c12dfb07b82a93b9b459380e2f118afd139cc564e1575624794b15e68d/pyFFTW-0.15.0-cp312-cp312-win32.whl", hash = "sha256:b4963a55b442c859ede2d247d84daa71c6c01b64e0d9b2730f5635b962777fb2", size = 2229927, upload-time = "2024-11-06T16:01:01.315Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d2/cb3fc49bffb2f7cb49da6dbc67888c9c55df1aca6d11c6d1d000e37fc64f/pyFFTW-0.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:6ace61f34f0dd7973207c31ce16fd7bedf9a178bb956f157559f13384f219713", size = 2641096, upload-time = "2024-11-06T16:01:02.928Z" }, + { url = "https://files.pythonhosted.org/packages/a1/0d/90821a720638cbef79319463e3ce5d98f24153cee53316d4ecc1d8c0400d/pyFFTW-0.15.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:cfbeb106877db1b6bf527735647b861c86ac846ff47671d0d855a9be2de83368", size = 2832851, upload-time = "2024-11-06T16:01:04.301Z" }, + { url = "https://files.pythonhosted.org/packages/12/b7/e625f0cdb2bd65aa43ee35ce8cac1b0abc6c12871cd87fa83e404d82fd1d/pyFFTW-0.15.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6d8913036a48ebcc9e3e1a315a6607e5cc31af4aee395aae180ff644c4658bbb", size = 1269651, upload-time = "2024-11-06T16:01:06.419Z" }, + { url = "https://files.pythonhosted.org/packages/0f/66/d12a9629908008ed97446c44ca2177c8f59e570a445da4136fdbb9e8db1c/pyFFTW-0.15.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:05324c8c092aa43868554daf6ddd7fd23eee18cd284ab68e749c62427c662737", size = 2496935, upload-time = "2024-11-06T16:01:07.82Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c4/adcf010b151564401e3d401602b0e0cacae1e7cb816f0207397c3ddec626/pyFFTW-0.15.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:474f4a0ccfddfdfbe3e4a610b1c8f5968b58edf44434bf9d08ea52108a72df54", size = 3096170, upload-time = "2024-11-06T16:01:09.258Z" }, + { url = "https://files.pythonhosted.org/packages/b2/96/b1eaad07d5eaf026e2ed0c6f2afdf825628706162071d2665b3824727346/pyFFTW-0.15.0-cp313-cp313-win32.whl", hash = "sha256:40f8f3341546264178a8d9e8736e91554884595a683b71f8db8399907330f47d", size = 2229713, upload-time = "2024-11-06T16:01:10.902Z" }, + { url = "https://files.pythonhosted.org/packages/e9/23/d06a3e5b549f7537ada2b1fc2e5f7c05c38df70c843d463bc469812b1ebd/pyFFTW-0.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:bf04458c5d2fbfe5da270a4b667c59c5792cbe39300379d886acd8ea97fc55cc", size = 2640821, upload-time = "2024-11-06T16:01:12.234Z" }, + { url = "https://files.pythonhosted.org/packages/f2/5b/060fb5f48773dc1be3abd4d495a7b0fd02aeb6be57cb6bac214d1fd75447/pyFFTW-0.15.0-pp310-pypy310_pp73-macosx_12_0_x86_64.whl", hash = "sha256:e94576643406ffd4dc29851e4d493c8bfb3bde8390661b7fced050c1e6ff99ac", size = 2810336, upload-time = "2024-11-06T16:01:14.05Z" }, + { url = "https://files.pythonhosted.org/packages/46/5f/ee1692303b7cc15cdaf56861de6da8e12d001f4c45883832ffd26827b777/pyFFTW-0.15.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ca1dbb5e86121f24b637413584224dda129774d661be1640f092156f4088b3bf", size = 2570190, upload-time = "2024-11-06T16:01:15.496Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/b66be24aec24a1e59c8c7a04d58b446af15b809a53d70626acba7e865853/pyFFTW-0.15.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9ff6b656058f4099db30a5b5d01c7c1c6503c02a68f07398008a094c374d53c5", size = 2627837, upload-time = "2024-11-06T16:01:16.917Z" }, +] + +[[package]] +name = "pyfftw" +version = "0.15.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/2d/e38439b7f937e8bf91a9ff2b8d9713d0d8e64e980fc00e8d1945b8a5b74b/pyfftw-0.15.1.tar.gz", hash = "sha256:bbcde6d40d165e1cbaf12dde062ebfebe9e43394cac8c166e699ba2c9a4b0461", size = 192838, upload-time = "2025-10-22T19:58:56.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/c0/4f1a586eed5eba86c27d6fab4ebed44bbfeedd5209e835c19c6406f96a41/pyfftw-0.15.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:fb5283238be3c797b7b91cbb1d549787b9d0495a7d48b828832a3c94fa557f48", size = 3297881, upload-time = "2025-10-22T19:58:20.945Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c1/02eaaf7a2f7ca26d7b56b6195617979b44b9213f3dcc1a514663a3bbc264/pyfftw-0.15.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f4b42864e95f128a676e27a94025cce074d807a81d48ed423c65aa7403a7729a", size = 1682075, upload-time = "2025-10-22T19:58:22.236Z" }, + { url = "https://files.pythonhosted.org/packages/c6/23/e3692116f6e903d1d9705d1f948f94ee133512a0b388d05ea0f8adcb0c07/pyfftw-0.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e728dbe262182089a6606b7feb5c67bc55b8b385b0c1b60f71d6a891b5f142a", size = 2557646, upload-time = "2025-10-22T19:58:23.345Z" }, + { url = "https://files.pythonhosted.org/packages/7a/49/affa553caa93928d2f7d814f26939487d37d4068a0ba4d8238c6ba3000b1/pyfftw-0.15.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:294eecf05577b0198e6d041376e016254c4b54040b8a7a330d9d6321b8b30472", size = 3158494, upload-time = "2025-10-22T19:58:24.63Z" }, + { url = "https://files.pythonhosted.org/packages/88/92/bde713b499fa2062f30f396603bbf09acd0c9c974249638202c931433498/pyfftw-0.15.1-cp311-cp311-win32.whl", hash = "sha256:ed42033aa729520c66500027157525981613a139c2fd4671dd7d52d58cb4b820", size = 2226331, upload-time = "2025-10-22T19:58:26.345Z" }, + { url = "https://files.pythonhosted.org/packages/25/f4/e0583a68e1114b108354207ce0680b898a4b37c48bd3a8cfc1fd0ec1a476/pyfftw-0.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:e32a30c34f27c24ee602b89b22d9cd453570bf851e7d8f98506185cb5e99ccfc", size = 2634855, upload-time = "2025-10-22T19:58:27.839Z" }, + { url = "https://files.pythonhosted.org/packages/4f/76/5673561606f45c60ab3da497deead308e2c4b59c2b705334a01b880f0421/pyfftw-0.15.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:074926b5fa6a2193771cb4dc5beaa52ea1d629dc40da363d7de7918df5f3e951", size = 3315083, upload-time = "2025-10-22T19:58:28.981Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fb/5042ad5c4ddc2db89844fc853b6358d36497e44f9d32f3aef9c3fa393182/pyfftw-0.15.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2156d7bc72a2e2a1c747767909b1a7ba2bcfde14a51fca3171d7c1f8de6c2f02", size = 1698218, upload-time = "2025-10-22T19:58:30.536Z" }, + { url = "https://files.pythonhosted.org/packages/df/1c/7b76808da67a3775480f64e93acc0a623aad7682ba83428311de05ebc67a/pyfftw-0.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:313340683d5e99b0a36e45b8c2bd92cd86dfbb18917a62e89890927a66bed9e9", size = 2562434, upload-time = "2025-10-22T19:58:31.531Z" }, + { url = "https://files.pythonhosted.org/packages/fb/43/43fbc63ec6790ce6346e6441e82b54356334641d9d6f099f1ed75d302f2a/pyfftw-0.15.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900d79c7fa1b27b58ec4240f7cb6d512492a9db9bc8cbd18076ed28c84a63b62", size = 3167162, upload-time = "2025-10-22T19:58:32.636Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e1/82d4967ef4ccd8c17e58a9a34fa283436de98c32c08aac4191ef56bf9989/pyfftw-0.15.1-cp312-cp312-win32.whl", hash = "sha256:9c94a6d251f2ceb9d6bb86964c43f9eb9cbd8612a60f41b10c8a64e816f6a2ed", size = 2222298, upload-time = "2025-10-22T19:58:33.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/c0/3f4513921fd3cb40986bc6fe4a33e87c5aef671edff483db6f7c4a5f8309/pyfftw-0.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:74fe153d6bec682cd85b5601df09cb84ce6e3cc901172a3ce86da7544e457e4c", size = 2633571, upload-time = "2025-10-22T19:58:35.185Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f5/5dca09b863e71db438069eb1990526a4409deebc190228177dec3b7cc636/pyfftw-0.15.1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:a16c4eb45ff5277f8bcb979d43a6a0d7f2e7405dcad984dc45a30064ed487da9", size = 3315212, upload-time = "2025-10-22T19:58:36.273Z" }, + { url = "https://files.pythonhosted.org/packages/56/c1/1ff9aa930f98c77bbff9cae122e496f1fd7201abac309f1dbcc9fbe5c7ee/pyfftw-0.15.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:2b4bad0184546e3129eeda9d07541eca71232f6e431d57c734930d25f06386e8", size = 1698270, upload-time = "2025-10-22T19:58:37.684Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3f/e94d5773429dc076ec4b47d029603de1728a5037024ed3dbcc853cfa72e9/pyfftw-0.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1716378d1d102527917b872a5baf15e2e3de52d5200ccc22128816cd71c33148", size = 2559574, upload-time = "2025-10-22T19:58:38.662Z" }, + { url = "https://files.pythonhosted.org/packages/cb/64/5f773d61cca91a1a741e2403d7191610513d0cca3fc73a41a6941a31fe89/pyfftw-0.15.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:16209de9a244ab7b3337e8ce8d528420ffd05881e7d19e5be21d2546a7e5b2c1", size = 3166906, upload-time = "2025-10-22T19:58:39.986Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8a/dda252557803fde20be41396425a85faf6680eaeed3996e4b765745e9206/pyfftw-0.15.1-cp313-cp313-win32.whl", hash = "sha256:db2a65c59d7a707c55a8f0f38be3916b907429ceed316c6875201b202e22ac99", size = 2222209, upload-time = "2025-10-22T19:58:41.237Z" }, + { url = "https://files.pythonhosted.org/packages/20/6b/9236a2fb77b01b00b957304d53694de2bf034caac89c1d35ab7fa3421fd9/pyfftw-0.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:dcac51a5a4b8c6600bb2c7edb86d9739860a61bb0b076e20fbf0340919da307d", size = 2633673, upload-time = "2025-10-22T19:58:42.709Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5c/ec4cef958e936ac61528644825d052c1c486192aeffadf071071a17cd86a/pyfftw-0.15.1-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:c4e49219794bfe99c7db94d0b392c86ff979db4da2d27d444edbc6de1519ddae", size = 3313756, upload-time = "2025-10-22T19:58:44.002Z" }, + { url = "https://files.pythonhosted.org/packages/d3/68/39e06bab39edf6473653670c6c25fe971a7b369a2059ddc971ac5f872653/pyfftw-0.15.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:489a6364a613935736d43da67791ab4dfcf4875e968a8b46e99983afde7ec960", size = 1697163, upload-time = "2025-10-22T19:58:45.592Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4d/9ae0dfaf5174a13714cfc5377165de5703230c1df96715cfee9d19fb0b4c/pyfftw-0.15.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:379844360c03402f4d2a738fa19924153d5467cdc88aa3752b12bbc1403512b0", size = 2561755, upload-time = "2025-10-22T19:58:46.773Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/bc991e3abf4f6ad9907658e3b282530d345027fa294b510a9eb1fce882c4/pyfftw-0.15.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:398a342a689061bfc4bfe7271a973e093f78176a632fb4e523b3ed5b72dba4c6", size = 3156174, upload-time = "2025-10-22T19:58:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5d/c0a9782c333e8b5de334285e3adc0542f2265107d0c9b720f5730bc43471/pyfftw-0.15.1-cp314-cp314-win32.whl", hash = "sha256:375ec8b11140eb30262bf9ecfa34d043a42d036c33c66e24bfe734f5aae7ddf0", size = 2245736, upload-time = "2025-10-22T19:58:49.422Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c7/ba88f0b5d81ae0732a2cb2900c52924ddfa6b1623e511533c022a558e058/pyfftw-0.15.1-cp314-cp314-win_amd64.whl", hash = "sha256:558c318a1aea81ce2083309c927fd881ccf9c285c5571ce965bb7b18dc4291fd", size = 2660474, upload-time = "2025-10-22T19:58:50.93Z" }, + { url = "https://files.pythonhosted.org/packages/88/45/a34cd015d16002e748de0e218d24ecc2f30eb9ad073f1c7941a51a796a2e/pyfftw-0.15.1-pp311-pypy311_pp73-macosx_13_0_x86_64.whl", hash = "sha256:41a25b721e79378a3ea29d21d2e6cf25e43c1f44bc0bbf554beccdcdb2b8064e", size = 3278795, upload-time = "2025-10-22T19:58:52.212Z" }, + { url = "https://files.pythonhosted.org/packages/15/27/0e6195c9c5eeef73a7499772621057aff5ffd04ebb52a71d49cc049a3dad/pyfftw-0.15.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e957f5caa7ccc032d17831ce336cb61b93f516ed7da25ea6c9e1086ed2e323f", size = 2570541, upload-time = "2025-10-22T19:58:53.357Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a9/f1d00acce882645198576a94c4b7fff5465f0bb6c4b7bb1005314527c2d0/pyfftw-0.15.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:763cd58e858133493db371ed3a63e9e41463cd40965e2375a079947c2d96805f", size = 2625398, upload-time = "2025-10-22T19:58:54.893Z" }, +] + +[[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 = "pygments-styles" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/2c/3886ed4783dd78bb62ccab7d43380f526a7e2ff0db8c77d9c87559b2f5de/pygments_styles-0.3.0.tar.gz", hash = "sha256:67746b8fc6ff72c1179ca4d9a8bc89c7f54c196c2ff9d087f07392cd6fde3ecf", size = 15258, upload-time = "2025-11-04T13:15:23.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/64/7e0266f0c541e26df86c31d2add9be3dd9914ae83785ce0aba7cbb693667/pygments_styles-0.3.0-py3-none-any.whl", hash = "sha256:c6c45e9939eb7590345bc9084113bac46c45f12b009d13422be02e80e84a034c", size = 36617, upload-time = "2025-11-04T13:15:21.989Z" }, +] + +[[package]] +name = "pylops" +source = { editable = "." } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[package.optional-dependencies] +advanced = [ + { name = "astra-toolbox", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "devito" }, + { name = "dtcwt" }, + { name = "llvmlite" }, + { name = "numba" }, + { name = "pyfftw", version = "0.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pyfftw", version = "0.15.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pywavelets", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pywavelets", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scikit-fmm" }, + { name = "spgl1" }, +] +deep = [ + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jax", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-6-pylops-deep') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "torch", version = "2.11.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-6-pylops-deep') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +deep-cu126 = [ + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, extra = ["cuda12"], marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jax", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, extra = ["cuda12"], marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "torch", version = "2.10.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" } }, +] +deep-cu128 = [ + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, extra = ["cuda12"], marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jax", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, extra = ["cuda12"], marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "torch", version = "2.10.0+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" } }, +] +deep-cu13 = [ + { name = "jax", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jax", version = "0.10.0", source = { registry = "https://pypi.org/simple" }, extra = ["cuda13"], marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "torch", version = "2.11.0", source = { registry = "https://pypi.org/simple" } }, +] +gpu-cu12 = [ + { name = "cupy-cuda12x" }, +] +gpu-cu13 = [ + { name = "cupy-cuda13x" }, +] +stat = [ + { name = "pymc", version = "5.25.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pymc", version = "5.28.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytensor", version = "2.31.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytensor", version = "2.38.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] + +[package.dev-dependencies] +dev = [ + { name = "autopep8" }, + { name = "coverage" }, + { name = "mypy" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "ruff" }, +] +doc = [ + { name = "image" }, + { name = "matplotlib" }, + { name = "nbsphinx" }, + { name = "numpydoc" }, + { name = "pooch" }, + { name = "shibuya" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx-design", version = "0.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx-design", version = "0.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx-gallery" }, + { name = "sphinx-iconify" }, + { name = "sphinxemoji" }, +] + +[package.metadata] +requires-dist = [ + { name = "astra-toolbox", marker = "sys_platform == 'linux' and extra == 'advanced'" }, + { name = "cupy-cuda12x", marker = "extra == 'gpu-cu12'" }, + { name = "cupy-cuda13x", marker = "extra == 'gpu-cu13'" }, + { name = "devito", marker = "extra == 'advanced'" }, + { name = "dtcwt", marker = "extra == 'advanced'" }, + { name = "jax", marker = "extra == 'deep'" }, + { name = "jax", extras = ["cuda12"], marker = "extra == 'deep-cu126'" }, + { name = "jax", extras = ["cuda12"], marker = "extra == 'deep-cu128'" }, + { name = "jax", extras = ["cuda13"], marker = "extra == 'deep-cu13'" }, + { name = "llvmlite", marker = "extra == 'advanced'" }, + { name = "numba", marker = "extra == 'advanced'" }, + { name = "numpy", specifier = ">=1.21.0" }, + { name = "pyfftw", marker = "extra == 'advanced'" }, + { name = "pymc", marker = "extra == 'stat'" }, + { name = "pytensor", marker = "extra == 'stat'" }, + { name = "pywavelets", marker = "extra == 'advanced'" }, + { name = "scikit-fmm", marker = "extra == 'advanced'" }, + { name = "scipy", specifier = ">=1.11.0" }, + { name = "spgl1", marker = "extra == 'advanced'" }, + { name = "torch", marker = "extra == 'deep'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "pylops", extra = "deep" } }, + { name = "torch", marker = "extra == 'deep-cu126'", specifier = "<2.11.0", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "pylops", extra = "deep-cu126" } }, + { name = "torch", marker = "extra == 'deep-cu128'", specifier = "<2.11.0", index = "https://download.pytorch.org/whl/cu128", conflict = { package = "pylops", extra = "deep-cu128" } }, + { name = "torch", marker = "extra == 'deep-cu13'", specifier = ">=2.11.0" }, +] +provides-extras = ["advanced", "deep", "deep-cu126", "deep-cu128", "deep-cu13", "gpu-cu12", "gpu-cu13", "stat"] + +[package.metadata.requires-dev] +dev = [ + { name = "autopep8" }, + { name = "coverage" }, + { name = "mypy" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "ruff" }, +] +doc = [ + { name = "image" }, + { name = "matplotlib" }, + { name = "nbsphinx" }, + { name = "numpydoc" }, + { name = "pooch" }, + { name = "shibuya" }, + { name = "sphinx" }, + { name = "sphinx-design" }, + { name = "sphinx-gallery" }, + { name = "sphinx-iconify" }, + { name = "sphinxemoji" }, +] + +[[package]] +name = "pymc" +version = "5.25.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "arviz", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "cachetools", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "cloudpickle", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytensor", version = "2.31.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "rich", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "threadpoolctl", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/f4/30ae01e539b7b1dc83578e1aedbc04567f76b48ba287fb31be6de0e0684d/pymc-5.25.1.tar.gz", hash = "sha256:9e739315c0547336b4c11127aae8b3750145b29cdd8e21609196594aa29c21f8", size = 487746, upload-time = "2025-07-24T11:57:04.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/62/1e973f657ffc91a0ca5a22723f3d7f4a3df946cb3832e23d8f29eb33647f/pymc-5.25.1-py3-none-any.whl", hash = "sha256:4e1185cf20052b9be44f2ac8705dc6c77ff7b8d347d920d5e28719d970d9fa15", size = 535526, upload-time = "2025-07-24T11:57:02.149Z" }, +] + +[[package]] +name = "pymc" +version = "5.28.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "arviz", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "cachetools", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "cloudpickle", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pytensor", version = "2.38.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "rich", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "threadpoolctl", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/91/0607c335ebd32b5fc7791d1480c1fe47d9072c8cd3d90048b198d10296bd/pymc-5.28.4.tar.gz", hash = "sha256:1ec3e0019a143a59c405403de09943c6f2fd7fefff8344eb8c3fd46575a0d474", size = 508109, upload-time = "2026-04-07T13:56:32.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/ff/5f6b264062e755da47fae79fa7796b7e31d512ad8a83526a11617aaf0e71/pymc-5.28.4-py3-none-any.whl", hash = "sha256:fa7fed29fa2317f76cacb42d8fdf28b17aa01a2766c7a12e693805922aa914c7", size = 562845, upload-time = "2026-04-07T13:56:29.912Z" }, +] + +[[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 = "pytensor" +version = "2.31.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "cons", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "etuples", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "filelock", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "logical-unification", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "minikanren", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/1b/77783110a06ce0afacab063c64f644ea0a450daffa76dcf1bbb09ae2d819/pytensor-2.31.7.tar.gz", hash = "sha256:0af99e240c95bc0223886eefb4343b0e9dc6fba349b70b107b3a6fbb9cb66409", size = 4431862, upload-time = "2025-07-09T00:34:30.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/75/ea4fb7bc3252f313c7a4d0d124aa9c8f020cb668300f3c4d742807383772/pytensor-2.31.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:142814427e0e82d8f3db83529faa6073d33ce9e571cb22096547af19016ad025", size = 1438513, upload-time = "2025-07-09T00:33:49.86Z" }, + { url = "https://files.pythonhosted.org/packages/ca/48/2de01b59238517308348ba97624e85781e6061a622bef71616df54e52256/pytensor-2.31.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70e262a5c4be0055f25dbbb8512c1eb2899cb80e6a630b95ea387356a825f823", size = 1892231, upload-time = "2025-07-09T00:33:52.094Z" }, + { url = "https://files.pythonhosted.org/packages/c2/68/8123d9794351e1b22f8d1ff8e4dce770e722b22d5bd58c9b0bd397540383/pytensor-2.31.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2343df3dc9eb46903a4c68591dcc36a05b2c9309a0748a47e3933a3864765d4d", size = 1908596, upload-time = "2025-07-09T00:33:54.262Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2a/33b5eb1c537f79e13a2f3aaf429bc6abed86148208181c76af64ddf4c396/pytensor-2.31.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58927b06df3168e9df005dadc2869613f4fba12ed6b49096e8a3fc29583aaa9d", size = 1918935, upload-time = "2025-07-09T00:33:56.32Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a2/3937ad756662120492ea926e22ba62c7c0606694139479e458d806ed9125/pytensor-2.31.7-cp310-cp310-win_amd64.whl", hash = "sha256:2ae4fca59c4858353b4025b48a09b07d80bced723369355b2284e357e5f15299", size = 1437758, upload-time = "2025-07-09T00:33:59.303Z" }, + { url = "https://files.pythonhosted.org/packages/3a/e8/bcc2b73e4e5d46663a10295358397c11dfb251ccc108e2129173532b80ce/pytensor-2.31.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5983ced37b9c91fe7fb6c8cc44b432e68bfb266ffc0cab145406fba578039acb", size = 1624436, upload-time = "2025-07-09T00:34:01.449Z" }, + { url = "https://files.pythonhosted.org/packages/fb/3d/b2e1e1e5d99d5273fa317cbbd27f3d70d688c287e4e2ccd3d81a93040aaa/pytensor-2.31.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f37c7b0ec42e2f5a0509b1753a0becac029dd902dad59360e24d5270d30d9c", size = 2109404, upload-time = "2025-07-09T00:34:03.182Z" }, + { url = "https://files.pythonhosted.org/packages/7b/00/76c159227f82d7ad62b9d4e5a13c55404d615eb969c5e4388c40b72acdef/pytensor-2.31.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:44bf1e2ee2e49cfbc95cc9fbeac4534dc18fc325735ad13ae8ef585cce7b7bf8", size = 2123068, upload-time = "2025-07-09T00:34:05.37Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ed/acf9bbb19f57cf8308700fdb41990163196ce10bd2dec15cbdc429609933/pytensor-2.31.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ff160177c7209f5803715e297d9052eff968f4ae50e3ad787ee496bf0fd53af", size = 2138152, upload-time = "2025-07-09T00:34:07.1Z" }, + { url = "https://files.pythonhosted.org/packages/6d/03/8eaf7204149b92cf3987c1ec1d9f976fef9ccf0a732e51eee9844aee1476/pytensor-2.31.7-cp311-cp311-win_amd64.whl", hash = "sha256:38acc41d2724fad9f87795106754b5e79f9374ec35450a0b3382c5fbe01bc850", size = 1622332, upload-time = "2025-07-09T00:34:09.053Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7a/92e2bd5b6752780703685a818e2d4d96360a3906bf58985a383cf84bd03d/pytensor-2.31.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c863122dc61638aa87c7277da984fe266eba6cf53e04a0cf5acbeac1fbe4e325", size = 1624386, upload-time = "2025-07-09T00:34:10.678Z" }, + { url = "https://files.pythonhosted.org/packages/43/a5/9205f8420f59466a36b18ca41f09767ff0aed48ddb2ecb2c6d170bd201e8/pytensor-2.31.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1489a55acb192528974f343f8cc67fc53cac0fbeb0bc02d4281f0a207fa506b5", size = 2100754, upload-time = "2025-07-09T00:34:12.314Z" }, + { url = "https://files.pythonhosted.org/packages/9b/51/676da3fcf776fd50af0b7e9d5e662c584a23456afeb8598fa87135b61af9/pytensor-2.31.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e79aaea8e1a94d115bcd895c82f8a6bf0dd651518a980108ca718ff182afb24b", size = 2115814, upload-time = "2025-07-09T00:34:14.325Z" }, + { url = "https://files.pythonhosted.org/packages/52/62/7f2ff99f244afbe318f45cb69c6e548e7135caf4a5b89b5b32a6646af59b/pytensor-2.31.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5aab6ff129ed85910b42965eef4a58b53d072c123200763677b6787a165d1aab", size = 2139405, upload-time = "2025-07-09T00:34:15.985Z" }, + { url = "https://files.pythonhosted.org/packages/3b/56/bebc6fadc66ef513c7b87a5d1de46e522ff4d57bd1acfb39f5f400b2b06e/pytensor-2.31.7-cp312-cp312-win_amd64.whl", hash = "sha256:ab478a722dedc89e31634f189343a416293e27555be6ea6f4620598f05ecd583", size = 1623709, upload-time = "2025-07-09T00:34:17.947Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ed/9c5dedd5c2616fabf1f94b40adf0defde1f4c7dc8afc9319bf60da5611af/pytensor-2.31.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2c3b463f392bb46d99ce9f060faaae13420277f446de5f4d6c18ac095bf83439", size = 1623518, upload-time = "2025-07-09T00:34:19.584Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e4/47e7e2818c8b1acbd64f9a0ab3de001e484fb3545c82b37c350d71eb9e7b/pytensor-2.31.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5abd20541c9d9a4340fde4da63cab5a6b4ec3228f0070b539bb6188f2255512", size = 2094291, upload-time = "2025-07-09T00:34:21.772Z" }, + { url = "https://files.pythonhosted.org/packages/a9/fd/6d75179820edb49ed42467e3f78ba1c9bf305f1bdc65524f97de4578114b/pytensor-2.31.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:99468fb50b3765b43bb82a3f411dcd37b3f5ce922870d8374ddf9cbc01033d68", size = 2116022, upload-time = "2025-07-09T00:34:24.007Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1e/6ff8891aaee7295b8c5d62149832cf38e8af141e703f69263bdb47564e6a/pytensor-2.31.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e7df2d29568602544eb1733d09075a6f229470fc6b96fc03ba8036997eef58a7", size = 2134927, upload-time = "2025-07-09T00:34:25.865Z" }, + { url = "https://files.pythonhosted.org/packages/61/f3/e341e9d5d20f31a15beaa61dd16b3254db93542830f3814acf5e895b27c0/pytensor-2.31.7-cp313-cp313-win_amd64.whl", hash = "sha256:f1b533058ad2503aa40df7db3aec99cfb1eff5c158ec7cb58892db940ff585ac", size = 1623504, upload-time = "2025-07-09T00:34:27.511Z" }, + { url = "https://files.pythonhosted.org/packages/0a/3d/33859b753186d3bcae89fd2ddfd5b180569030db3ace02a26c0d3b56c449/pytensor-2.31.7-py2.py3-none-any.whl", hash = "sha256:d7f89c7eaedd8ce4323289602b41be28e8aaee14c73a52c701079f25c4247aa8", size = 1338497, upload-time = "2025-07-09T00:34:28.942Z" }, +] + +[[package]] +name = "pytensor" +version = "2.38.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "cons", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "etuples", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "filelock", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "logical-unification", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "minikanren", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numba", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/89/e7b91f7366e36dbf937d4e53fa949b7f93627812e833526e0e426becbacb/pytensor-2.38.2.tar.gz", hash = "sha256:c804e665e69e830e31344133fea5793d2fd75c662ee1359d01589875c0cce105", size = 4862054, upload-time = "2026-03-06T13:37:01.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/4a/c148b5d7df8bc3c3b4cb521ae955a2f312b3f75a931f25c52b34b8f32728/pytensor-2.38.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea3f63c9f5eeecbe44be0305fa031b4c7352f0278dade695f22fa1c3703fcebf", size = 1506543, upload-time = "2026-03-06T13:36:25.322Z" }, + { url = "https://files.pythonhosted.org/packages/6d/c5/be1088c0cfa06e972be51d83e8058ef87a98cbc87faf86502e395df0854e/pytensor-2.38.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34eb065cf0ff2ed5845adedf9fe64ea67500dfb09aac211ec0ae0a6680651840", size = 2005244, upload-time = "2026-03-06T13:36:27.598Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ed/1ac83d3c4993414859929a24cfbb4ebf00e5c61fc10fbc4ac1d6262092e0/pytensor-2.38.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a7d2251ba1bd22649092af1d1661c339b3d2fcb938be663b3b60f2435a8addd9", size = 2005883, upload-time = "2026-03-06T13:36:30.069Z" }, + { url = "https://files.pythonhosted.org/packages/11/17/2c00b0cfcfa066f70b9d905a88a8de24f409310f51d205c3bb4163316b64/pytensor-2.38.2-cp311-cp311-win_amd64.whl", hash = "sha256:c06f596acd7659471def911ee6a1e35013357e18c276777b1eb98bff316f310c", size = 1497308, upload-time = "2026-03-06T13:36:31.864Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c0/caaecaddedb0919cdde1d943da877378d8e7ca6efe4d1ba721e6ba9b4901/pytensor-2.38.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78227922e8e282b4af8cc98d496fbca2aead90da80221ed937f809e3e22a7d8e", size = 1698818, upload-time = "2026-03-06T13:36:33.968Z" }, + { url = "https://files.pythonhosted.org/packages/19/ce/2269f04fc08579fc3133507ddc1a85c6121bb031b592085f85767eeb0c24/pytensor-2.38.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b95d3f31c90f5269636fea0539b406c68e9d7af8d2cca25c973d13d7628c7a7a", size = 2198280, upload-time = "2026-03-06T13:36:35.956Z" }, + { url = "https://files.pythonhosted.org/packages/6c/cf/f4194459d4dd8952dcc01352a63b21b277b94200e1d12ac026e078598cf3/pytensor-2.38.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e84086b77e0ed2577b8aa95ed2e398d25f2773cace9b30185b8ecac26d135529", size = 2196311, upload-time = "2026-03-06T13:36:38.644Z" }, + { url = "https://files.pythonhosted.org/packages/cd/1e/04ead3ab7ad4fdfcc48bafb38e4f0e4b175516c8b5c82526f536f79cc6d8/pytensor-2.38.2-cp312-cp312-win_amd64.whl", hash = "sha256:2393c7a0a8782fd447415971303111f485400390d15b356a62332efe36f9ba3a", size = 1691887, upload-time = "2026-03-06T13:36:40.594Z" }, + { url = "https://files.pythonhosted.org/packages/07/8a/9d1a8e4c70b48ea07bc0f66004afc406612748e98c036b6c428814277baa/pytensor-2.38.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6857cc173df3b9362e8730db6e0ff4552feff9c86f86be98a92794a50305fda0", size = 1698193, upload-time = "2026-03-06T13:36:42.28Z" }, + { url = "https://files.pythonhosted.org/packages/92/e0/03a949eebcac4ff320263514ae65f939ed10f98c5523a878223f6cb3b18b/pytensor-2.38.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03cb6307d29ce4a1755d82b6ccaa6739a070bd2a29223a12cbf4906b7ceefb94", size = 2197111, upload-time = "2026-03-06T13:36:44.338Z" }, + { url = "https://files.pythonhosted.org/packages/4f/52/e4a39c0377c435d4532bce95cb2ba8e161ee383b51e425bd08cadc780d79/pytensor-2.38.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bd0e71d7e543df920a297601a1dc01441711b311d9e6cfb3c5cd1a5a10ab87a3", size = 2195311, upload-time = "2026-03-06T13:36:46.213Z" }, + { url = "https://files.pythonhosted.org/packages/97/4a/fb34aefd1a144708fe454004deab4393c45f94f5d2ba7bbe2610994d7699/pytensor-2.38.2-cp313-cp313-win_amd64.whl", hash = "sha256:3174e506c105a260c041c00e019e5ef2b2561a0fe1e51ddcefb6bc8f7baf7c17", size = 1691597, upload-time = "2026-03-06T13:36:47.719Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a7/eea67f7b112053755fbdc071e8aeb27184e1ac651d031ef9f75eabb43fe8/pytensor-2.38.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:071609e3a10b91d8aa11a4124f323836381fb8b92a4d424862b07f94a1d63b5c", size = 1699470, upload-time = "2026-03-06T13:36:49.433Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/9667de1da8f38ad8556a62847330b07e2f2a06664c35ef3ca9b60b55896c/pytensor-2.38.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:994b051ec298789a9133cad29aa36092e0c2a3a564f64a2f05211c54d759b619", size = 2189740, upload-time = "2026-03-06T13:36:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/fb/4a/8bf706ac30c026e01971e4cc6ef712677a635c33ce581514781658b1d975/pytensor-2.38.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed8898ecae457ad621bc6610f13de37f83565a61782aa6c4c5e289d9c0310ab3", size = 2190574, upload-time = "2026-03-06T13:36:53.731Z" }, + { url = "https://files.pythonhosted.org/packages/43/04/215b8860b2409737cacca387644617dd0bb333a60d5bb77c3d7e0aa3e89c/pytensor-2.38.2-cp314-cp314-win_amd64.whl", hash = "sha256:9c4b4af108e9f9c4b664be0d10da0e5dfeb213bd2b83b94c6378d39a9f23915f", size = 1694447, upload-time = "2026-03-06T13:36:56.413Z" }, + { url = "https://files.pythonhosted.org/packages/4c/12/4b91d7ec085f35f6e0afbf57c9d4a13a45d48d9bef37ed6123d147255ecf/pytensor-2.38.2-py2.py3-none-any.whl", hash = "sha256:ae994b6e96d0d536e38c175a9b68df39fce4685a71dc8bb40acfbb779e755a34", size = 1399422, upload-time = "2026-03-06T13:36:58.363Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, +] + +[[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.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872, upload-time = "2026-04-07T17:28:49.249Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894, upload-time = "2026-04-07T17:28:48.09Z" }, +] + +[[package]] +name = "pytools" +version = "2026.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "siphash24" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/82/fd06f57ae9bd3bf4cfce3bc5210aab6d7b6e5bcf1ff11b219d37e2181c82/pytools-2026.1.tar.gz", hash = "sha256:7b6438ca5ecdedee42e16c8cb702c2ae562a98fb262dac1a3b01b121cc34bed5", size = 85929, upload-time = "2026-04-09T14:45:03.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/1d/fd8ac25df133ec8d107faf5bd29c2f99d924d20a9823c06426d4b303a4c0/pytools-2026.1-py3-none-any.whl", hash = "sha256:e4936d23fe553a62dfe449eba6ad61c620d6910a9487f8b0147f9e1a1abeb994", size = 99127, upload-time = "2026-04-09T14:45:01.872Z" }, +] + +[[package]] +name = "pytz" +version = "2026.1.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, +] + +[[package]] +name = "pywavelets" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/45/bfaaab38545a33a9f06c61211fc3bea2e23e8a8e00fedeb8e57feda722ff/pywavelets-1.8.0.tar.gz", hash = "sha256:f3800245754840adc143cbc29534a1b8fc4b8cff6e9d403326bd52b7bb5c35aa", size = 3935274, upload-time = "2024-12-04T19:54:20.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/7e/c5e398f25c70558ca195dd4144ee004666401f6167084c1e76059d7e68d8/pywavelets-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5c86fcb203c8e61d1f3d4afbfc08d626c64e4e3708207315577264c724632bf", size = 4323291, upload-time = "2024-12-04T19:53:01.836Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d7/2fc8067c3520ce25f7632b0f47b89d1b75653cab804a42700e95126f2679/pywavelets-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fafb5fa126277e1690c3d6329287122fc08e4d25a262ce126e3d81b1f5709308", size = 4291864, upload-time = "2024-12-04T19:53:04.659Z" }, + { url = "https://files.pythonhosted.org/packages/2f/17/a868aa26e45c104613d9069f9d8ec0123687cb6945062d274f20a3992436/pywavelets-1.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec23dfe6d5a3f4312b12456b8c546aa90a11c1138e425a885987505f0658ae0", size = 4447532, upload-time = "2024-12-04T19:53:06.383Z" }, + { url = "https://files.pythonhosted.org/packages/53/7a/7f5889a57177e2b1182080fc2c52236d1e03a0fad5e0b3d7c5312070c0be/pywavelets-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:880a0197e9fa108939af50a95e97c1bf9b7d3e148e0fad92ea60a9ed8c8947c0", size = 4487695, upload-time = "2024-12-04T19:53:08.84Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e6/04d76d93c158919ef0d8e1d40d1d453168305031eca6733fdc844f7cbb07/pywavelets-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bfa833d08b60d0bf53a7939fbbf3d98015dd34efe89cbe4e53ced880d085fc1", size = 4473752, upload-time = "2024-12-04T19:53:10.848Z" }, + { url = "https://files.pythonhosted.org/packages/3b/a7/42ea5bbb6055abd312e45b27d931200fd6eed5414a87ec5d62020a4c651b/pywavelets-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e10c3fc7f4a796e94da4bca9871be2186a7bb7a3b3536a0ca9376d84263140f0", size = 4504191, upload-time = "2024-12-04T19:53:13.912Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7e/52df87a9e77adfb12c1b8be79a2053f2eb4c2507dec96ebfd2333b15ff03/pywavelets-1.8.0-cp310-cp310-win32.whl", hash = "sha256:31baf4be6940fde72cc85663154360857ac1b93c251822deaf72bb804da95031", size = 4143794, upload-time = "2024-12-04T19:53:16.296Z" }, + { url = "https://files.pythonhosted.org/packages/01/e2/06e08230c26049740b2773952fbb12cc7186e5df655a73b1c30ba493e864/pywavelets-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:560c39f1ff8cb37f8b8ea4b7b6eb8a14f6926c11f5cf8c09f013a58f895ed5bc", size = 4214262, upload-time = "2024-12-04T19:53:17.998Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8a/9f8e794120b55caa1c4ae8d72696111bc408251615f351a8e54a5d8c4d4e/pywavelets-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e8dd5be4faed994581a8a4b3c0169be20567a9346e523f0b57f903c8f6722bce", size = 4324170, upload-time = "2024-12-04T19:53:19.66Z" }, + { url = "https://files.pythonhosted.org/packages/3e/b8/f6246be5c78e9fa73fcbba9ab4cbfe0d4dcb79ea5491f28d673a53466134/pywavelets-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d8abaf7c120b151ef309c9ff57e0a44ba9febf49045056dbc1577526ecec6c8", size = 4294254, upload-time = "2024-12-04T19:53:21.767Z" }, + { url = "https://files.pythonhosted.org/packages/2c/dc/ba1f212e9b43117ed28e0fd092e72e817790427400f88937ea742d260153/pywavelets-1.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b43a4c58707b1e8d941bec7f1d83e67c482278575ff0db3189d5c0dfae23a57", size = 4447178, upload-time = "2024-12-04T19:53:23.525Z" }, + { url = "https://files.pythonhosted.org/packages/58/10/e59c162a11d2fedb4454abbf7b74a52390aba5edc9605bf829bfa8708dac/pywavelets-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1aad0b97714e3079a2bfe48e4fb8ccd60778d0427e9ee5e0a9ff922e6c61e4", size = 4486799, upload-time = "2024-12-04T19:53:25.238Z" }, + { url = "https://files.pythonhosted.org/packages/03/ee/90c3d0a0a3bda74e6e097e4c06bff9446ff2a4c90b8617aaf4902c46966b/pywavelets-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0e1db96dcf3ce08156859df8b359e9ff66fa15061a1b90e70e020bf4cd077a0", size = 4486403, upload-time = "2024-12-04T19:53:26.954Z" }, + { url = "https://files.pythonhosted.org/packages/05/54/58b87f8b636a9f044f3f9814d2ec696cf25f3b33af97c11811f13c364085/pywavelets-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e62c8fb52ab0e8ff212fff9acae681a8f12d68b76c36fe24cc48809d5b6825ba", size = 4515011, upload-time = "2024-12-04T19:53:28.832Z" }, + { url = "https://files.pythonhosted.org/packages/a1/d0/f755cee11ff20668114942d0e777e2b502a8e4665e1fdb2553b587aac637/pywavelets-1.8.0-cp311-cp311-win32.whl", hash = "sha256:bf327528d10de471b04bb725c4e10677fac5a49e13d41bf0d0b3a1f6d7097abf", size = 4139934, upload-time = "2024-12-04T19:53:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/7b/0b/f4b92d4f00565280ea3e62a8e3dc81a667d67ed7bd59232f2f18d55f9aff/pywavelets-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3814d354dd109e244ffaac3d480d29a5202212fe24570c920268237c8d276f95", size = 4214321, upload-time = "2024-12-04T19:53:33.183Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8b/4870f11559307416470158a5aa6f61e5c2a910f1645a7a836ffae580b7ad/pywavelets-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3f431c9e2aff1a2240765eff5e804975d0fcc24c82d6f3d4271243f228e5963b", size = 4326187, upload-time = "2024-12-04T19:53:35.19Z" }, + { url = "https://files.pythonhosted.org/packages/c4/35/66835d889fd7fbf3119c7a9bd9d9bd567fc0bb603dfba408e9226db7cb44/pywavelets-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e39b0e2314e928cb850ee89b9042733a10ea044176a495a54dc84d2c98407a51", size = 4295428, upload-time = "2024-12-04T19:53:36.962Z" }, + { url = "https://files.pythonhosted.org/packages/63/1c/42e5130226538c70d4bbbaee00eb1bc06ec3287f7ea43d5fcf85bfc761ce/pywavelets-1.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cae701117f5c7244b7c8d48b9e92a0289637cdc02a9c205e8be83361f0c11fae", size = 4421259, upload-time = "2024-12-04T19:53:39.119Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c5/1ce93657432e22a5debc21e8b52ec6980f819ecb7fa727bb86744224d967/pywavelets-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649936baee933e80083788e0adc4d8bc2da7cdd8b10464d3b113475be2cc5308", size = 4447650, upload-time = "2024-12-04T19:53:41.589Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d6/b54ef30daca71824f811f9d2322a978b0a58d27674b8e3af6520f67e9ec6/pywavelets-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8c68e9d072c536bc646e8bdce443bb1826eeb9aa21b2cb2479a43954dea692a3", size = 4448538, upload-time = "2024-12-04T19:53:44.308Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/1688b790e55674667ad644262f174405c2c9873cb13e773432e78b1b33e4/pywavelets-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:63f67fa2ee1610445de64f746fb9c1df31980ad13d896ea2331fc3755f49b3ae", size = 4485228, upload-time = "2024-12-04T19:53:46.778Z" }, + { url = "https://files.pythonhosted.org/packages/c9/9b/69de31c3b663dadd76d1da6bf8af68d8cefff55df8e880fe96a94bb8c9ac/pywavelets-1.8.0-cp312-cp312-win32.whl", hash = "sha256:4b3c2ab669c91e3474fd63294355487b7dd23f0b51d32f811327ddf3546f4f3d", size = 4134850, upload-time = "2024-12-04T19:53:49.101Z" }, + { url = "https://files.pythonhosted.org/packages/1c/88/9e2aa9d5fde08bfc0fb18ffb1b5307c1ed49c24930b4147e5f48571a7251/pywavelets-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:810a23a631da596fef7196ddec49b345b1aab13525bb58547eeebe1769edbbc1", size = 4210786, upload-time = "2024-12-04T19:53:51.546Z" }, + { url = "https://files.pythonhosted.org/packages/94/73/7ff347d77c6bda11330565050c3346c54bc210086380abeb84e402c1c9cd/pywavelets-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:441ba45c8dff8c6916dbe706958d0d7f91da675695ca0c0d75e483f6f52d0a12", size = 4321474, upload-time = "2024-12-04T19:53:53.369Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/c58937ebbca1aba3475ca5ee63c7bcebf09f3c93891ae5942eaec7e95707/pywavelets-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:24bb282bab09349d9d128ed0536fa50fff5c2147891971a69c2c36155dfeeeac", size = 4291502, upload-time = "2024-12-04T19:53:55.396Z" }, + { url = "https://files.pythonhosted.org/packages/da/55/87b4ad6128b2e85985908e958e856e0b680cdcc03cc490e2cc995164b13a/pywavelets-1.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:426ff3799446cb4da1db04c2084e6e58edfe24225596805665fd39c14f53dece", size = 4412669, upload-time = "2024-12-04T19:53:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1a/bfca9eab23bd7b27843b0ce95c47796033a7b2c93048315f5fc5d6ac6428/pywavelets-1.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0607a9c085b8285bc0d04e33d461a6c80f8c325389221ffb1a45141861138e", size = 4454604, upload-time = "2024-12-04T19:53:59.105Z" }, + { url = "https://files.pythonhosted.org/packages/c3/23/9ce38829f57159e812c469c4f9d7b5a16c1ba922c1802985e8c504468206/pywavelets-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d31c36a39110e8fcc7b1a4a11cfed7d22b610c285d3e7f4fe73ec777aa49fa39", size = 4445507, upload-time = "2024-12-04T19:54:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d2/e78a976b0600a6ef7a70f4430122d6ad11b3e1cbda3c8b3565661d094678/pywavelets-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa7c68ed1e5bab23b1bafe60ccbcf709b878652d03de59e961baefa5210fcd0a", size = 4479078, upload-time = "2024-12-04T19:54:02.46Z" }, + { url = "https://files.pythonhosted.org/packages/85/4d/1c4f870010368f3aeb0bdd72929376a1988e4a122e76545bd8c56e549c96/pywavelets-1.8.0-cp313-cp313-win32.whl", hash = "sha256:2c6b359b55d713ef683e9da1529181b865a80d759881ceb9adc1c5742e4da4d8", size = 4133763, upload-time = "2024-12-04T19:54:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4f/0a709a5732e6cf9297fc87bf545cb879997cde204115f8c0cbc296c5bdd3/pywavelets-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:4dbebcfd55ea8a85b7fc8802d411e75337170422abf6e96019d7e46c394e80e5", size = 4209548, upload-time = "2024-12-04T19:54:06.61Z" }, + { url = "https://files.pythonhosted.org/packages/de/2a/4cac0bba67d3bc0ad697d0680539864db0a6964c7ad953d8d9d887f360b3/pywavelets-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:2e1c79784bebeafd3715c1bea6621daa2e2e6ed37b687719322e2078fb35bb70", size = 4335183, upload-time = "2024-12-04T19:54:08.349Z" }, + { url = "https://files.pythonhosted.org/packages/58/d1/3abe4cf34a35b09ad847f0e9a85f340c1988611222926d295fa8710659e7/pywavelets-1.8.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f489380c95013cc8fb3ef338f6d8c1a907125db453cc4dc739e2cca06fcd8b6", size = 4454723, upload-time = "2024-12-04T19:54:11.007Z" }, + { url = "https://files.pythonhosted.org/packages/d5/62/f05dd191232ae94e0b48509bb0ee65c9d45abf5e8f3612b09fd309b41384/pywavelets-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:06786201a91b5e74540f4f3c115c49a29190de2eb424823abbd3a1fd75ea3e28", size = 4472192, upload-time = "2024-12-04T19:54:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/20/6a/257c95ad1e0fd395cbccd4ffec0d01cc9b51a3bb91e67d8fa10ffebc9c72/pywavelets-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:f2877fb7b58c94211257dcf364b204d6ed259146fc87d5a90bf9d93c97af6226", size = 4183968, upload-time = "2024-12-04T19:54:15.099Z" }, + { url = "https://files.pythonhosted.org/packages/6c/58/7179fd6f87153f2e339171e8cfe9bf901398a89045eefd7a3911bb9b47ad/pywavelets-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ec5d723c3335ff8aa630fd4b14097077f12cc02893c91cafd60dd7b1730e780f", size = 4265431, upload-time = "2024-12-04T19:54:16.928Z" }, +] + +[[package]] +name = "pywavelets" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/75/50581633d199812205ea8cdd0f6d52f12a624886b74bf1486335b67f01ff/pywavelets-1.9.0.tar.gz", hash = "sha256:148d12203377772bea452a59211d98649c8ee4a05eff019a9021853a36babdc8", size = 3938340, upload-time = "2025-08-04T16:20:04.978Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/8b/ca700d0c174c3a4eec1fbb603f04374d1fed84255c2a9f487cfaa749c865/pywavelets-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54662cce4d56f0d6beaa6ebd34b2960f3aa4a43c83c9098a24729e9dc20a4be2", size = 4323640, upload-time = "2025-08-04T16:18:51.683Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f3/0fa57b6407ea9c4452b0bc182141256b9481b479ffbfc9d7fdb73afe193b/pywavelets-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d8ed4b4d1eab9347e8fe0c5b45008ce5a67225ce5b05766b8b1fa923a5f8b34", size = 4294938, upload-time = "2025-08-04T16:18:53.818Z" }, + { url = "https://files.pythonhosted.org/packages/ea/95/a998313c8459a57e488ff2b18e24be9e836aedda3aa3a1673197deeaa59a/pywavelets-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:862be65481fdfecfd84c6b0ca132ba571c12697a082068921bca5b5e039f1371", size = 4472829, upload-time = "2025-08-04T16:18:55.508Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8c/f316a153f7f89d2753df8a7371d15d0faab87e709fe02715dbc297c79385/pywavelets-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d76b7fa8fc500b09201d689b4f15bf5887e30ffbe2e1f338eb8470590eb4521a", size = 4524936, upload-time = "2025-08-04T16:18:57.146Z" }, + { url = "https://files.pythonhosted.org/packages/24/f7/89fdc1caef4b384a341a8e149253e23f36c1702bbb986a26123348624854/pywavelets-1.9.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa859d0b686a697c87a47e29319aebe44125f114a4f8c7e444832b921f52de5a", size = 4481475, upload-time = "2025-08-04T16:18:58.725Z" }, + { url = "https://files.pythonhosted.org/packages/82/53/b733fbfb71853e4a5c430da56e325a763562d65241dd785f0fadb67aed6a/pywavelets-1.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20e97b84a263003e2c7348bcf72beba96edda1a6169f072dc4e4d4ee3a6c7368", size = 4527994, upload-time = "2025-08-04T16:18:59.917Z" }, + { url = "https://files.pythonhosted.org/packages/ed/15/5f6a6e9fdad8341e42642ed622a5f3033da4ea9d426cc3e574ae418b4726/pywavelets-1.9.0-cp311-cp311-win32.whl", hash = "sha256:f8330cdbfa506000e63e79525716df888998a76414c5cd6ecd9a7e371191fb05", size = 4136109, upload-time = "2025-08-04T16:19:01.511Z" }, + { url = "https://files.pythonhosted.org/packages/fd/33/62dbb4aea86ec9d79b283127c42cc896f4d4ff265a9aeb1337a7836dd550/pywavelets-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed10959a17df294ef55948dcc76367d59ec7b6aad67e38dd4e313d2fe3ad47b2", size = 4228321, upload-time = "2025-08-04T16:19:03.164Z" }, + { url = "https://files.pythonhosted.org/packages/5c/37/3fda13fb2518fdd306528382d6b18c116ceafefff0a7dccd28f1034f4dd2/pywavelets-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30baa0788317d3c938560c83fe4fc43817342d06e6c9662a440f73ba3fb25c9b", size = 4320835, upload-time = "2025-08-04T16:19:04.855Z" }, + { url = "https://files.pythonhosted.org/packages/36/65/a5549325daafc3eae4b52de076798839eaf529a07218f8fb18cccefe76a1/pywavelets-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:df7436a728339696a7aa955c020ae65c85b0d9d2b5ff5b4cf4551f5d4c50f2c7", size = 4290469, upload-time = "2025-08-04T16:19:06.178Z" }, + { url = "https://files.pythonhosted.org/packages/05/85/901bb756d37dfa56baa26ef4a3577aecfe9c55f50f51366fede322f8c91d/pywavelets-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:07b26526db2476974581274c43a9c2447c917418c6bd03c8d305ad2a5cd9fac3", size = 4437717, upload-time = "2025-08-04T16:19:07.514Z" }, + { url = "https://files.pythonhosted.org/packages/0f/34/0f54dd9c288941294898877008bcb5c07012340cc9c5db9cff1bd185d449/pywavelets-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:573b650805d2f3c981a0e5ae95191c781a722022c37a0f6eba3fa7eae8e0ee17", size = 4483843, upload-time = "2025-08-04T16:19:08.857Z" }, + { url = "https://files.pythonhosted.org/packages/48/1f/cff6bb4ea64ff508d8cac3fe113c0aa95310a7446d9efa6829027cc2afdf/pywavelets-1.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3747ec804492436de6e99a7b6130480e53406d047e87dc7095ab40078a515a23", size = 4442236, upload-time = "2025-08-04T16:19:11.061Z" }, + { url = "https://files.pythonhosted.org/packages/ce/53/a3846eeefe0fb7ca63ae045f038457aa274989a15af793c1b824138caf98/pywavelets-1.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5163665686219c3f43fd5bbfef2391e87146813961dad0f86c62d4aed561f547", size = 4488077, upload-time = "2025-08-04T16:19:12.333Z" }, + { url = "https://files.pythonhosted.org/packages/f7/98/44852d2fe94455b72dece2db23562145179d63186a1c971125279a1c381f/pywavelets-1.9.0-cp312-cp312-win32.whl", hash = "sha256:80b8ab99f5326a3e724f71f23ba8b0a5b03e333fa79f66e965ea7bed21d42a2f", size = 4134094, upload-time = "2025-08-04T16:19:13.564Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a7/0d9ee3fe454d606e0f5c8e3aebf99d2ecddbfb681826a29397729538c8f1/pywavelets-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:92bfb8a117b8c8d3b72f2757a85395346fcbf37f50598880879ae72bd8e1c4b9", size = 4213900, upload-time = "2025-08-04T16:19:14.939Z" }, + { url = "https://files.pythonhosted.org/packages/db/a7/dec4e450675d62946ad975f5b4d924437df42d2fae46e91dfddda2de0f5a/pywavelets-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:74f8455c143818e4b026fc67b27fd82f38e522701b94b8a6d1aaf3a45fcc1a25", size = 4316201, upload-time = "2025-08-04T16:19:16.259Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0c/b54b86596c0df68027e48c09210e907e628435003e77048384a2dd6767e3/pywavelets-1.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c50320fe0a4a23ddd8835b3dc9b53b09ee05c7cc6c56b81d0916f04fc1649070", size = 4286838, upload-time = "2025-08-04T16:19:17.92Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9c/333969c3baad8af2e7999e83addcb7bb1d1fd48e2d812fb27e2e89582cb1/pywavelets-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6e059265223ed659e5214ab52a84883c88ddf3decbf08d7ec6abb8e4c5ed7be", size = 4430753, upload-time = "2025-08-04T16:19:19.529Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/a24c6ff03b026b826ad7b9267bd63cd34ce026795a0302f8a5403840b8e7/pywavelets-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae10ed46c139c7ddb8b1249cfe0989f8ccb610d93f2899507b1b1573a0e424b5", size = 4491315, upload-time = "2025-08-04T16:19:20.717Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/e3fbb502fca3469e51ced4f1e1326364c338be91edc5db5a8ddd26b303fa/pywavelets-1.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f8b1cc2df012401cb837ee6fa2f59607c7b4fe0ff409d9a4f6906daf40dc86", size = 4437654, upload-time = "2025-08-04T16:19:22.359Z" }, + { url = "https://files.pythonhosted.org/packages/92/44/c9b25084048d9324881a19b88e0969a4141bcfdc1d218f1b4b680b7af1c1/pywavelets-1.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db43969c7a8fbb17693ecfd14f21616edc3b29f0e47a49b32fa4127c01312a67", size = 4496435, upload-time = "2025-08-04T16:19:23.842Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b6/b27ec18c72b1dee3314e297af39c5f8136d43cc130dd93cb6c178ca820e5/pywavelets-1.9.0-cp313-cp313-win32.whl", hash = "sha256:9e7d60819d87dcd6c68a2d1bc1d37deb1f4d96607799ab6a25633ea484dcda41", size = 4132709, upload-time = "2025-08-04T16:19:25.415Z" }, + { url = "https://files.pythonhosted.org/packages/0a/87/78ef3f9fb36cdb16ee82371d22c3a7c89eeb79ec8c9daef6222060da6c79/pywavelets-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:0d70da9d7858c869e24dc254f16a61dc09d8a224cad85a10c393b2eccddeb126", size = 4213377, upload-time = "2025-08-04T16:19:26.875Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cd/ca0d9db0ff29e3843f6af60c2f5eb588794e05ca8eeb872a595867b1f3f5/pywavelets-1.9.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dc85f44c38d76a184a1aa2cb038f802c3740428c9bb877525f4be83a223b134", size = 4354336, upload-time = "2025-08-04T16:19:28.745Z" }, + { url = "https://files.pythonhosted.org/packages/82/d6/70afefcc1139f37d02018a3b1dba3b8fc87601bb7707d9616b7f7a76e269/pywavelets-1.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7acf6f950c6deaecd210fbff44421f234a8ca81eb6f4da945228e498361afa9d", size = 4335721, upload-time = "2025-08-04T16:19:30.371Z" }, + { url = "https://files.pythonhosted.org/packages/cd/3a/713f731b9ed6df0c36269c8fb62be8bb28eb343b9e26b13d6abda37bce38/pywavelets-1.9.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:144d4fc15c98da56654d0dca2d391b812b8d04127b194a37ad4a497f8e887141", size = 4418702, upload-time = "2025-08-04T16:19:31.743Z" }, + { url = "https://files.pythonhosted.org/packages/44/e8/f801eb4b5f7a316ba20054948c5d6b27b879c77fab2674942e779974bd86/pywavelets-1.9.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1aa3729585408a979d655736f74b995b511c86b9be1544f95d4a3142f8f4b8b5", size = 4470023, upload-time = "2025-08-04T16:19:32.963Z" }, + { url = "https://files.pythonhosted.org/packages/e9/cc/44b002cb16f2a392f2082308dd470b3f033fa4925d3efa7c46f790ce895a/pywavelets-1.9.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e0e24ad6b8eb399c49606dd1fcdcbf9749ad7f6d638be3fe6f59c1f3098821e2", size = 4426498, upload-time = "2025-08-04T16:19:34.151Z" }, + { url = "https://files.pythonhosted.org/packages/91/fe/2b70276ede7878c5fe8356ca07574db5da63e222ce39a463e84bfad135e8/pywavelets-1.9.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3830e6657236b53a3aae20c735cccead942bb97c54bbca9e7d07bae01645fe9c", size = 4477528, upload-time = "2025-08-04T16:19:35.932Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ed/d58b540c15e36508cfeded7b0d39493e811b0dce18d9d4e6787fb2e89685/pywavelets-1.9.0-cp313-cp313t-win32.whl", hash = "sha256:81bb65facfbd7b50dec50450516e72cdc51376ecfdd46f2e945bb89d39bfb783", size = 4186493, upload-time = "2025-08-04T16:19:37.198Z" }, + { url = "https://files.pythonhosted.org/packages/84/b2/12a849650d618a86bbe4d8876c7e20a7afe59a8cad6f49c57eca9af26dfa/pywavelets-1.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:47d52cf35e2afded8cfe1133663f6f67106a3220b77645476ae660ad34922cb4", size = 4274821, upload-time = "2025-08-04T16:19:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1f/18c82122547c9eec2232d800b02ada1fbd30ce2136137b5738acca9d653e/pywavelets-1.9.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:53043d2f3f4e55a576f51ac594fe33181e1d096d958e01524db5070eb3825306", size = 4314440, upload-time = "2025-08-04T16:19:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/1c92ac6b538ef5388caf1a74af61cf6af16ea6d14115bb53357469cb38d6/pywavelets-1.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:56bc36b42b1b125fd9cb56e7956b22f8d0f83c1093f49c77fc042135e588c799", size = 4290162, upload-time = "2025-08-04T16:19:41.322Z" }, + { url = "https://files.pythonhosted.org/packages/96/d3/d856a2cac8069c20144598fa30a43ca40b5df2e633230848a9a942faf04a/pywavelets-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08076eb9a182ddc6054ac86868fb71df6267c341635036dc63d20bdbacd9ad7e", size = 4437162, upload-time = "2025-08-04T16:19:42.556Z" }, + { url = "https://files.pythonhosted.org/packages/c9/54/777e0495acd4fb008791e84889be33d6e7fc8af095b441d939390b7d2491/pywavelets-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ee1ee7d80f88c64b8ec3b5021dd1e94545cc97f0cd479fb51aa7b10f6def08e", size = 4498169, upload-time = "2025-08-04T16:19:43.791Z" }, + { url = "https://files.pythonhosted.org/packages/76/68/81b97f4d18491a18fbe17e06e2eee80a591ce445942f7b6f522de07813c5/pywavelets-1.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3226b6f62838a6ccd7782cb7449ee5d8b9d61999506c1d9b03b2baf41b01b6fd", size = 4443318, upload-time = "2025-08-04T16:19:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/92/74/5147f2f0436f7aa131cb1bc13dba32ef5f3862748ae1c7366b4cde380362/pywavelets-1.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fb7f4b11d18e2db6dd8deee7b3ce8343d45f195f3f278c2af6e3724b1b93a24", size = 4503294, upload-time = "2025-08-04T16:19:46.632Z" }, + { url = "https://files.pythonhosted.org/packages/3d/d4/af998cc71e869919e0ab45471bd43e91d055ac7bc3ce6f56cc792c9b6bc8/pywavelets-1.9.0-cp314-cp314-win32.whl", hash = "sha256:9902d9fc9812588ab2dce359a1307d8e7f002b53a835640e2c9388fe62a82fd4", size = 4144478, upload-time = "2025-08-04T16:19:47.974Z" }, + { url = "https://files.pythonhosted.org/packages/7d/66/1d071eae5cc3e3ad0e45334462f8ce526a79767ccb759eb851aa5b78a73a/pywavelets-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:7e57792bde40e331d6cc65458e5970fd814dba18cfc4e9add9d051e901a7b7c7", size = 4227186, upload-time = "2025-08-04T16:19:49.57Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1f/da0c03ac99bd9d20409c0acf6417806d4cf333d70621da9f535dd0cf27fa/pywavelets-1.9.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b47c72fb4b76d665c4c598a5b621b505944e5b761bf03df9d169029aafcb652f", size = 4354391, upload-time = "2025-08-04T16:19:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/95/b6/de9e225d8cc307fbb4fda88aefa79442775d5e27c58ee4d3c8a8580ceba6/pywavelets-1.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:969e369899e7eab546ea5d77074e4125082e6f9dad71966499bf5dee3758be55", size = 4335810, upload-time = "2025-08-04T16:19:52.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/3b/336761359d07cd44a4233ca854704ff2a9e78d285879ccc82d254b9daa57/pywavelets-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8aeffd4f35036c1fade972a61454de5709a7a8fc9a7d177eefe3ac34d76962e5", size = 4422220, upload-time = "2025-08-04T16:19:54.068Z" }, + { url = "https://files.pythonhosted.org/packages/98/61/76ccc7ada127f14f65eda40e37407b344fd3713acfca7a94d7f0f67fe57d/pywavelets-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f63f400fcd4e7007529bd06a5886009760da35cd7e76bb6adb5a5fbee4ffeb8c", size = 4470156, upload-time = "2025-08-04T16:19:55.379Z" }, + { url = "https://files.pythonhosted.org/packages/e0/de/142ca27ee729cf64113c2560748fcf2bd45b899ff282d6f6f3c0e7f177bb/pywavelets-1.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a63bcb6b5759a7eb187aeb5e8cd316b7adab7de1f4b5a0446c9a6bcebdfc22fb", size = 4430167, upload-time = "2025-08-04T16:19:56.566Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5e/90b39adff710d698c00ba9c3125e2bec99dad7c5f1a3ba37c73a78a6689f/pywavelets-1.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9950eb7c8b942e9bfa53d87c7e45a420dcddbd835c4c5f1aca045a3f775c6113", size = 4477378, upload-time = "2025-08-04T16:19:58.162Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1a/89f5f4ebcb9d34d9b7b2ac0a868c8b6d8c78d699a36f54407a060cea0566/pywavelets-1.9.0-cp314-cp314t-win32.whl", hash = "sha256:097f157e07858a1eb370e0d9c1bd11185acdece5cca10756d6c3c7b35b52771a", size = 4209132, upload-time = "2025-08-04T16:20:00.371Z" }, + { url = "https://files.pythonhosted.org/packages/68/d2/a8065103f5e2e613b916489e6c85af6402a1ec64f346d1429e2d32cb8d03/pywavelets-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3b6ff6ba4f625d8c955f68c2c39b0a913776d406ab31ee4057f34ad4019fb33b", size = 4306793, upload-time = "2025-08-04T16:20:02.934Z" }, +] + +[[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-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850, upload-time = "2025-09-08T23:07:26.274Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380, upload-time = "2025-09-08T23:07:29.78Z" }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421, upload-time = "2025-09-08T23:07:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149, upload-time = "2025-09-08T23:07:33.17Z" }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070, upload-time = "2025-09-08T23:07:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441, upload-time = "2025-09-08T23:07:37.432Z" }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529, upload-time = "2025-09-08T23:07:39.047Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276, upload-time = "2025-09-08T23:07:40.695Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208, upload-time = "2025-09-08T23:07:42.298Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766, upload-time = "2025-09-08T23:07:43.869Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/305323ba86b284e6fcb0d842d6adaa2999035f70f8c38a9b6d21ad28c3d4/pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86", size = 1333328, upload-time = "2025-09-08T23:07:45.946Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a0/fc7e78a23748ad5443ac3275943457e8452da67fda347e05260261108cbc/pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581", size = 908803, upload-time = "2025-09-08T23:07:47.551Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/37d15eb05f3bdfa4abea6f6d96eb3bb58585fbd3e4e0ded4e743bc650c97/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f", size = 668836, upload-time = "2025-09-08T23:07:49.436Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2a6fe5111a01005fc7af3878259ce17684fabb8852815eda6225620f3c59/pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e", size = 857038, upload-time = "2025-09-08T23:07:51.234Z" }, + { url = "https://files.pythonhosted.org/packages/cb/eb/bfdcb41d0db9cd233d6fb22dc131583774135505ada800ebf14dfb0a7c40/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e", size = 1657531, upload-time = "2025-09-08T23:07:52.795Z" }, + { url = "https://files.pythonhosted.org/packages/ab/21/e3180ca269ed4a0de5c34417dfe71a8ae80421198be83ee619a8a485b0c7/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2", size = 2034786, upload-time = "2025-09-08T23:07:55.047Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b1/5e21d0b517434b7f33588ff76c177c5a167858cc38ef740608898cd329f2/pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394", size = 1894220, upload-time = "2025-09-08T23:07:57.172Z" }, + { url = "https://files.pythonhosted.org/packages/03/f2/44913a6ff6941905efc24a1acf3d3cb6146b636c546c7406c38c49c403d4/pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f", size = 567155, upload-time = "2025-09-08T23:07:59.05Z" }, + { url = "https://files.pythonhosted.org/packages/23/6d/d8d92a0eb270a925c9b4dd039c0b4dc10abc2fcbc48331788824ef113935/pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97", size = 633428, upload-time = "2025-09-08T23:08:00.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/14/01afebc96c5abbbd713ecfc7469cfb1bc801c819a74ed5c9fad9a48801cb/pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07", size = 559497, upload-time = "2025-09-08T23:08:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, + { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, + { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, + { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371, upload-time = "2025-09-08T23:09:45.575Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862, upload-time = "2025-09-08T23:09:47.448Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c6/c4dcdecdbaa70969ee1fdced6d7b8f60cfabe64d25361f27ac4665a70620/pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066", size = 836265, upload-time = "2025-09-08T23:09:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/3e/79/f38c92eeaeb03a2ccc2ba9866f0439593bb08c5e3b714ac1d553e5c96e25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604", size = 800208, upload-time = "2025-09-08T23:09:51.073Z" }, + { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, + { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +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.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, +] + +[[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 = "roman-numerals" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077, upload-time = "2025-12-17T18:25:34.381Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +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 = "ruff" +version = "0.15.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz", hash = "sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size = 4643852, upload-time = "2026-04-24T18:17:14.305Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl", hash = "sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size = 10640713, upload-time = "2026-04-24T18:17:22.841Z" }, + { url = "https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size = 11069267, upload-time = "2026-04-24T18:17:30.105Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size = 10397182, upload-time = "2026-04-24T18:17:07.177Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size = 10758012, upload-time = "2026-04-24T18:16:55.759Z" }, + { url = "https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size = 10447479, upload-time = "2026-04-24T18:16:51.677Z" }, + { url = "https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size = 11234040, upload-time = "2026-04-24T18:17:16.529Z" }, + { url = "https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size = 12087377, upload-time = "2026-04-24T18:17:04.944Z" }, + { url = "https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size = 11367784, upload-time = "2026-04-24T18:17:25.409Z" }, + { url = "https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size = 11344088, upload-time = "2026-04-24T18:17:12.258Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size = 11271770, upload-time = "2026-04-24T18:17:02.457Z" }, + { url = "https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size = 10719355, upload-time = "2026-04-24T18:17:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size = 10462758, upload-time = "2026-04-24T18:17:32.347Z" }, + { url = "https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size = 10953498, upload-time = "2026-04-24T18:17:20.674Z" }, + { url = "https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size = 11447765, upload-time = "2026-04-24T18:17:09.755Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl", hash = "sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size = 10657277, upload-time = "2026-04-24T18:17:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl", hash = "sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size = 11837758, upload-time = "2026-04-24T18:17:00.113Z" }, + { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821, upload-time = "2026-04-24T18:16:57.979Z" }, +] + +[[package]] +name = "scikit-fmm" +version = "2025.6.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/94/3b2969fc1f64a5faafad03c421ed200e717fc99c556985da0a17822f868d/scikit_fmm-2025.6.23.tar.gz", hash = "sha256:a3208f5f3881e40b7878d1121ba39b8d57f1bc38fb4e5f0d9d1c66a9b007e44f", size = 467753, upload-time = "2025-06-23T19:04:13.366Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/b2/5e34d766d438c1a14f37cd06084277b6214f10961aee0222fad1c4bb3893/scikit_fmm-2025.6.23-cp310-cp310-win_amd64.whl", hash = "sha256:616739029757464edccbf4546bee496e9e561c3ff04484e121685120d4a3563a", size = 68948, upload-time = "2025-06-23T19:04:08.876Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0f/61132e1b4cc9e8ac81723f3fcbe096408f957ceeaffa2b8b949b212aff12/scikit_fmm-2025.6.23-cp311-cp311-win_amd64.whl", hash = "sha256:e5fedb1b79d6def36616cce9d32f26954355c2b3e4e0c7e6b1ca28ad9ca5a0d4", size = 69025, upload-time = "2025-06-23T19:04:10.083Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/093e76640c8c6efae5e42203e92e86cb3e5dceaa3dcb8ac0733a1f817c64/scikit_fmm-2025.6.23-cp312-cp312-win_amd64.whl", hash = "sha256:859e5076d09f5d9b87d3d6fdc08652b714b43c5ad31523e5d58b28abdc9ced5b", size = 69261, upload-time = "2025-06-23T19:04:11.187Z" }, + { url = "https://files.pythonhosted.org/packages/52/2c/7aac8f88a20df085aeaa5802de8c8958a02d33715652b69d5ef90bc41b8b/scikit_fmm-2025.6.23-cp313-cp313-win_amd64.whl", hash = "sha256:a5f291db66949f15a68cc3e472c73e50ceb70d5ecb49eb364f55befdcbdcbc6e", size = 68454, upload-time = "2025-06-23T19:04:12.222Z" }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +] + +[[package]] +name = "setuptools" +version = "81.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, +] + +[[package]] +name = "shibuya" +version = "2026.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments-styles" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/b94cb04adbb984973fe83fd670dd066514610241d829723f678366e691d2/shibuya-2026.1.9.tar.gz", hash = "sha256:b389f10fd9c07b048e940f32d1e1ac096a2d49736389173ac771b37a10b51fdf", size = 86002, upload-time = "2026-01-09T02:19:14.365Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/ae/06d7dfc5633c7250fefc61fd624990aa2c37e3495c08a2f23968b1acb23e/shibuya-2026.1.9-py3-none-any.whl", hash = "sha256:b58a3cc6e5619c71d00fcf0be4a3060c87040c2a62a1b3f1a93a6a41ca8eaf45", size = 103389, upload-time = "2026-01-09T02:19:12.798Z" }, +] + +[[package]] +name = "siphash24" +version = "1.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/a2/e049b6fccf7a94bd1b2f68b3059a7d6a7aea86a808cac80cb9ae71ab6254/siphash24-1.8.tar.gz", hash = "sha256:aa932f0af4a7335caef772fdaf73a433a32580405c41eb17ff24077944b0aa97", size = 19946, upload-time = "2025-09-02T20:42:04.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/0a/b98666b7089b35143f27ea4e03eddd9da1f117073c0ca01d96bfbf01885e/siphash24-1.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53aba67b3437d7b56d85ad77879dfe314094f687df1de746fa7c6f5b3f6c1436", size = 76704, upload-time = "2025-09-02T20:40:53.19Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ed/e919afa4769a93ea44c052e0cbc187c5f2c2bcae59018729c60e30cbe0d2/siphash24-1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c28925b79954244c8e36ced9b8e88b1cb2d0919baf2b92ef7e8b8f96fd274aa", size = 74196, upload-time = "2025-09-02T20:40:54.531Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c4/1f206db82f27b4e91528678c9ec21ae558e51aadce43ae5bf4ed2da624cb/siphash24-1.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a665c1d8ae3a46fdec7c35db69823a0247b35957c4686c6b14156d5dc4ed8920", size = 99433, upload-time = "2025-09-02T20:40:55.761Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9a/cf46eb22a351eeaa06fc1b01984b9feb55d27f878c74ba3f62b8944849de/siphash24-1.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b9b15af0db3ff357b432c7e51c7cc1a27891aa1b341cc2a2fc1764e3fb5e605", size = 103131, upload-time = "2025-09-02T20:40:57.044Z" }, + { url = "https://files.pythonhosted.org/packages/c2/74/c811dab8b6c4968f321f2f01e26733f2854a3c5ac75fa8feb99d796fb190/siphash24-1.8-cp310-cp310-win32.whl", hash = "sha256:6fd22c0182518c7b17a9be35128c5b00dbb810751de73d9ab85e39494effab0b", size = 62597, upload-time = "2025-09-02T20:40:58.582Z" }, + { url = "https://files.pythonhosted.org/packages/dd/02/be6d3c614425371bffc6918b15b27f3839a4b168454b25c6a26da8e9bfcc/siphash24-1.8-cp310-cp310-win_amd64.whl", hash = "sha256:876ed2507a9573c663b1f6deb29b5ccca41e5a5099f848ed18272e709e6848ca", size = 77313, upload-time = "2025-09-02T20:40:59.742Z" }, + { url = "https://files.pythonhosted.org/packages/82/23/f53f5bd8866c6ea3abe434c9f208e76ea027210d8b75cd0e0dc849661c7a/siphash24-1.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4662ac616bce4d3c9d6003a0d398e56f8be408fc53a166b79fad08d4f34268e", size = 76930, upload-time = "2025-09-02T20:41:00.869Z" }, + { url = "https://files.pythonhosted.org/packages/0b/25/aebf246904424a06e7ffb7a40cfa9ea9e590ea0fac82e182e0f5d1f1d7ef/siphash24-1.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:53d6bed0951a99c6d2891fa6f8acfd5ca80c3e96c60bcee99f6fa01a04773b1c", size = 74315, upload-time = "2025-09-02T20:41:02.38Z" }, + { url = "https://files.pythonhosted.org/packages/59/3f/7010407c3416ef052d46550d54afb2581fb247018fc6500af8c66669eff2/siphash24-1.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d114c03648630e9e07dac2fe95442404e4607adca91640d274ece1a4fa71123e", size = 99756, upload-time = "2025-09-02T20:41:03.902Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9f/09c734833e69badd7e3faed806b4372bd6564ae0946bd250d5239885914f/siphash24-1.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88c1a55ff82b127c5d3b96927a430d8859e6a98846a5b979833ac790682dd91b", size = 104044, upload-time = "2025-09-02T20:41:05.505Z" }, + { url = "https://files.pythonhosted.org/packages/24/30/56a26d9141a34433da221f732599e2b23d2d70a966c249a9f00feb9a2915/siphash24-1.8-cp311-cp311-win32.whl", hash = "sha256:9430255e6a1313470f52c07c4a4643c451a5b2853f6d4008e4dda05cafb6ce7c", size = 62196, upload-time = "2025-09-02T20:41:07.299Z" }, + { url = "https://files.pythonhosted.org/packages/47/b2/11b0ae63fd374652544e1b12f72ba2cc3fe6c93c1483bd8ff6935b0a8a4b/siphash24-1.8-cp311-cp311-win_amd64.whl", hash = "sha256:1e4b37e4ef0b4496169adce2a58b6c3f230b5852dfa5f7ad0b2d664596409e47", size = 77162, upload-time = "2025-09-02T20:41:08.878Z" }, + { url = "https://files.pythonhosted.org/packages/7f/82/ce3545ce8052ac7ca104b183415a27ec3335e5ed51978fdd7b433f3cfe5b/siphash24-1.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:df5ed437c6e6cc96196b38728e57cd30b0427df45223475a90e173f5015ef5ba", size = 78136, upload-time = "2025-09-02T20:41:10.083Z" }, + { url = "https://files.pythonhosted.org/packages/15/88/896c3b91bc9deb78c415448b1db67343917f35971a9e23a5967a9d323b8a/siphash24-1.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f4ef78abdf811325c7089a35504df339c48c0007d4af428a044431d329721e56", size = 74588, upload-time = "2025-09-02T20:41:11.251Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/8dad3f5601db485ba862e1c1f91a5d77fb563650856a6708e9acb40ee53c/siphash24-1.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:065eff55c4fefb3a29fd26afb2c072abf7f668ffd53b91d41f92a1c485fcbe5c", size = 98655, upload-time = "2025-09-02T20:41:12.45Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/e0c352624c1f2faad270aeb5cce6e173977ef66b9b5e918aa6f32af896bf/siphash24-1.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6fa84ebfd47677262aa0bcb0f5a70f796f5fc5704b287ee1b65a3bd4fb7a5d", size = 103217, upload-time = "2025-09-02T20:41:13.746Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f6/0b1675bea4d40affcae642d9c7337702a4138b93c544230280712403e968/siphash24-1.8-cp312-cp312-win32.whl", hash = "sha256:6582f73615552ca055e51e03cb02a28e570a641a7f500222c86c2d811b5037eb", size = 63114, upload-time = "2025-09-02T20:41:14.972Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/afefef85d72ed8b5cf1aa9283f712e3cd43c9682fabbc809dec54baa8452/siphash24-1.8-cp312-cp312-win_amd64.whl", hash = "sha256:44ea6d794a7cbe184e1e1da2df81c5ebb672ab3867935c3e87c08bb0c2fa4879", size = 76232, upload-time = "2025-09-02T20:41:16.112Z" }, + { url = "https://files.pythonhosted.org/packages/88/56/9b82be5c82f028495d23ca614a993dfde4f4079c900f6a4e1af62d46922c/siphash24-1.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:948af9192eb243815fd361296b317220a94094406688b4daba062cfb08ecfd7d", size = 77082, upload-time = "2025-09-02T20:41:17.304Z" }, + { url = "https://files.pythonhosted.org/packages/54/b1/3137e38b707c601bec914781344fcd84c32462f89ae856dd8a6d5e8d23da/siphash24-1.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b435b2ac511b738dd0984308c1ce1b441faa70f8a1f3d022b5323bb5704cad6f", size = 73805, upload-time = "2025-09-02T20:41:18.462Z" }, + { url = "https://files.pythonhosted.org/packages/61/35/c810068bd532cbc9f92c2284ad717f4cd778c4b835f8c1e194f09117fd82/siphash24-1.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f0c4e46817b4a02657cd92c5eda8cb1804b83dc658882b0c2693d1ce4e3e597", size = 97644, upload-time = "2025-09-02T20:41:19.635Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/b88b4a24ec747a0147993a61a8dabc9c69b45aa2459ea4b6e100b4ea613b/siphash24-1.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:371794ce0ade48caaf4061c2e88178cec43a0997d312cf3c1e9c864d80c8a00f", size = 102295, upload-time = "2025-09-02T20:41:21.302Z" }, + { url = "https://files.pythonhosted.org/packages/de/d3/1426fec831420bbdcc088f7ffd4ecc5289ccd07a75ed83ca007d91a3ff89/siphash24-1.8-cp313-cp313-win32.whl", hash = "sha256:51e95dd6cf679784246ef8da1a213554c7813096c84dfd52c9d2c8ce04f911c2", size = 62912, upload-time = "2025-09-02T20:41:22.496Z" }, + { url = "https://files.pythonhosted.org/packages/57/7a/535bd58f21564ba8b094fd42661c6cd056ef11be975826ea6bd1535d4354/siphash24-1.8-cp313-cp313-win_amd64.whl", hash = "sha256:749e123a6bb2b29b9aedb4487ae612430035b98e1bf43b2f17e3bfc21ed99fff", size = 75879, upload-time = "2025-09-02T20:41:23.656Z" }, + { url = "https://files.pythonhosted.org/packages/dd/01/cd6c85803d98becb4e4b3d50d9506089eef48b8b0b5f0b690697944dbefa/siphash24-1.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:5c32763b6c912a42132b24dee2a988c63cf54b34b75d8ef195eb024546caeed0", size = 80342, upload-time = "2025-09-02T20:41:24.783Z" }, + { url = "https://files.pythonhosted.org/packages/11/9d/c49e6f4bbea12e7aade941787f16313a2ce0d49cfe3270dbec6b89e46334/siphash24-1.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3d34faa76c4044e105c30e040dca017dac2416c26e3ab32a7d504c9d7d0ef139", size = 78800, upload-time = "2025-09-02T20:41:25.929Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6d/9e505a9b94cbe4a668e37867a36552ee19e0263da4c8859528c54b590914/siphash24-1.8-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9825d048127363c23772deea343d6935fa3a80e045b344964b6f6df06113add", size = 94464, upload-time = "2025-09-02T20:41:27.236Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a6/57a27748a70d32ca9f35802666ab85f8994db25240d33c4d744016bd01ab/siphash24-1.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2d1caf6c109b4135fe5647b2d25e94bf6c3f725808280da834f951f99769ccae", size = 97466, upload-time = "2025-09-02T20:41:28.698Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d9/2e121ce9e2cc216cfaf87c65e6030e4f403a6051168ec15da85b9002810a/siphash24-1.8-cp313-cp313t-win32.whl", hash = "sha256:e51464db44b1c8a29980f23d8fd5e45f5915d68d6c9327b393df7f94f78d97e3", size = 70746, upload-time = "2025-09-02T20:41:30.247Z" }, + { url = "https://files.pythonhosted.org/packages/cf/eb/6480854fcaf164900b259354591156eeeea18bc1383e449da21d9f9cf998/siphash24-1.8-cp313-cp313t-win_amd64.whl", hash = "sha256:d31a611db1acb18c1260e9638effab0e5af63dcea339416c931433b69a61e153", size = 86689, upload-time = "2025-09-02T20:41:31.659Z" }, + { url = "https://files.pythonhosted.org/packages/99/79/2304b63f81eff30cd7f5680ddecda780ba7ea589323d17b1ac9fdfbe4f02/siphash24-1.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:157a7432009490ecfead6953e9fd88a5f1046baaf8b911611a7384b19793147c", size = 77285, upload-time = "2025-09-02T20:41:33.391Z" }, + { url = "https://files.pythonhosted.org/packages/5a/76/a4bb15d78547f4f4db7c21ad90883f2f52494bed1aa91bc96be476a4e7f5/siphash24-1.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c699eec6649427240d337c372f94737c19b2bc4e485294b49690f3029a37dd69", size = 74370, upload-time = "2025-09-02T20:41:34.9Z" }, + { url = "https://files.pythonhosted.org/packages/7e/4f/a8bb586952ac950a321e77be565fd99d50551366c8bf425572fd38ca05e0/siphash24-1.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecae35dd5a6e479e65395e5994d5b6ffd5f87f3b60de69d16acd02b4126388c0", size = 98332, upload-time = "2025-09-02T20:41:36.113Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/68f6a4eda2d8022eb857d6fb090f5aa02ae837b2365187a433e76dcbb64b/siphash24-1.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22b68242352a771a25b0a7cffedd584bfa61bafb83262776f42989bc4e96fe84", size = 102403, upload-time = "2025-09-02T20:41:37.371Z" }, + { url = "https://files.pythonhosted.org/packages/b5/7a/f005da994a8cc2281f7bbae74dd27fed99e7ea162b12199ecd34b47d1a03/siphash24-1.8-cp314-cp314-win32.whl", hash = "sha256:b53c0ee8393c48e949f7f3b09fa8e3095e696b5c78824c966eb4aea2d338361b", size = 64615, upload-time = "2025-09-02T20:41:38.688Z" }, + { url = "https://files.pythonhosted.org/packages/ba/16/4d9f436c957830b0b10d311f81d9258bfb0f722de14dd467d0047e9e2c72/siphash24-1.8-cp314-cp314-win_amd64.whl", hash = "sha256:8e67b7ec7406dc9d4e0394d852889269d8f903f1bc6be2e25c2cde7e92059817", size = 77999, upload-time = "2025-09-02T20:41:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e7/6fa559ff1d57f2c8d7e580ccd737018038d84a83c092feafc0b93f2649b8/siphash24-1.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:00114928872ebc899aa4b8a765766de376705c48d0d5393edd3ea80006252d61", size = 80354, upload-time = "2025-09-02T20:41:41.401Z" }, + { url = "https://files.pythonhosted.org/packages/56/44/9b9c70e216ee5bd81a1c0fce06ba88ff876bc8699f0ce38f9e6591c705c0/siphash24-1.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1c378442ce93b6f10d6b43c494b7ad630c5540051701288848f072f97e0778c6", size = 78829, upload-time = "2025-09-02T20:41:42.551Z" }, + { url = "https://files.pythonhosted.org/packages/ee/06/65c29cdedafa0952979aec2dc5491071546a8144f78940478fecc154e9d5/siphash24-1.8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7807bd9160e7cd44cc4e0218bb2c779d55c449070080623547ace3519733841", size = 94470, upload-time = "2025-09-02T20:41:43.76Z" }, + { url = "https://files.pythonhosted.org/packages/37/03/824bc1efe762d20a7bb755e735d295b1cffa12902e1b39fc0ccea1bdc1f5/siphash24-1.8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e0a46994e75d144c10df26db9298dda496de5d213dc97197080db479f0283c4", size = 97417, upload-time = "2025-09-02T20:41:45.182Z" }, + { url = "https://files.pythonhosted.org/packages/85/4d/99270aabeaf0a35313c31886624a314417bfa2f9cd9d7a8a890b22d91977/siphash24-1.8-cp314-cp314t-win32.whl", hash = "sha256:0b39834ffaeb69001021db0386fd949d8d0f869e0dbd9f2e1fa7a1107aa0f80a", size = 73456, upload-time = "2025-09-02T20:41:46.721Z" }, + { url = "https://files.pythonhosted.org/packages/cc/39/a77f16ae2af3f5cdc4de5de6aa37a23c8a66121b225819108ef818896c56/siphash24-1.8-cp314-cp314t-win_amd64.whl", hash = "sha256:32753439fe9faaaa19ef64eaee9e3e049cd90de2d04c9ff635d8f38c2130da54", size = 91094, upload-time = "2025-09-02T20:41:47.942Z" }, +] + +[[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.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" }, +] + +[[package]] +name = "spgl1" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/3c/19c65d94fc402f208db8a917a8c8d8b16e4b62adc3b34095291ad9d5d30f/spgl1-0.0.3.tar.gz", hash = "sha256:9734da2747de5a48d65021f286ad1f1ba42503a5b3277b9fa052cfda1858530b", size = 311599, upload-time = "2024-08-16T13:45:48.448Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/dc/98d6e6efd31e0fe48b19da9a2e3241b2cd8c952c5bd3fe4411cae8aadfe7/spgl1-0.0.3-py3-none-any.whl", hash = "sha256:fe60db8a389e149d7f3016a019d6feb0ab3f4a17f407dffced25ff4ea7ccb1a3", size = 292116, upload-time = "2024-08-16T13:45:46.098Z" }, +] + +[[package]] +name = "sphinx" +version = "8.1.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "babel", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "colorama", marker = "(python_full_version < '3.11' and sys_platform == 'win32') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "imagesize", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pygments", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "requests", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "snowballstemmer", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "tomli", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, +] + +[[package]] +name = "sphinx" +version = "9.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "babel", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "colorama", marker = "(python_full_version == '3.11.*' and sys_platform == 'win32') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version != '3.11.*' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "imagesize", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pygments", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "requests", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "roman-numerals", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "snowballstemmer", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713, upload-time = "2025-12-04T07:45:24.944Z" }, +] + +[[package]] +name = "sphinx" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "babel", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "colorama", marker = "(python_full_version >= '3.12' and sys_platform == 'win32') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.12' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "imagesize", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pygments", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "requests", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "roman-numerals", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742, upload-time = "2025-12-31T15:09:25.561Z" }, +] + +[[package]] +name = "sphinx-design" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size = 2193689, upload-time = "2024-08-02T13:48:44.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c", size = 2215338, upload-time = "2024-08-02T13:48:42.106Z" }, +] + +[[package]] +name = "sphinx-design" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/7b/804f311da4663a4aecc6cf7abd83443f3d4ded970826d0c958edc77d4527/sphinx_design-0.7.0.tar.gz", hash = "sha256:d2a3f5b19c24b916adb52f97c5f00efab4009ca337812001109084a740ec9b7a", size = 2203582, upload-time = "2026-01-19T13:12:53.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/cf/45dd359f6ca0c3762ce0490f681da242f0530c49c81050c035c016bfdd3a/sphinx_design-0.7.0-py3-none-any.whl", hash = "sha256:f82bf179951d58f55dca78ab3706aeafa496b741a91b1911d371441127d64282", size = 2220350, upload-time = "2026-01-19T13:12:51.077Z" }, +] + +[[package]] +name = "sphinx-gallery" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pillow" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/9d/91334ba9370de74564c8a1e0c54ce1bc638b35e00177cc02cb25c9c14348/sphinx_gallery-0.21.0.tar.gz", hash = "sha256:72a7734ad9100878345b8b65c249148cc0f1cd0e274adf3e3900214e4c2c5bee", size = 483616, upload-time = "2026-04-24T03:09:28.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/dd/d95843947392524418aa9fc4e8d205e82b4261ab2d2fab4abce7a14ee7c0/sphinx_gallery-0.21.0-py3-none-any.whl", hash = "sha256:f37bea4012f1cd7439c7782081e4259945207cf179e79b81330a6db3b18bca8b", size = 466808, upload-time = "2026-04-24T03:09:25.992Z" }, +] + +[[package]] +name = "sphinx-iconify" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/4e/498964c2a6025e489b255015d3b5644aa93eb1dd1035324de18179af8abc/sphinx_iconify-0.3.0.tar.gz", hash = "sha256:7824ca694472d6babbe811e72cdcaf52b6e0ff4240e8cfda721f84f867605611", size = 3701, upload-time = "2025-12-18T05:19:03.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/6f/7dd3097d8ce08109cff3e63a771ca1ad795d8d63d8015eaa6fbd13f784fa/sphinx_iconify-0.3.0-py3-none-any.whl", hash = "sha256:b38ca4a66767c317bea31850a6f540ef79db4394eb4792961918c2d44b4a2c3a", size = 4068, upload-time = "2025-12-18T05:19:01.892Z" }, +] + +[[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-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-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 = "sphinxemoji" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/05/d531d8ce28eeb364e900dab98b8e236cf664a1b7f5fa93c212a5e87313aa/sphinxemoji-0.3.2.tar.gz", hash = "sha256:814da89a9a7603b7e4d85c487c7381656fa83632f20065e5ed782ab1dbbb5083", size = 45999, upload-time = "2025-12-15T12:01:56.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/12/ff5e52d884b218ee9807e25ebb779a544809d7f0da9e01326a6d273c0aa1/sphinxemoji-0.3.2-py3-none-any.whl", hash = "sha256:0fb07a95bca5960a3b312bc05b65b0c3040456414a076c363f4ecaf546c6e09e", size = 45454, upload-time = "2025-12-15T12:01:55.635Z" }, +] + +[[package]] +name = "sqlparse" +version = "0.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, +] + +[[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 = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, +] + +[[package]] +name = "tomli" +version = "2.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 = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0+cu126" +source = { registry = "https://download.pytorch.org/whl/cu126" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cublas-cu12", version = "12.6.4.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.6.80", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.0.4", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufile-cu12", version = "1.11.1.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-curand-cu12", version = "10.3.7.77", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.1.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.4.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparselt-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.6.85", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvtx-cu12", version = "12.6.77", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:dae63a4756c9c455f299309b7b093f1b7c3460e63b53769cab10543b51a1d827", upload-time = "2026-01-21T19:34:06Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a256b51e8ca00770a47fe7ab865e3211d2a080d4f1cdc814cdcfb073b36cf1a1", upload-time = "2026-01-21T19:34:06Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp310-cp310-win_amd64.whl", hash = "sha256:b91012be20b6c0370800ed7c153fd5b51582495f00f7341c38fa0cb6b9c9a968", upload-time = "2026-01-21T19:34:06Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a5fb967ffb53ffa0d2579c9819491cfc36c557040de6fdeabcfcfb45df019bc", upload-time = "2026-01-21T19:34:08Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a9a9ba3b2baf23c044499ffbcbed88e04b6e38b94189c7dc42dd2cfcdd8c55c0", upload-time = "2026-01-21T19:34:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp311-cp311-win_amd64.whl", hash = "sha256:4749cd32e32ed55179ff2ff0407e0ae5077fe4d332bfa49258f4578d09eccb40", upload-time = "2026-01-21T19:34:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:81264238b3d8840276dd30c31f393e325b8f5da6390d18ac2a80dacecfd693ea", upload-time = "2026-01-21T19:34:23Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2a7a569206f07965eff69b28e147676540bb0ba6e1a39410802b6e4708cb8356", upload-time = "2026-01-21T19:34:39Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp312-cp312-win_amd64.whl", hash = "sha256:95d8409b8a15191de4c2958e86ca47f3ea8f9739b994ee4ca0e7586f37336413", upload-time = "2026-01-21T19:34:42Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9ffbf240bc193841ba0a79976510aa9ec14c95a57699257b581bc782316b592f", upload-time = "2026-01-21T19:34:47Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8568052253534abe27b3ac56d301f69d35ef5ce16479e6a3d7808fb052310919", upload-time = "2026-01-21T19:35:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313-win_amd64.whl", hash = "sha256:91e21e7ad572bf0136e5b7f192714f120c8abde8e128f1a0759f158951643822", upload-time = "2026-01-21T19:35:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c3480edd0ecc95df5f3418687f584037c072392646f94f5181d32bba5446724f", upload-time = "2026-01-21T19:35:37Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:270918b7a7ae46951fae6150bee9fcbd6a908242a1acc8d7e73de1194a041902", upload-time = "2026-01-21T19:35:48Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp313-cp313t-win_amd64.whl", hash = "sha256:06335b76cbaae9ee94071e69dd79ecfadab76a48edd4ef79a95de0fbf1bc04b4", upload-time = "2026-01-21T19:35:54Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:6935902d55007b3031a1e1ce74f9d0e1a6780cb02990818133a868560197dfa6", upload-time = "2026-01-21T19:36:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4cf597403f339a5068ad5a96fac562a2664a7cc584f24689d3136bf3deb0d07e", upload-time = "2026-01-21T19:36:19Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314-win_amd64.whl", hash = "sha256:ef8d62917bf7886929f6b3d8fbab372f8ac660b61cca47c19e0354c23fb860cf", upload-time = "2026-01-21T19:36:21Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:55f4639ea3d0f232281bbe8acce7e04f53e6789594ff354aff7560b22e2d8241", upload-time = "2026-01-21T19:36:24Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1aba08d6a66cb7577afc13fcc2bec8b15133438098a5acd512cee920c40c16a8", upload-time = "2026-01-21T19:36:39Z" }, + { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.10.0%2Bcu126-cp314-cp314t-win_amd64.whl", hash = "sha256:78bc0feb3357037b902562a8c0b72ca78cef65e2d2b782c214c7892df87b96a3", upload-time = "2026-01-21T19:36:50Z" }, +] + +[[package]] +name = "torch" +version = "2.10.0+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cublas-cu12", version = "12.8.4.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-cupti-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-nvrtc-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cuda-runtime-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufft-cu12", version = "11.3.3.83", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cufile-cu12", version = "1.13.1.3", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-curand-cu12", version = "10.3.9.90", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusolver-cu12", version = "11.7.3.90", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparse-cu12", version = "12.5.8.93", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparselt-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvjitlink-cu12", version = "12.8.93", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu12", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvtx-cu12", version = "12.8.90", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions" }, +] +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.11.0" +source = { registry = "https://download.pytorch.org/whl/cpu" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'darwin'", + "python_full_version == '3.14.*' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' 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' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "fsspec", marker = "sys_platform == 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2", marker = "sys_platform == 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'darwin' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "sys_platform == 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sympy", marker = "sys_platform == 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91209c7d8a2460b76e8ff5b28b7623da4ab1d27474b79e1de83e954871985afe", upload-time = "2026-03-23T15:16:50Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d75eadcd97fe0dc7cd0eedc4d72152484c19cb2cfe46ce55766c8e129116425f", upload-time = "2026-03-23T15:16:54Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:43b35116802c85fb88d99f4a396b8bd4472bfca1dd82e69499e5a4f9b8b4e252", upload-time = "2026-03-23T15:16:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:442ec9dc78592564fdad69cf0beaa9da2f82ab810ccb4f13903869a90bf3f15d", upload-time = "2026-03-23T15:17:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cc3a195701bba2239c313ee311487f80f8aaebe9e89b9073dddbcf2f93b5a0ba", upload-time = "2026-03-23T15:17:06Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:072a0d6e4865e8b0dc0dbfe6ebed68fae235124222835ef03e5814d414d8c012", upload-time = "2026-03-23T15:17:10Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:23ec7789017da9d95b6d543d790814785e6f30905c5443efa8257d1490d73f79", upload-time = "2026-03-23T15:17:14Z" }, +] + +[[package]] +name = "torch" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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.2.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform != 'linux' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/f2/c1690994afe461aae2d0cac62251e6802a703dec0a6c549c02ecd0de92a9/torch-2.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c0d7fcfbc0c4e8bb5ebc3907cbc0c6a0da1b8f82b1fc6e14e914fa0b9baf74e", size = 80526521, upload-time = "2026-03-23T18:12:06.86Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f0/98ae802fa8c09d3149b0c8690741f3f5753c90e779bd28c9613257295945/torch-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:4cf8687f4aec3900f748d553483ef40e0ac38411c3c48d0a86a438f6d7a99b18", size = 419723025, upload-time = "2026-03-23T18:11:43.774Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1e/18a9b10b4bd34f12d4e561c52b0ae7158707b8193c6cfc0aad2b48167090/torch-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1b32ceda909818a03b112006709b02be1877240c31750a8d9c6b7bf5f2d8a6e5", size = 530589207, upload-time = "2026-03-23T18:11:23.756Z" }, + { url = "https://files.pythonhosted.org/packages/35/40/2d532e8c0e23705be9d1debce5bc37b68d59a39bda7584c26fe9668076fe/torch-2.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:b3c712ae6fb8e7a949051a953fc412fe0a6940337336c3b6f905e905dac5157f", size = 114518313, upload-time = "2026-03-23T18:11:58.281Z" }, + { url = "https://files.pythonhosted.org/packages/ae/0d/98b410492609e34a155fa8b121b55c7dca229f39636851c3a9ec20edea21/torch-2.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7b6a60d48062809f58595509c524b88e6ddec3ebe25833d6462eeab81e5f2ce4", size = 80529712, upload-time = "2026-03-23T18:12:02.608Z" }, + { url = "https://files.pythonhosted.org/packages/84/03/acea680005f098f79fd70c1d9d5ccc0cb4296ec2af539a0450108232fc0c/torch-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d91aac77f24082809d2c5a93f52a5f085032740a1ebc9252a7b052ef5a4fddc6", size = 419718178, upload-time = "2026-03-23T18:10:46.675Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8b/d7be22fbec9ffee6cff31a39f8750d4b3a65d349a286cf4aec74c2375662/torch-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7aa2f9bbc6d4595ba72138026b2074be1233186150e9292865e04b7a63b8c67a", size = 530604548, upload-time = "2026-03-23T18:10:03.569Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bd/9912d30b68845256aabbb4a40aeefeef3c3b20db5211ccda653544ada4b6/torch-2.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:73e24aaf8f36ab90d95cd1761208b2eb70841c2a9ca1a3f9061b39fc5331b708", size = 114519675, upload-time = "2026-03-23T18:11:52.995Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8b/69e3008d78e5cee2b30183340cc425081b78afc5eff3d080daab0adda9aa/torch-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b5866312ee6e52ea625cd211dcb97d6a2cdc1131a5f15cc0d87eec948f6dd34", size = 80606338, upload-time = "2026-03-23T18:11:34.781Z" }, + { url = "https://files.pythonhosted.org/packages/13/16/42e5915ebe4868caa6bac83a8ed59db57f12e9a61b7d749d584776ed53d5/torch-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f99924682ef0aa6a4ab3b1b76f40dc6e273fca09f367d15a524266db100a723f", size = 419731115, upload-time = "2026-03-23T18:11:06.944Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c9/82638ef24d7877510f83baf821f5619a61b45568ce21c0a87a91576510aa/torch-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f68f4ac6d95d12e896c3b7a912b5871619542ec54d3649cf48cc1edd4dd2756", size = 530712279, upload-time = "2026-03-23T18:10:31.481Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ff/6756f1c7ee302f6d202120e0f4f05b432b839908f9071157302cedfc5232/torch-2.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:fbf39280699d1b869f55eac536deceaa1b60bd6788ba74f399cc67e60a5fab10", size = 114556047, upload-time = "2026-03-23T18:10:55.931Z" }, + { url = "https://files.pythonhosted.org/packages/87/89/5ea6722763acee56b045435fb84258db7375c48165ec8be7880ab2b281c5/torch-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6debd97ccd3205bbb37eb806a9d8219e1139d15419982c09e23ef7d4369d18", size = 80606801, upload-time = "2026-03-23T18:10:18.649Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/8ed2173589cbfe744ed54e5a73efc107c0085ba5777ee93a5f4c1ab90553/torch-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:63a68fa59de8f87acc7e85a5478bb2dddbb3392b7593ec3e78827c793c4b73fd", size = 419732382, upload-time = "2026-03-23T18:08:30.835Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e1/b73f7c575a4b8f87a5928f50a1e35416b5e27295d8be9397d5293e7e8d4c/torch-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc89b9b173d9adfab59fd227f0ab5e5516d9a52b658ae41d64e59d2e55a418db", size = 530711509, upload-time = "2026-03-23T18:08:47.213Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/3e3fcdd388fbe54e29fd3f991f36846ff4ac90b0d0181e9c8f7236565f82/torch-2.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:4dda3b3f52d121063a731ddb835f010dc137b920d7fec2778e52f60d8e4bf0cd", size = 114555842, upload-time = "2026-03-23T18:09:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/db/38/8ac78069621b8c2b4979c2f96dc8409ef5e9c4189f6aac629189a78677ca/torch-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8b394322f49af4362d4f80e424bcaca7efcd049619af03a4cf4501520bdf0fb4", size = 80959574, upload-time = "2026-03-23T18:10:14.214Z" }, + { url = "https://files.pythonhosted.org/packages/6d/6c/56bfb37073e7136e6dd86bfc6af7339946dd684e0ecf2155ac0eee687ae1/torch-2.11.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2658f34ce7e2dabf4ec73b45e2ca68aedad7a5be87ea756ad656eaf32bf1e1ea", size = 419732324, upload-time = "2026-03-23T18:09:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/07/f4/1b666b6d61d3394cca306ea543ed03a64aad0a201b6cd159f1d41010aeb1/torch-2.11.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:98bb213c3084cfe176302949bdc360074b18a9da7ab59ef2edc9d9f742504778", size = 530596026, upload-time = "2026-03-23T18:09:20.842Z" }, + { url = "https://files.pythonhosted.org/packages/48/6b/30d1459fa7e4b67e9e3fe1685ca1d8bb4ce7c62ef436c3a615963c6c866c/torch-2.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a97b94bbf62992949b4730c6cd2cc9aee7b335921ee8dc207d930f2ed09ae2db", size = 114793702, upload-time = "2026-03-23T18:09:47.304Z" }, + { url = "https://files.pythonhosted.org/packages/26/0d/8603382f61abd0db35841148ddc1ffd607bf3100b11c6e1dab6d2fc44e72/torch-2.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:01018087326984a33b64e04c8cb5c2795f9120e0d775ada1f6638840227b04d7", size = 80573442, upload-time = "2026-03-23T18:09:10.117Z" }, + { url = "https://files.pythonhosted.org/packages/c7/86/7cd7c66cb9cec6be330fff36db5bd0eef386d80c031b581ec81be1d4b26c/torch-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:2bb3cc54bd0dea126b0060bb1ec9de0f9c7f7342d93d436646516b0330cd5be7", size = 419749385, upload-time = "2026-03-23T18:07:33.77Z" }, + { url = "https://files.pythonhosted.org/packages/47/e8/b98ca2d39b2e0e4730c0ee52537e488e7008025bc77ca89552ff91021f7c/torch-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4dc8b3809469b6c30b411bb8c4cad3828efd26236153d9beb6a3ec500f211a60", size = 530716756, upload-time = "2026-03-23T18:07:50.02Z" }, + { url = "https://files.pythonhosted.org/packages/78/88/d4a4cda8362f8a30d1ed428564878c3cafb0d87971fbd3947d4c84552095/torch-2.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:2b4e811728bd0cc58fb2b0948fe939a1ee2bf1422f6025be2fca4c7bd9d79718", size = 114552300, upload-time = "2026-03-23T18:09:05.617Z" }, + { url = "https://files.pythonhosted.org/packages/bf/46/4419098ed6d801750f26567b478fc185c3432e11e2cad712bc6b4c2ab0d0/torch-2.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8245477871c3700d4370352ffec94b103cfcb737229445cf9946cddb7b2ca7cd", size = 80959460, upload-time = "2026-03-23T18:09:00.818Z" }, + { url = "https://files.pythonhosted.org/packages/fd/66/54a56a4a6ceaffb567231994a9745821d3af922a854ed33b0b3a278e0a99/torch-2.11.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:ab9a8482f475f9ba20e12db84b0e55e2f58784bdca43a854a6ccd3fd4b9f75e6", size = 419735835, upload-time = "2026-03-23T18:07:18.974Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e7/0b6665f533aa9e337662dc190425abc0af1fe3234088f4454c52393ded61/torch-2.11.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:563ed3d25542d7e7bbc5b235ccfacfeb97fb470c7fee257eae599adb8005c8a2", size = 530613405, upload-time = "2026-03-23T18:08:07.014Z" }, + { url = "https://files.pythonhosted.org/packages/cf/bf/c8d12a2c86dbfd7f40fb2f56fbf5a505ccf2d9ce131eb559dfc7c51e1a04/torch-2.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b2a43985ff5ef6ddd923bbcf99943e5f58059805787c5c9a2622bf05ca2965b0", size = 114792991, upload-time = "2026-03-23T18:08:19.216Z" }, +] + +[[package]] +name = "torch" +version = "2.11.0+cpu" +source = { registry = "https://download.pytorch.org/whl/cpu" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "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.13.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' 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' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "fsspec", marker = "sys_platform != 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "jinja2", marker = "sys_platform != 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version >= '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'darwin' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { 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-6-pylops-deep') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (python_full_version < '3.11' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (sys_platform == 'darwin' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "setuptools", marker = "sys_platform != 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "sympy", marker = "sys_platform != 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "typing-extensions", marker = "sys_platform != 'darwin' or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp310-cp310-linux_s390x.whl", upload-time = "2026-03-23T14:58:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp310-cp310-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:58:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:58:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp310-cp310-win_amd64.whl", upload-time = "2026-03-23T14:58:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp311-cp311-linux_s390x.whl", upload-time = "2026-03-23T14:58:58Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp311-cp311-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:00Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp311-cp311-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:00Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp311-cp311-win_amd64.whl", upload-time = "2026-03-23T14:59:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-linux_s390x.whl", upload-time = "2026-03-23T14:59:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:02Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:03Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-win_amd64.whl", upload-time = "2026-03-23T14:59:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313-linux_s390x.whl", upload-time = "2026-03-23T14:59:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:04Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:05Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313-win_amd64.whl", upload-time = "2026-03-23T14:59:06Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313t-linux_s390x.whl", upload-time = "2026-03-23T14:59:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313t-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313t-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:07Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp313-cp313t-win_amd64.whl", upload-time = "2026-03-23T14:59:09Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314-linux_s390x.whl", upload-time = "2026-03-23T14:59:09Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:10Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:11Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314-win_amd64.whl", upload-time = "2026-03-23T14:59:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314t-linux_s390x.whl", upload-time = "2026-03-23T14:59:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314t-manylinux_2_28_aarch64.whl", upload-time = "2026-03-23T14:59:12Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314t-manylinux_2_28_x86_64.whl", upload-time = "2026-03-23T14:59:13Z" }, + { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp314-cp314t-win_amd64.whl", upload-time = "2026-03-23T14:59:15Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006, upload-time = "2026-03-10T21:31:02.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983, upload-time = "2026-03-10T21:30:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246, upload-time = "2026-03-10T21:30:46.571Z" }, + { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229, upload-time = "2026-03-10T21:30:48.273Z" }, + { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192, upload-time = "2026-03-10T21:30:51.22Z" }, + { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039, upload-time = "2026-03-10T21:30:53.52Z" }, + { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445, upload-time = "2026-03-10T21:30:55.541Z" }, + { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582, upload-time = "2026-03-10T21:30:57.142Z" }, + { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990, upload-time = "2026-03-10T21:30:58.857Z" }, + { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016, upload-time = "2026-03-10T21:31:00.43Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "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 = "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.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "virtualenv" +version = "21.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/98/3a7e644e19cb26133488caff231be390579860bbbb3da35913c49a1d0a46/virtualenv-21.2.4.tar.gz", hash = "sha256:b294ef68192638004d72524ce7ef303e9d0cf5a44c95ce2e54a7500a6381cada", size = 5850742, upload-time = "2026-04-14T22:15:31.438Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl", hash = "sha256:29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac", size = 5831232, upload-time = "2026-04-14T22:15:29.342Z" }, +] + +[[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 = "xarray" +version = "2025.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging", marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185, upload-time = "2025-06-12T03:04:09.099Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739, upload-time = "2025-06-12T03:04:06.708Z" }, +] + +[[package]] +name = "xarray" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "packaging", marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "pandas", version = "3.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326, upload-time = "2026-04-13T19:45:34.659Z" }, +] + +[[package]] +name = "xarray-einstats" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform != 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version < '3.11' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/5d/654cca0448ad5c1d0333530511bc20eefaab304a4362dcbdc7ea3da12a3d/xarray_einstats-0.8.0.tar.gz", hash = "sha256:7f1573f9bd4d60d6e7ed9fd27c4db39da51ec49bf8ba654d4602a139a6309d7f", size = 30225, upload-time = "2024-09-19T00:07:39.399Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/07/27f0d68989bb1c44a781747e222dda67cf65002834ed35ad91abd1a71802/xarray_einstats-0.8.0-py3-none-any.whl", hash = "sha256:fd00552c3fb5c859b1ebc7c88a97342d3bb93d14bba904c5a9b94a4f724b76b4", size = 32553, upload-time = "2024-09-19T00:07:37.904Z" }, +] + +[[package]] +name = "xarray-einstats" +version = "0.9.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/10/ef474494a7f2102ec4c02352c723fa282c6237b600565eb82ee354291211/xarray_einstats-0.9.1.tar.gz", hash = "sha256:39b373deed43592c41d3fbf8863af62e19e01c1ae553ae5ff059a8df78d995c6", size = 33327, upload-time = "2025-06-18T15:53:28.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/8b/ed2f0f49385c3d7739cd4699954add26e8f09a372a0c3f04f2bde32fcea2/xarray_einstats-0.9.1-py3-none-any.whl", hash = "sha256:777339524e85d066f2ef9ed1e3a3fb63aead4c1065fd1406f30dfa4de58ce063", size = 39043, upload-time = "2025-06-18T15:53:24.088Z" }, +] + +[[package]] +name = "xarray-einstats" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra == 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra == 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-6-pylops-deep' and extra != 'extra-6-pylops-deep-cu126' and extra != 'extra-6-pylops-deep-cu128' and extra != 'extra-6-pylops-deep-cu13' and extra != 'extra-6-pylops-gpu-cu12' and extra != 'extra-6-pylops-gpu-cu13'", +] +dependencies = [ + { name = "numpy", version = "2.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu126') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu128') or (extra == 'extra-6-pylops-deep-cu126' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-deep-cu128' and extra == 'extra-6-pylops-deep-cu13') or (extra == 'extra-6-pylops-gpu-cu12' and extra == 'extra-6-pylops-gpu-cu13')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/9b/305ee6a2dac75fc9c28105db061408df6ecbf0f7a1de37636e8e4ea47ca7/xarray_einstats-0.10.0.tar.gz", hash = "sha256:d432a363fc8f09baad164f9826dc711551c684b9abd8098c1b961d18663a627d", size = 33449, upload-time = "2026-02-19T18:13:55.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/d4/225027a913621a879b429a043674aa35220e6ce67785acad4f7bd0c4ff33/xarray_einstats-0.10.0-py3-none-any.whl", hash = "sha256:fa3169b46cee29092db820d8bbc203148bada4fc970ee75e62cbf3dd7c5a8945", size = 39099, upload-time = "2026-02-19T18:13:53.174Z" }, +]