diff --git a/.all-contributorsrc b/.all-contributorsrc index c2651c64..732fcbfd 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -27,7 +27,8 @@ "tool", "test", "bug", - "platform" + "platform", + "review" ] }, { @@ -37,7 +38,8 @@ "profile": "https://github.com/mdhaber", "contributions": [ "code", - "ideas" + "ideas", + "test" ] }, { @@ -47,7 +49,8 @@ "profile": "https://github.com/j-bowhay", "contributions": [ "code", - "review" + "review", + "tool" ] }, { @@ -90,14 +93,20 @@ ] }, { - "login": "rgommers", - "name": "Ralf Gommers", - "avatar_url": "https://avatars.githubusercontent.com/u/98330?v=4", - "profile": "https://github.com/rgommers/", + "login": "crusaderky", + "name": "Guido Imperiale", + "avatar_url": "https://avatars.githubusercontent.com/u/6213168?v=4", + "profile": "https://github.com/crusaderky", "contributions": [ + "code", + "doc", + "tool", + "test", + "example", + "bug", "ideas", - "infra", - "review" + "review", + "maintenance" ] }, { @@ -155,6 +164,17 @@ "code" ] }, + { + "login": "rgommers", + "name": "Ralf Gommers", + "avatar_url": "https://avatars.githubusercontent.com/u/98330?v=4", + "profile": "https://github.com/rgommers/", + "contributions": [ + "ideas", + "infra", + "review" + ] + }, { "login": "ogrisel", "name": "Olivier Grisel", @@ -164,19 +184,6 @@ "code" ] }, - { - "login": "crusaderky", - "name": "Guido Imperiale", - "avatar_url": "https://avatars.githubusercontent.com/u/6213168?v=4", - "profile": "https://github.com/crusaderky", - "contributions": [ - "code", - "doc", - "tool", - "test", - "example" - ] - }, { "login": "ev-br", "name": "Evgeni Burovski", @@ -195,6 +202,74 @@ "contributions": [ "review" ] + }, + { + "login": "kotlinisland", + "name": "kotlinisland", + "avatar_url": "https://avatars.githubusercontent.com/u/65446343?v=4", + "profile": "https://github.com/KotlinIsland", + "contributions": [ + "review" + ] + }, + { + "login": "detachhead", + "name": "detachhead", + "avatar_url": "https://avatars.githubusercontent.com/u/57028336?v=4", + "profile": "https://github.com/DetachHead", + "contributions": [ + "review" + ] + }, + { + "login": "NeilGirdhar", + "name": "Neil Girdhar", + "avatar_url": "https://avatars.githubusercontent.com/u/730137?v=4", + "profile": "https://github.com/NeilGirdhar", + "contributions": [ + "code", + "test" + ] + }, + { + "login": "lithomas1", + "name": "Thomas Li", + "avatar_url": "https://avatars.githubusercontent.com/u/47963215?v=4", + "profile": "https://github.com/lithomas1", + "contributions": [ + "bug", + "tool" + ] + }, + { + "login": "pearu", + "name": "Pearu Peterson", + "avatar_url": "https://avatars.githubusercontent.com/u/402156?v=4", + "profile": "https://github.com/pearu", + "contributions": [ + "review" + ] + }, + { + "login": "paddyroddy", + "name": "Patrick J. Roddy", + "avatar_url": "https://avatars.githubusercontent.com/u/15052188?v=4", + "profile": "https://paddyroddy.github.io/", + "contributions": [ + "code", + "doc", + "example", + "test" + ] + }, + { + "login": "amacati", + "name": "Martin Schuck", + "avatar_url": "https://avatars.githubusercontent.com/u/57562633?v=4", + "profile": "https://amacati.github.io/", + "contributions": [ + "ideas" + ] } ] } diff --git a/.dprint.jsonc b/.dprint.jsonc new file mode 100644 index 00000000..c3642905 --- /dev/null +++ b/.dprint.jsonc @@ -0,0 +1,25 @@ +{ + "json": { + "lineWidth": 100, + "array.preferSingleLine": true, + }, + "markdown": { + "lineWidth": 200, + "emphasisKind": "asterisks", + }, + "toml": { + "lineWidth": 100, + }, + "yaml": { + "printWidth": 100, + "formatComments": true, + "braceSpacing": false, + }, + "excludes": ["**/*-lock.json", "**/*.lock", "**/node_modules/", "dist/"], + "plugins": [ + "https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.1.wasm", + "https://plugins.dprint.dev/json-0.20.0.wasm", + "https://plugins.dprint.dev/markdown-0.19.0.wasm", + "https://plugins.dprint.dev/toml-0.7.0.wasm", + ], +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..46f23570 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*.{py,md}] +indent_style = space +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true + +[*.py] +max_line_length = 88 +indent_size = 4 + +[*.md] +max_line_length = 80 diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 6c4b3695..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -version: 2 -updates: - # Maintain dependencies for GitHub Actions - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - groups: - actions: - patterns: - - "*" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..014064f0 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,5 @@ + diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 18fd21ee..1de74fa4 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -1,5 +1,8 @@ name: CD +permissions: + contents: read + on: workflow_dispatch: pull_request: @@ -14,11 +17,11 @@ jobs: dist: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 - - uses: hynek/build-and-inspect-python-package@v2 + - uses: hynek/build-and-inspect-python-package@c52c3a4710070b50470d903818a7b25115dcd076 # v2.13.0 publish: needs: [dist] @@ -31,14 +34,14 @@ jobs: if: github.event_name == 'release' && github.event.action == 'published' steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: Packages path: dist - name: Generate artifact attestation for sdist and wheel - uses: actions/attest-build-provenance@v2.1.0 + uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 with: subject-path: "dist/*" - - uses: pypa/gh-action-pypi-publish@release/v1 + - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fac3ebe8..aabcc36a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,8 @@ name: CI +permissions: + contents: read + on: workflow_dispatch: pull_request: @@ -17,55 +20,60 @@ env: FORCE_COLOR: 3 jobs: - pre-commit-and-lint: - name: Format + lint: + name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 - - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - uses: pre-commit/action@v3.0.1 - with: - extra_args: --hook-stage manual --all-files - - uses: prefix-dev/setup-pixi@v0.8.1 + + - uses: prefix-dev/setup-pixi@fef5c9568ca6c4ff7707bf840ab0692ba3f08293 # v0.9.0 with: - pixi-version: v0.39.0 + pixi-version: v0.50.2 cache: true environments: lint - - name: Run Pylint, Mypy & Pyright - run: | - pixi run -e lint pylint - pixi run -e lint mypy - pixi run -e lint pyright + + - name: Lint (if this step fails, please 'pixi run lint' locally and push the changes) + run: pixi run -e lint lint checks: - name: Check ${{ matrix.environment }} + name: Test ${{ matrix.environment }} runs-on: ${{ matrix.runs-on }} - needs: [pre-commit-and-lint] strategy: fail-fast: false matrix: - environment: [ci-py310, ci-py313, ci-backends] + environment: + - tests-py310 + - tests-py313 + - tests-numpy1 + - tests-backends + - tests-backends-py310 + - tests-nogil runs-on: [ubuntu-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 - - uses: prefix-dev/setup-pixi@v0.8.1 + - uses: prefix-dev/setup-pixi@fef5c9568ca6c4ff7707bf840ab0692ba3f08293 # v0.9.0 with: - pixi-version: v0.39.0 + pixi-version: v0.50.2 cache: true environments: ${{ matrix.environment }} - name: Test package + # Save some time; also at the moment of writing coverage crashes on python 3.13t + if: ${{ matrix.environment != 'tests-nogil' }} run: pixi run -e ${{ matrix.environment }} tests-ci + - name: Test free-threading + if: ${{ matrix.environment == 'tests-nogil' }} + run: pixi run -e tests-nogil tests --parallel-threads=4 + - name: Upload coverage report - uses: codecov/codecov-action@v5.1.2 + if: ${{ matrix.environment != 'tests-nogil' }} + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml deleted file mode 100644 index bd29e25b..00000000 --- a/.github/workflows/dependabot-auto-merge.yml +++ /dev/null @@ -1,23 +0,0 @@ -# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions#approve-a-pull-request -name: Dependabot auto-merge -on: pull_request - -permissions: - contents: write - pull-requests: write - -jobs: - dependabot: - runs-on: ubuntu-latest - if: github.actor == 'dependabot[bot]' - steps: - - name: Dependabot metadata - id: metadata - uses: dependabot/fetch-metadata@v2 - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - name: Enable auto-merge for Dependabot PRs - run: gh pr merge --auto --merge "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index b1bfac51..03eb8b0b 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -1,21 +1,27 @@ name: Docs Build +permissions: + contents: read + on: [push, pull_request] jobs: docs-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: prefix-dev/setup-pixi@v0.8.1 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - uses: prefix-dev/setup-pixi@fef5c9568ca6c4ff7707bf840ab0692ba3f08293 # v0.9.0 with: - pixi-version: v0.39.0 + pixi-version: v0.50.2 cache: true environments: docs + - name: Build Docs run: pixi run -e docs docs + - name: Upload Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: docs-build path: docs/build/ diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index 65f1286c..b673cada 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -1,5 +1,8 @@ name: Docs Deploy +permissions: + contents: write # needed for the deploy step + on: workflow_run: workflows: ["Docs Build"] @@ -14,9 +17,10 @@ jobs: environment: name: docs-deploy steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - name: Download Artifact - uses: dawidd6/action-download-artifact@v7 + uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11 with: workflow: docs-build.yml name: docs-build @@ -26,7 +30,7 @@ jobs: # See # https://github.com/JamesIves/github-pages-deploy-action/tree/dev#using-an-ssh-deploy-key- - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4 + uses: JamesIves/github-pages-deploy-action@6c2d9db40f9296374acc17b90404b6e8864128c8 # v4.7.3 with: folder: docs/build/ ssh-key: ${{ secrets.DEPLOY_KEY }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 655be69a..00000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,85 +0,0 @@ -ci: - autoupdate_commit_msg: "chore: update pre-commit hooks" - autofix_commit_msg: "style: pre-commit fixes" - -exclude: ^.cruft.json|.copier-answers.yml$ - -repos: - - repo: https://github.com/adamchainz/blacken-docs - rev: "1.18.0" - hooks: - - id: blacken-docs - additional_dependencies: [black==24.*] - - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: "v5.0.0" - hooks: - - id: check-added-large-files - - id: check-case-conflict - - id: check-merge-conflict - - id: check-symlinks - - id: check-yaml - - id: debug-statements - - id: end-of-file-fixer - - id: mixed-line-ending - - id: name-tests-test - args: ["--pytest-test-first"] - - id: requirements-txt-fixer - - id: trailing-whitespace - - - repo: https://github.com/pre-commit/pygrep-hooks - rev: "v1.10.0" - hooks: - - id: rst-backticks - - id: rst-directive-colons - - id: rst-inline-touching-normal - - - repo: https://github.com/rbubley/mirrors-prettier - rev: "v3.4.2" - hooks: - - id: prettier - types_or: [yaml, markdown, html, css, scss, javascript, json] - args: [--prose-wrap=always] - - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.8.2" - hooks: - - id: ruff-format - - id: ruff - args: ["--fix", "--show-fixes"] - - - repo: https://github.com/codespell-project/codespell - rev: "v2.3.0" - hooks: - - id: codespell - exclude: pixi.lock - - - repo: https://github.com/shellcheck-py/shellcheck-py - rev: "v0.10.0.1" - hooks: - - id: shellcheck - - - repo: local - hooks: - - id: disallow-caps - name: Disallow improper capitalization - language: pygrep - entry: PyBind|Numpy|Cmake|CCache|Github|PyTest - exclude: .pre-commit-config.yaml - - - repo: https://github.com/abravalheri/validate-pyproject - rev: "v0.23" - hooks: - - id: validate-pyproject - additional_dependencies: ["validate-pyproject-schema-store[all]"] - - - repo: https://github.com/python-jsonschema/check-jsonschema - rev: "0.30.0" - hooks: - - id: check-dependabot - - id: check-github-workflows - - - repo: https://github.com/numpy/numpydoc - rev: "v1.8.0" - hooks: - - id: numpydoc-validation diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 042541ab..b1bff184 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -9,16 +9,16 @@ This project exists thanks to the following contributors - - - + + + - + @@ -27,10 +27,19 @@ This project exists thanks to the following contributors + - + + + + + + + + +
Lucas Colley
Lucas Colley

πŸ’» πŸ“– πŸ’‘ πŸ€” πŸš‡ 🚧 πŸ”§ ⚠️ πŸ› πŸ“¦
Matt Haberland
Matt Haberland

πŸ’» πŸ€”
Jake Bowhay
Jake Bowhay

πŸ’» πŸ‘€
Lucas Colley
Lucas Colley

πŸ’» πŸ“– πŸ’‘ πŸ€” πŸš‡ 🚧 πŸ”§ ⚠️ πŸ› πŸ“¦ πŸ‘€
Matt Haberland
Matt Haberland

πŸ’» πŸ€” ⚠️
Jake Bowhay
Jake Bowhay

πŸ’» πŸ‘€ πŸ”§
Aaron Meurer
Aaron Meurer

πŸ‘€ πŸ€” πŸš‡
Tim Head
Tim Head

πŸ€”
Athan
Athan

πŸ‘€ πŸ€”
Carlos Ramos CarreΓ±o
Carlos Ramos CarreΓ±o

πŸ€”
Ralf Gommers
Ralf Gommers

πŸ€” πŸš‡ πŸ‘€
Guido Imperiale
Guido Imperiale

πŸ’» πŸ“– πŸ”§ ⚠️ πŸ’‘ πŸ› πŸ€” πŸ‘€ 🚧
Joren Hammudoglu
Joren Hammudoglu

πŸ‘€
Thomas J. Fan
Thomas J. Fan

πŸ€”
Irwin Zaid
Irwin Zaid

πŸ€”
Omar Salman
Omar Salman

πŸ’»
Ralf Gommers
Ralf Gommers

πŸ€” πŸš‡ πŸ‘€
Olivier Grisel
Olivier Grisel

πŸ’»
Guido Imperiale
Guido Imperiale

πŸ’» πŸ“– πŸ”§ ⚠️ πŸ’‘
Evgeni Burovski
Evgeni Burovski

πŸ’» πŸ“–
Jake Vanderplas
Jake Vanderplas

πŸ‘€
kotlinisland
kotlinisland

πŸ‘€
detachhead
detachhead

πŸ‘€
Neil Girdhar
Neil Girdhar

πŸ’» ⚠️
Thomas Li
Thomas Li

πŸ› πŸ”§
Pearu Peterson
Pearu Peterson

πŸ‘€
Patrick J. Roddy
Patrick J. Roddy

πŸ’» πŸ“– πŸ’‘ ⚠️
Martin Schuck
Martin Schuck

πŸ€”
diff --git a/README.md b/README.md index 3165e70d..2686b4b6 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,32 @@ # array-api-extra -[![Actions Status][actions-badge]][actions-link] [![docs - here!][docs-badge]][docs-link] -[![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh) -[![All Contributors](https://img.shields.io/github/all-contributors/data-apis/array-api-extra?color=ee8449&style=flat-square)](#contributors) -[![Scientific Python Ecosystem Coordination](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/) -[![codecov](https://codecov.io/github/data-apis/array-api-extra/graph/badge.svg)](https://codecov.io/github/data-apis/array-api-extra) - [![PyPI version][pypi-version]][pypi-link] [![Conda-Forge][conda-badge]][conda-link] [![PyPI platforms][pypi-platforms]][pypi-link] +[![All Contributors](https://img.shields.io/github/all-contributors/data-apis/array-api-extra?color=ee8449&style=flat-square)](#contributors) + +[![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh) +[![Typing](https://img.shields.io/pypi/types/array-api-extra)](https://typing.python.org/) +[![codecov](https://codecov.io/github/data-apis/array-api-extra/graph/badge.svg)](https://codecov.io/github/data-apis/array-api-extra) +[![EffVer Versioning](https://img.shields.io/badge/version_scheme-EffVer-0097a7)](https://jacobtomlinson.dev/effver) +[![SPEC 8 β€” Securing the Release Process](https://img.shields.io/badge/SPEC-8-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/spec-0008/) -[actions-badge]: https://github.com/data-apis/array-api-extra/workflows/CI/badge.svg -[actions-link]: https://github.com/data-apis/array-api-extra/actions -[conda-badge]: https://img.shields.io/conda/vn/conda-forge/array-api-extra -[conda-link]: https://github.com/conda-forge/array-api-extra-feedstock + +[actions-badge]: https://github.com/data-apis/array-api-extra/workflows/CI/badge.svg +[actions-link]: https://github.com/data-apis/array-api-extra/actions +[conda-badge]: https://img.shields.io/conda/vn/conda-forge/array-api-extra +[conda-link]: https://github.com/conda-forge/array-api-extra-feedstock [github-discussions-badge]: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github -[github-discussions-link]: https://github.com/data-apis/array-api-extra/discussions -[pypi-link]: https://pypi.org/project/array-api-extra/ -[pypi-platforms]: https://img.shields.io/pypi/pyversions/array-api-extra -[pypi-version]: https://img.shields.io/pypi/v/array-api-extra -[docs-badge]: https://img.shields.io/badge/docs-here!-2ea44f -[docs-link]: https://data-apis.org/array-api-extra/index.html +[github-discussions-link]: https://github.com/data-apis/array-api-extra/discussions +[pypi-link]: https://pypi.org/project/array-api-extra/ +[pypi-platforms]: https://img.shields.io/pypi/pyversions/array-api-extra +[pypi-version]: https://img.shields.io/pypi/v/array-api-extra +[docs-badge]: https://img.shields.io/badge/docs-here!-2ea44f +[docs-link]: https://data-apis.org/array-api-extra/index.html @@ -32,9 +34,24 @@ Extra array functions built on top of the array API standard. Used by: -- [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for +- [SciPy](https://github.com/scipy/scipy) β€” Fundamental algorithms for scientific computing. -- _your library? Let us know!_ +- [scikit-learn](https://github.com/scikit-learn/scikit-learn)Β β€” Machine + Learning in Python. +- *your library? Let us know!* + +## Installation + +See https://data-apis.org/array-api-extra/#installation. + +## Versioning + +This project uses [EffVer](https://jacobtomlinson.dev/effver/). TL;DR: + +- To bump from version `x.y.z` to `x.(y+1).0` of array-api-extra, expect that + you may need to put in some work. +- To bump from version `x.y.z` to `x.y.(z+1)`, any work needed on your side + should be minimal. Please open an issue if this is not the case! ## Contributors @@ -47,16 +64,16 @@ This project exists thanks to the following contributors - - - + + + - + @@ -65,10 +82,19 @@ This project exists thanks to the following contributors + - + + + + + + + + +
Lucas Colley
Lucas Colley

πŸ’» πŸ“– πŸ’‘ πŸ€” πŸš‡ 🚧 πŸ”§ ⚠️ πŸ› πŸ“¦
Matt Haberland
Matt Haberland

πŸ’» πŸ€”
Jake Bowhay
Jake Bowhay

πŸ’» πŸ‘€
Lucas Colley
Lucas Colley

πŸ’» πŸ“– πŸ’‘ πŸ€” πŸš‡ 🚧 πŸ”§ ⚠️ πŸ› πŸ“¦ πŸ‘€
Matt Haberland
Matt Haberland

πŸ’» πŸ€” ⚠️
Jake Bowhay
Jake Bowhay

πŸ’» πŸ‘€ πŸ”§
Aaron Meurer
Aaron Meurer

πŸ‘€ πŸ€” πŸš‡
Tim Head
Tim Head

πŸ€”
Athan
Athan

πŸ‘€ πŸ€”
Carlos Ramos CarreΓ±o
Carlos Ramos CarreΓ±o

πŸ€”
Ralf Gommers
Ralf Gommers

πŸ€” πŸš‡ πŸ‘€
Guido Imperiale
Guido Imperiale

πŸ’» πŸ“– πŸ”§ ⚠️ πŸ’‘ πŸ› πŸ€” πŸ‘€ 🚧
Joren Hammudoglu
Joren Hammudoglu

πŸ‘€
Thomas J. Fan
Thomas J. Fan

πŸ€”
Irwin Zaid
Irwin Zaid

πŸ€”
Omar Salman
Omar Salman

πŸ’»
Ralf Gommers
Ralf Gommers

πŸ€” πŸš‡ πŸ‘€
Olivier Grisel
Olivier Grisel

πŸ’»
Guido Imperiale
Guido Imperiale

πŸ’» πŸ“– πŸ”§ ⚠️ πŸ’‘
Evgeni Burovski
Evgeni Burovski

πŸ’» πŸ“–
Jake Vanderplas
Jake Vanderplas

πŸ‘€
kotlinisland
kotlinisland

πŸ‘€
detachhead
detachhead

πŸ‘€
Neil Girdhar
Neil Girdhar

πŸ’» ⚠️
Thomas Li
Thomas Li

πŸ› πŸ”§
Pearu Peterson
Pearu Peterson

πŸ‘€
Patrick J. Roddy
Patrick J. Roddy

πŸ’» πŸ“– πŸ’‘ ⚠️
Martin Schuck
Martin Schuck

πŸ€”
diff --git a/RELEASING.md b/RELEASING.md index a9640cb4..9b5d4ff5 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,8 +1,8 @@ 1. Update the version in `src/array_api_extra/__init__.py` -2. Update the lockfile with `pixi update` and `pixi install` +2. Update the lockfile with `pixi update; pixi install` 3. Push your changes 4. Cut a release via the GitHub GUI 5. Update the version to `{next micro version}.dev0` -6. Update the lockfile +6. `pixi clean cache --pypi; pixi update; pixi install` 7. Push your changes 8. Merge the automated PR to conda-forge/array-api-extra-feedstock diff --git a/codecov.yml b/codecov.yml index 1a517b3a..dc9b47cd 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,4 +1,9 @@ comment: false +github_checks: + annotations: false ignore: - "src/array_api_extra/_lib/_compat" - "src/array_api_extra/_lib/_typing" +coverage: + status: + project: off diff --git a/docs/api-lazy.md b/docs/api-lazy.md new file mode 100644 index 00000000..abea5cbb --- /dev/null +++ b/docs/api-lazy.md @@ -0,0 +1,15 @@ +# Tools for lazy backends + +These additional functions are meant to be used to support compatibility with +lazy backends, e.g. Dask or JAX: + +```{eval-rst} +.. currentmodule:: array_api_extra +.. autosummary:: + :nosignatures: + :toctree: generated + + lazy_apply + testing.lazy_xp_function + testing.patch_lazy_xp_functions +``` diff --git a/docs/api-reference.md b/docs/api-reference.md index e2c115c6..61e09e2d 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -6,13 +6,19 @@ :nosignatures: :toctree: generated + apply_where at atleast_nd + broadcast_shapes cov create_diagonal + default_dtype expand_dims + isclose kron + nan_to_num nunique + one_hot pad setdiff1d sinc diff --git a/docs/conf.py b/docs/conf.py index 79000c96..e2cab35b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -4,6 +4,8 @@ from typing import Any project = "array-api-extra" +copyright = "Consortium for Python Data API Standards" +author = "Consortium for Python Data API Standards" version = release = importlib.metadata.version("array_api_extra") extensions = [ @@ -53,6 +55,9 @@ intersphinx_mapping = { "python": ("https://docs.python.org/3", None), + "array-api": ("https://data-apis.org/array-api/draft", None), + "dask": ("https://docs.dask.org/en/stable", None), + "numpy": ("https://numpy.org/doc/stable", None), "jax": ("https://jax.readthedocs.io/en/latest", None), } diff --git a/docs/contributing.md b/docs/contributing.md index 221021d0..bfcfd0d0 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -6,11 +6,14 @@ converting code to consume the standard. Thanks to [all contributors](contributors.md) so far! -## How to contribute a function +## How to contribute a new function - [Open an issue](https://github.com/data-apis/array-api-extra/issues/new) to - propose the new function. -- Add the implementation of your function to `src/array_api_extra/_funcs.py`. + propose the new function. You may want to wait for initial feedback on the + issue before diving into an implementation. Feel free to skip this step if + there is already an open issue for the function. +- Add the implementation of your function to + `src/array_api_extra/_lib/_funcs.py`. - Ensure that your function includes type annotations and a [numpydoc-style docstring](https://numpydoc.readthedocs.io/en/latest/format.html). - Add your function to `__all__` at the top of the file. @@ -20,6 +23,33 @@ Thanks to [all contributors](contributors.md) so far! - Add your function to `docs/api-reference.md`. - [Make a PR!](https://github.com/data-apis/array-api-extra/pulls) +## How to add delegation to a function + +See [the tracker for adding delegation][delegation-tracker]. + +[delegation-tracker]: https://github.com/data-apis/array-api-extra/issues/100 + +- If you would like to discuss the task before diving into the implementation, + click on the three dots next to the function on the tracker issue, and choose + "Convert to sub-issue". +- Create a function in `src/array_api_extra/_delegation.py` with a signature + matching the function in `src/array_api_extra/_lib/_funcs.py`, and move the + docstring to the new function. Leave a one-line docstring in `_funcs.py`, + pointing to `_delegation.py` to see the full docstring. +- Also move the initial `array_namespace` call and any input validation over to + the new function. +- Add delegation to backends using the `if _delegate` pattern. See + `src/array_api_extra/_lib/_backends.py` for the full list of backends we have + worked with so far. +- After all delegation layers, return the result from the implementation in + `_funcs`. +- Simplify the signature in `_funcs.py` to remove impossible arguments now that + it is only called internally via `_delegation`. For example, the `xp` + parameter can be changed from type `ModuleType | None` to `ModuleType`. +- Don't worry if you are not sure how to do some of the above steps or think you + might have done something wrong - + [make a PR!](https://github.com/data-apis/array-api-extra/pulls) + ## Development workflow If you are an experienced contributor to Python packages, feel free to develop @@ -31,7 +61,7 @@ development of array-api-extra is made easy with at . - `cd array-api-extra`. - [Install Pixi](https://pixi.sh/latest/#installation). -- To enter a development environment: +- To enter a development environment (if you prefer this to the `pixi run` interface): ``` pixi shell -e dev @@ -43,62 +73,75 @@ pixi shell -e dev pixi run tests ``` -- To generate the coverage report: +- To build the docs locally: ``` -pixi run coverage +pixi run docs ``` -- To generate and display the coverage report: +- To build and preview the docs locally: ``` -pixi run open-coverage +pixi run open-docs ``` -- To build the docs locally: +- To install pre-commit hooks: ``` -pixi run docs +pixi run hooks ``` -- To build and preview the docs locally: +- To run pre-commit checks on staged files: ``` -pixi run open-docs +pixi run pre-commit ``` -- To install a [pre-commit](https://pre-commit.com) hook: +- To run the full lint suite: ``` -pixi run pre-commit-install +pixi run --environment=lint lint ``` -- To run the lint suite: +- To enter an interactive Python prompt: ``` -pixi run lint +pixi run ipython ``` -- To enter an interactive Python prompt: +- To run individual parts of the lint suite separately (for example): ``` -pixi run ipython +pixi run --environment=lint pyright +pixi run --environment=lint dprint ``` -- To run individual parts of the lint suite separately: +- To generate the coverage report: ``` -pixi run pre-commit -pixi run pylint -pixi run mypy -pixi run pyright +pixi run coverage +``` + +- To generate and display the coverage report: + +``` +pixi run open-coverage ``` Alternative environments are available with a subset of the dependencies and tasks available in the `dev` environment: ``` -pixi shell -e docs -pixi shell -e tests -pixi shell -e lint +pixi shell --environment=docs +pixi shell --environment=tests +pixi shell --environment=tests-backends +pixi shell --environment=lint +``` + +If you run on a host with CUDA hardware, you can enable extra tests: + +``` +pixi shell --environment=dev-cuda +pixi shell --environment=tests-cuda +pixi run --environment=tests-cuda tests ``` diff --git a/docs/contributors.md b/docs/contributors.md index 724cdb77..c8e001d3 100644 --- a/docs/contributors.md +++ b/docs/contributors.md @@ -1,3 +1,2 @@ ```{include} ../CONTRIBUTORS.md - ``` diff --git a/docs/index.md b/docs/index.md index c1998cdd..5168e973 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,6 +5,7 @@ :hidden: self api-reference.md +api-lazy.md contributing.md contributors.md ``` @@ -16,15 +17,17 @@ well as delegation to existing implementations for known array library backends. The intended users of this library are "array-consuming" libraries which are using [array-api-compat](https://data-apis.org/array-api-compat/) to make their own library's functions array-agnostic. In this library, they will find a set of -tools which provide _extra_ functionality on top of the array API standard, +tools which provide *extra* functionality on top of the array API standard, which other array-consuming libraries in a similar position have found useful themselves. It is currently used by: -- [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for +- [SciPy](https://github.com/scipy/scipy) β€” Fundamental algorithms for scientific computing. -- _your library? Let us know!_ +- [scikit-learn](https://github.com/scikit-learn/scikit-learn) β€” Machine + Learning in Python. +- *your library? Let us know!* (installation)= @@ -111,8 +114,16 @@ def array_namespace(*xs, **kwargs): See [an example of this in SciPy][scipy-vendor-example]. ``` -[scipy-vendor-example]: -https://github.com/scipy/scipy/blob/main/scipy/_lib/_array_api_compat_vendor.py +[scipy-vendor-example]: https://github.com/scipy/scipy/blob/main/scipy/_lib/_array_api_compat_vendor.py + +## Versioning + +This project uses [EffVer](https://jacobtomlinson.dev/effver/). TL;DR: + +- To bump from version `x.y.z` to `x.(y+1).0` of array-api-extra, expect that + you may need to put in some work. +- To bump from version `x.y.z` to `x.y.(z+1)`, any work needed on your side + should be minimal. Please open an issue if this is not the case! (usage)= @@ -175,7 +186,7 @@ increase performance. In particular, the following kinds of function are also in-scope: - Functions which implement - [array API standard extension](https://data-apis.org/array-api/2023.12/extensions/index.html) + [array API standard extension](https://data-apis.org/array-api/latest/extensions/index.html) functions in terms of functions from the base standard. - Functions which add functionality (e.g. extra parameters) to functions from the standard. diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 77237968..00000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -furo>=2023.08.17 -myst_parser>=0.13 -sphinx>=7.0 -sphinx_autodoc_typehints -sphinx_copybutton diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 00000000..3ae3197d --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,56 @@ +lefthook: pixi run --no-progress --environment=lint lefthook + +templates: + run: run --quiet --no-progress --environment=lint + +colors: true + +output: + - meta # Print lefthook version + - summary # Print summary block (successful and failed steps) + - empty_summary # Print summary heading when there are no steps to run + # - success # Print successful steps + # - failure # Print failed steps printing + # - execution # Print any execution logs + # - execution_out # Print execution output + # - execution_info # Print `EXECUTE > ...` logging + - skips # Print "skip" (i.e. no files matched) + +pre-commit: + parallel: true + jobs: + - name: dprint + glob: "*.{json,jsonc,md,toml,yaml,yml}" + stage_fixed: true + run: pixi {run} dprint + - name: ruff + glob: "*.{py,pyi}" + stage_fixed: true + group: + piped: true + jobs: + - name: ruff check + run: pixi {run} ruff-check {staged_files} + - name: ruff format + run: pixi {run} ruff-format {staged_files} + - name: pyright + glob: "*.{py,pyi}" + run: pixi {run} pyright + - name: mypy + glob: "*.{py,pyi}" + run: pixi {run} mypy + - name: typos + stage_fixed: true + run: pixi {run} typos + - name: actionlint + run: pixi {run} actionlint + - name: blacken-docs + glob: "*.md" + stage_fixed: true + run: pixi {run} blacken-docs {staged_files} + - name: validate-pyproject + glob: "pyproject.toml" + run: pixi {run} validate-pyproject + - name: numpydoc + glob: "*.py" + run: pixi {run} numpydoc {staged_files} diff --git a/pixi.lock b/pixi.lock index 438cf49e..607b2635 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,767 +1,5 @@ version: 6 environments: - ci-backends: - channels: - - url: https://prefix.dev/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-event-stream-0.5.0-h7959bf6_11.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-http-0.9.2-hefd7a92_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/contourpy-1.3.1-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py310h89163eb_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/cytoolz-1.0.1-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://prefix.dev/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jax-0.4.35-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.4.35-cpu_py310h430587c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda - - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-19.1.6-h024ca30_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.43.0-py310h1a6248f_1.conda - - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/lz4-4.3.3-py310h80b8a69_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda - - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pillow-11.1.0-py310h7e6dc6c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/psutil-6.1.1-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyarrow-18.1.0-py310hff52083_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyarrow-core-18.1.0-py310hac404ae_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: . - osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py310hb4ad77e_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py310h497396d_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/contourpy-1.3.1-py310h7f4e7e6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py310hc74094e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cytoolz-1.0.1-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.1.5-py310h805dbd7_3.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jax-0.4.35-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.4.35-cpu_py310h604521f_0.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libllvm14-14.0.6-hd1a9a77_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.43.0-py310h9fcfb1b_1.conda - - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-4.3.3-py310hedecf87_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda - - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/msgpack-python-1.1.0-py310h7306fd8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.0.2-py310h530be0a_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pillow-11.1.0-py310h61efb56_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/psutil-6.1.1-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-18.1.0-py310hb6292c7_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-core-18.1.0-py310hc17921c_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.16-h870587a_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tornado-6.4.2-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: . - win-64: - - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-cal-0.8.1-h099ea23_3.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-common-0.10.6-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-compression-0.3.0-h099ea23_5.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-event-stream-0.5.0-h85d8506_11.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-http-0.9.2-h3888f84_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-io-0.15.3-hc5a9e45_5.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-mqtt-0.11.0-h2c94728_12.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-s3-0.7.7-h6a38c86_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-checksums-0.2.2-h099ea23_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda - - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/c-ares-1.34.4-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh7428d3b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/contourpy-1.3.1-py310hc19bc0b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py310h38315fa_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cytoolz-1.0.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.23-h9062f6e_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libgcc-14.2.0-h1383e82_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgomp-14.2.0-h1383e82_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-2.33.0-h95c5cb2_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-storage-2.33.0-he5eb982_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgrpc-1.67.1-h0ac93cb_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libssh2-1.11.1-he619c9f_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libthrift-0.21.0-hbe90ef8_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libtiff-4.7.0-h797046b_3.conda - - conda: https://prefix.dev/conda-forge/win-64/libutf8proc-2.9.0-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libwebp-base-1.5.0-h3b0e114_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.43.0-py310h0288bfe_1.conda - - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/lz4-4.3.3-py310hd8baafb_2.conda - - conda: https://prefix.dev/conda-forge/win-64/lz4-c-1.10.0-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/win-64/msgpack-python-1.1.0-py310hc19bc0b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numba-0.60.0-py310h7793332_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.0.2-py310h1ec8c79_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda - - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pillow-11.1.0-py310h9595edc_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/psutil-6.1.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - - conda: https://prefix.dev/conda-forge/win-64/pyarrow-18.1.0-py310h5588dad_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pyarrow-core-18.1.0-py310h399dd74_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-h0e40799_0.conda - - conda: https://prefix.dev/conda-forge/win-64/xorg-libxdmcp-1.1.5-h0e40799_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: . - ci-py310: - channels: - - url: https://prefix.dev/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py310h89163eb_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py310h5851e9f_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . - osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py310hc74094e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py310ha1ddda0_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.16-h870587a_1_cpython.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . - win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py310h38315fa_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py310hb9d903e_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - pypi: . - ci-py313: - channels: - - url: https://prefix.dev/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py313h8060acc_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . - osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py313ha9b7d5b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . - win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py313hb4c8b1a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - pypi: . default: channels: - url: https://prefix.dev/conda-forge/ @@ -771,66 +9,85 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - pypi: ./ dev: channels: - url: https://prefix.dev/conda-forge/ @@ -838,110 +95,328 @@ environments: - https://pypi.org/simple packages: linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.7-hd0c01bc_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.11-py313h78bf25f_1.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hf01b4d8_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py313h8060acc_0.conda - - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/dprint-0.50.0-hb23c6cf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/ipython-8.31.0-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.7.0-cpu_py313h9430eff_0.conda - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/lefthook-1.12.4-hfc2019e_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cpu_mkl_h783a78b_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-ha9997c6_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py313h08cd8bf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mypy-1.17.1-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/nodejs-24.4.1-heeeca48_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py313h50b8c88_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py313h7037e92_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/psutil-7.0.0-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cpu_mkl_py313_he78a34b_102.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ruff-0.12.12-h718f522_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/typos-1.36.2-hdab8a38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.24.0-py313h736c1ce_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.7-h23c3e72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/astroid-3.3.11-py313habf4b1d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/black-25.1.0-py313habf4b1d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.1.0-py313h253db18_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/cffi-1.17.1-py313he20ea1e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/dprint-0.50.0-hd2571bf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py313h904ca6e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.7.0-cpu_py313h9e1e12b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/lefthook-1.12.4-hccc6df8_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_h42ab995_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-ha1d9b0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h7b7ecba_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py313h270e054_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.12.0-hf235a45_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py313h366a99e_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mypy-1.17.1-py313h585f44e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/nodejs-24.4.1-h2e7699b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py313h1997fa5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py313hc518a0f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py313hc551f4f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/psutil-7.0.0-py313h585f44e_1.conda - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py313_h2b2588c_102.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ruff-0.12.12-h3caf6b2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.16.1-py313hf2e9e4d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -950,122 +425,167 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ukkonen-1.0.1-py313h33d0bda_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/typos-1.36.1-h121f529_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + - pypi: ./ osx-arm64: + - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.7-h48c0fde_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.11-py313h8f79df9_1.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py313ha9b7d5b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/dprint-0.50.0-h8dba533_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py313h6d8efe1_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/ipython-8.31.0-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py313h8fc57d6_1.conda - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/lefthook-1.12.4-h820172f_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_ha33cc54_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py313h9cecdfe_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.12.0-h02a13b7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py313hd1f53c0_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mypy-1.17.1-py313hcdf3177_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-24.4.1-hab9d20b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py313h2c0ffef_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py313h41a2e72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py313hc50a443_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/psutil-7.0.0-py313hcdf3177_1.conda - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py313_hfe15936_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ruff-0.12.12-h2342e2b_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -1074,117 +594,148 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ukkonen-1.0.1-py313hf9c7212_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/typos-1.36.2-hd1458d2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py313hf2da073_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.24.0-py313hff09f02_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: ./ win-64: + - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.7-h2466b09_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.11-py313hfa70ccb_1.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313hfe59770_4.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py313hb4c8b1a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/dprint-0.50.0-h63977a8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/noarch/ipython-8.31.0-pyh7428d3b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyh6be1c34_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/lefthook-1.12.4-h11686cb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cpu_mkl_hf058426_104.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py313hc403fe3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.12.0-hfeaa22a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mypy-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/nodejs-24.4.1-he453025_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py313h96c6e06_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py313hefb8edb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py313hf069bd2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/win-64/psutil-7.0.0-py313h5ea7bf4_1.conda - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cpu_mkl_py313_h97e7b96_104.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ruff-0.12.12-h429b229_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -1193,92 +744,233 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/ukkonen-1.0.1-py313h1ec8472_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/typos-1.36.2-h77a83cd_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: . - docs: + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.24.0-py313hcdcf24b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda + - pypi: ./ + dev-cuda: channels: - url: https://prefix.dev/conda-forge/ indexes: - https://pypi.org/simple packages: linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.7-hd0c01bc_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.11-py313h78bf25f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hf01b4d8_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cuobjdump-12.9.82-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-dev-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvdisasm-12.9.88-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.9.86-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvtx-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/cudnn-9.12.0.46-hbcb9cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-13.6.0-py313h586c94b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.6.0-py313h28b6081_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/dprint-0.50.0-hb23c6cf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py313h5d5ffb9_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py313hb1b46e1_200.conda + - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/lefthook-1.12.4-hfc2019e_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcap-2.75-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-dev-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-9.12.0.46-hf7e9902_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-dev-9.12.0.46-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-dev-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufile-1.14.1.1-ha8da6e3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-dev-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-dev-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-dev-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcrypt-lib-1.11.1-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgpg-error-1.55-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmagma-2.9.0-h9918c94_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.9.86-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsystemd0-257.7-h4e0b6ca_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cuda129_mkl_h16584c3_302.conda + - conda: https://prefix.dev/conda-forge/linux-64/libudev1-257.7-hbe16f8c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-ha9997c6_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py313h08cd8bf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mypy-1.17.1-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/nodejs-24.4.1-heeeca48_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py313h50b8c88_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py313h7037e92_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/psutil-7.0.0-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cuda129_mkl_py313_h3949ff4_302.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/rdma-core-59.0-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ruff-0.12.12-h718f522_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -1286,63 +978,173 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: . - osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/triton-3.3.1-cuda129py313h246eb7c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/typos-1.36.2-hdab8a38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.24.0-py313h736c1ce_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.7-h23c3e72_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/astroid-3.3.11-py313habf4b1d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/black-25.1.0-py313habf4b1d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.1.0-py313h253db18_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/cffi-1.17.1-py313he20ea1e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/dprint-0.50.0-hd2571bf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py313h904ca6e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.7.0-cpu_py313h9e1e12b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/lefthook-1.12.4-hccc6df8_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_h42ab995_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-ha1d9b0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h7b7ecba_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py313h270e054_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py313h366a99e_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mypy-1.17.1-py313h585f44e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/nodejs-24.4.1-h2e7699b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py313h1997fa5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py313hc518a0f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py313hc551f4f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/psutil-7.0.0-py313h585f44e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py313_h2b2588c_102.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ruff-0.12.12-h3caf6b2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.16.1-py313hf2e9e4d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -1350,60 +1152,168 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py313hf2da073_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: . - win-64: + - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/typos-1.36.1-h121f529_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.7-h48c0fde_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda - - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.11-py313h8f79df9_1.conda + - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/dprint-0.50.0-h8dba533_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py313h6d8efe1_1.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py313h8fc57d6_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/lefthook-1.12.4-h820172f_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_ha33cc54_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py313h9cecdfe_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda + - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py313hd1f53c0_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mypy-1.17.1-py313hcdf3177_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-24.4.1-hab9d20b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py313h2c0ffef_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py313h41a2e72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py313hc50a443_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/psutil-7.0.0-py313hcdf3177_1.conda + - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py313_hfe15936_2.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ruff-0.12.12-h2342e2b_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda @@ -1411,322 +1321,1030 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: . - lint: - channels: - - url: https://prefix.dev/conda-forge/ - indexes: + - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/typos-1.36.2-hd1458d2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.24.0-py313hff09f02_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.7-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.11-py313hfa70ccb_1.conda + - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313hfe59770_4.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cupti-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.9.86-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/win-64/cudnn-9.12.0.46-h32ff316_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-13.6.0-py313h5dfe2c3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.6.0-py313ha16128a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/dprint-0.50.0-h63977a8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py313h927ade5_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyh6be1c34_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/lefthook-1.12.4-h11686cb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcublas-12.9.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-dev-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudss-0.6.0.5-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcufft-11.4.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.10.19-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.5.82-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.10.65-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libgomp-15.1.0-h1383e82_5.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmagma-2.9.0-h6290ce1_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.9.86-he0c23c2_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cuda128_mkl_h2cc4d28_304.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py313hc403fe3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda + - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mypy-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/nodejs-24.4.1-he453025_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py313h96c6e06_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py313hefb8edb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py313hf069bd2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/win-64/psutil-7.0.0-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cuda128_mkl_py313_h2397fbb_304.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ruff-0.12.12-h429b229_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/typos-1.36.2-h77a83cd_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.24.0-py313hcdcf24b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda + - pypi: ./ + docs: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hf01b4d8_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.24.0-py313h736c1ce_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.1.0-py313h253db18_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/cffi-1.17.1-py313he20ea1e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313hdb1a8e5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313h674b998_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.24.0-py313hff09f02_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313hfe59770_4.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hce7ae62_2.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.24.0-py313hcdcf24b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda + - pypi: ./ + lint: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: - https://pypi.org/simple packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.7-hd0c01bc_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.11-py313h78bf25f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hf01b4d8_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/dprint-0.50.0-hb23c6cf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/lefthook-1.12.4-hfc2019e_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.12.0-hf235a45_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mypy-1.17.1-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/nodejs-24.4.1-heeeca48_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/psutil-7.0.0-py313h07c4f96_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ruff-0.12.12-h718f522_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/typos-1.36.2-hdab8a38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.24.0-py313h736c1ce_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.7-h23c3e72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/astroid-3.3.11-py313habf4b1d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/black-25.1.0-py313habf4b1d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.1.0-py313h253db18_4.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/cffi-1.17.1-py313he20ea1e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/dprint-0.50.0-hd2571bf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/lefthook-1.12.4-hccc6df8_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mypy-1.17.1-py313h585f44e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/nodejs-24.4.1-h2e7699b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313hdb1a8e5_2.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/psutil-7.0.0-py313h585f44e_1.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ruff-0.12.12-h3caf6b2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ukkonen-1.0.1-py313h33d0bda_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/typos-1.36.1-h121f529_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + - pypi: ./ osx-arm64: + - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.7-h48c0fde_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.11-py313h8f79df9_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/dprint-0.50.0-h8dba533_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/lefthook-1.12.4-h820172f_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.12.0-h02a13b7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mypy-1.17.1-py313hcdf3177_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-24.4.1-hab9d20b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313h674b998_2.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/psutil-7.0.0-py313hcdf3177_1.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ruff-0.12.12-h2342e2b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ukkonen-1.0.1-py313hf9c7212_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py313hf2da073_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/typos-1.36.2-hd1458d2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.24.0-py313hff09f02_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: ./ win-64: + - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.7-h2466b09_0.conda - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda - - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.11-py313hfa70ccb_1.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313hfe59770_4.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/dprint-0.50.0-h63977a8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda + - conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/lefthook-1.12.4-h11686cb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.12.0-hfeaa22a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/mypy-1.17.1-py313h5ea7bf4_1.conda + - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/win-64/nodejs-24.4.1-he453025_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hce7ae62_2.conda + - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/psutil-7.0.0-py313h5ea7bf4_1.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ruff-0.12.12-h429b229_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/ukkonen-1.0.1-py313h1ec8472_5.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/typos-1.36.2-h77a83cd_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.24.0-py313hcdcf24b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda + - pypi: ./ tests: channels: - url: https://prefix.dev/conda-forge/ @@ -1736,127 +2354,195 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py313h8060acc_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313hdb1a8e5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py313ha9b7d5b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313h674b998_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py313hb4c8b1a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hce7ae62_2.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - pypi: ./ tests-backends: channels: - url: https://prefix.dev/conda-forge/ @@ -1864,1576 +2550,2841 @@ environments: - https://pypi.org/simple packages: linux-64: - - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-event-stream-0.5.0-h7959bf6_11.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-http-0.9.2-hefd7a92_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/contourpy-1.3.1-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py310h89163eb_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.6.77-ha770c72_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.6.77-h3f2d84a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.6.77-h3f2d84a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.6.77-h3f2d84a_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.6.85-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.6-h7480c83_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/cupy-13.3.0-py310h1b77274_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.3.0-py310h8de46e0_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/cytoolz-1.0.1-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py310h8c668a6_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://prefix.dev/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jax-0.4.35-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.4.35-cpu_py310h430587c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.6.4.1-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.3.0.4-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.7.77-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.1.2-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.4.2-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda - - conda: https://prefix.dev/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.6.85-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda - - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.7.0-cpu_py313h9430eff_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cpu_mkl_h783a78b_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-ha9997c6_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-19.1.6-h024ca30_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.43.0-py310h1a6248f_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/lz4-4.3.3-py310h80b8a69_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py313h08cd8bf_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py313h50b8c88_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py313h7037e92_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pillow-11.1.0-py310h7e6dc6c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/psutil-6.1.1-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyarrow-18.1.0-py310hff52083_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyarrow-core-18.1.0-py310hac404ae_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cpu_mkl_py313_he78a34b_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py313h904ca6e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.7.0-cpu_py313h9e1e12b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_h42ab995_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-ha1d9b0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h7b7ecba_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py313h270e054_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py313h366a99e_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py313h1997fa5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py313hc518a0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py313hc551f4f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py313_h2b2588c_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.16.1-py313hf2e9e4d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py310hb4ad77e_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py310h497396d_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/contourpy-1.3.1-py310h7f4e7e6_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py310hc74094e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/cytoolz-1.0.1-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.1.5-py310h805dbd7_3.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py313h6d8efe1_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/jax-0.4.35-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.4.35-cpu_py310h604521f_0.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libllvm14-14.0.6-hd1a9a77_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py313h8fc57d6_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_ha33cc54_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.43.0-py310h9fcfb1b_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py313h9cecdfe_2.conda - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-4.3.3-py310hedecf87_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py313hd1f53c0_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/msgpack-python-1.1.0-py310h7306fd8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.0.2-py310h530be0a_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py313h2c0ffef_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py313h41a2e72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py313hc50a443_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pillow-11.1.0-py310h61efb56_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/psutil-6.1.1-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-18.1.0-py310hb6292c7_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-core-18.1.0-py310hc17921c_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.16-h870587a_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py313_hfe15936_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/tornado-6.4.2-py310h078409c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: . + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ win-64: - - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-cal-0.8.1-h099ea23_3.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-common-0.10.6-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-compression-0.3.0-h099ea23_5.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-event-stream-0.5.0-h85d8506_11.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-http-0.9.2-h3888f84_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-io-0.15.3-hc5a9e45_5.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-mqtt-0.11.0-h2c94728_12.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-s3-0.7.7-h6a38c86_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-checksums-0.2.2-h099ea23_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda - - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - - conda: https://prefix.dev/conda-forge/win-64/c-ares-1.34.4-h2466b09_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh7428d3b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/contourpy-1.3.1-py310hc19bc0b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py310h38315fa_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.6.77-h57928b3_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.6.77-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.6.77-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.6.77-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.6.85-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.6-h7480c83_3.conda - - conda: https://prefix.dev/conda-forge/win-64/cupy-13.3.0-py310h619d0c7_2.conda - - conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.3.0-py310h441eff7_2.conda - - conda: https://prefix.dev/conda-forge/win-64/cytoolz-1.0.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py310h9a06e79_1.conda - - conda: https://prefix.dev/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - - conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libcublas-12.6.4.1-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libcufft-11.3.0.4-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.7.77-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.1.2-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.4.2-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.23-h9062f6e_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libgcc-14.2.0-h1383e82_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgomp-14.2.0-h1383e82_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-2.33.0-h95c5cb2_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-storage-2.33.0-he5eb982_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libgrpc-1.67.1-h0ac93cb_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.6.85-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_2.conda - - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libssh2-1.11.1-he619c9f_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libthrift-0.21.0-hbe90ef8_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libtiff-4.7.0-h797046b_3.conda - - conda: https://prefix.dev/conda-forge/win-64/libutf8proc-2.9.0-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libwebp-base-1.5.0-h3b0e114_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - - conda: https://prefix.dev/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cpu_mkl_hf058426_104.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.43.0-py310h0288bfe_1.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py313hc403fe3_2.conda - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/lz4-4.3.3-py310hd8baafb_2.conda - - conda: https://prefix.dev/conda-forge/win-64/lz4-c-1.10.0-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda - - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - - conda: https://prefix.dev/conda-forge/win-64/msgpack-python-1.1.0-py310hc19bc0b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numba-0.60.0-py310h7793332_0.conda - - conda: https://prefix.dev/conda-forge/win-64/numpy-2.0.2-py310h1ec8c79_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py313h96c6e06_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py313hefb8edb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py313hf069bd2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pillow-11.1.0-py310h9595edc_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/psutil-6.1.1-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - - conda: https://prefix.dev/conda-forge/win-64/pyarrow-18.1.0-py310h5588dad_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pyarrow-core-18.1.0-py310h399dd74_0_cpu.conda - - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda - - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda - - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cpu_mkl_py313_h97e7b96_104.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda - - conda: https://prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-h0e40799_0.conda - - conda: https://prefix.dev/conda-forge/win-64/xorg-libxdmcp-1.1.5-h0e40799_0.conda - - conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - - pypi: . -packages: -- conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - md5: d7c89558ba9fa0495403155b64376d81 - license: None - purls: [] - size: 2562 - timestamp: 1578324546067 -- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 - md5: 73aaf86a425cc6e73fcf236a5a46396d - depends: - - _libgcc_mutex 0.1 conda_forge - - libgomp >=7.5.0 - constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 23621 - timestamp: 1650670423406 -- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - build_number: 2 - sha256: 84a66275da3a66e3f3e70e9d8f10496d807d01a9e4ec16cd2274cc5e28c478fc - md5: 562b26ba2e19059551a811e72ab7f793 - depends: - - _libgcc_mutex 0.1 conda_forge - - llvm-openmp >=9.0.1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 5744 - timestamp: 1650742457817 -- conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - build_number: 8 - sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d - md5: 37e16618af5c4851a3f3d66dd0e11141 - depends: - - libgomp >=7.5.0 - - libwinpthread >=12.0.0.r2.ggc561118da - constrains: - - openmp_impl 9999 - - msys2-conda-epoch <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 49468 - timestamp: 1718213032772 -- conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - sha256: 6c4456a138919dae9edd3ac1a74b6fbe5fd66c05675f54df2f8ab8c8d0cc6cea - md5: 1fd9696649f65fd6611fcdb4ffec738a - depends: - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/alabaster?source=hash-mapping - size: 18684 - timestamp: 1733750512696 -- conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - sha256: c98308dcf035a413a635317c69b48143cdf4c5895853457062780395e5ea4633 - md5: e399bc184553ca13cb068d272a995f48 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/array-api-compat?source=hash-mapping - size: 38442 - timestamp: 1735201429468 -- pypi: . - name: array-api-extra - version: 0.6.0 - sha256: 4ec1183114a670b9c9b9b351826c962ad92ab470b1914a163e4a5ed02d0e04a0 - requires_dist: - - array-api-compat>=1.10.0,<2 - - furo>=2023.8.17 ; extra == 'docs' - - myst-parser>=0.13 ; extra == 'docs' - - sphinx-autodoc-typehints ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx>=7.0 ; extra == 'docs' - - array-api-strict ; extra == 'tests' - - numpy ; extra == 'tests' - - pytest-cov>=3 ; extra == 'tests' - - pytest>=6 ; extra == 'tests' - requires_python: '>=3.10' - editable: true -- conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - sha256: 79bf4d2b5f55c816f832cd7180e66ca527b55a8353a3014fe3084690a8c7f6aa - md5: 02e7a32986412d3aaf97095d17120757 - depends: - - numpy - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/array-api-strict?source=hash-mapping - size: 53675 - timestamp: 1734907462139 -- conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda - sha256: 9e7d23a86025997b0ea08c0e261210c332105fc725c762c2a4b70f18bf343dcf - md5: cd3ab05349bc9be61760883382598624 - depends: - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: LGPL-2.1-or-later - license_family: LGPL - purls: - - pkg:pypi/astroid?source=hash-mapping - size: 514724 - timestamp: 1735074295 -- conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda - sha256: 74ebe427be3bd85285cad5ccfe68a056ea522fe5799883f6993bf20ec6540459 - md5: b89181b74780c6835f81b3bced884400 - depends: - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: LGPL-2.1-or-later - license_family: LGPL - purls: - - pkg:pypi/astroid?source=hash-mapping - size: 517558 - timestamp: 1735074383017 -- conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda - sha256: d6e1e1f83accc04030212501b0bc24e074b84887840ad9857f639e4085cfcb81 - md5: 833fc63fbd750ceb3e5d79c38995c2b3 - depends: - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: LGPL-2.1-or-later - license_family: LGPL - purls: - - pkg:pypi/astroid?source=hash-mapping - size: 516023 - timestamp: 1735074328935 -- conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 - md5: 8f587de4bcf981e26228f268df374a9b - depends: - - python >=3.9 - constrains: - - astroid >=2,<4 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/asttokens?source=hash-mapping - size: 28206 - timestamp: 1733250564754 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea - md5: b0815d37ab812ade9c07239da7c3c369 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 107478 - timestamp: 1736592747413 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 - md5: 1e9a41d5296f50c08ae511d61fddef85 - depends: - - __osx >=11.0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 92547 - timestamp: 1736592866387 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda - sha256: 7b071c929ce10670bcc0b62674cf32cddd82540520efb86e9401a7ec38d77378 - md5: 77b180b437094a263f059f91463c73b7 - depends: - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 102957 - timestamp: 1736592944745 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 - md5: 55a8561fdbbbd34f50f57d9be12ed084 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - libgcc >=13 - - openssl >=3.3.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 47601 - timestamp: 1733991564405 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - sha256: 1f44be36e1daa17b4b081debb8aee492d13571084f38b503ad13e869fef24fe4 - md5: 8b0ce61384e5a33d2b301a64f3d22ac5 - depends: - - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - openssl >=3.3.1,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 39925 - timestamp: 1733991649383 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-cal-0.8.1-h099ea23_3.conda - sha256: e345717c4cbef8472b3f4f90b75d326ad66a84574bfb02740a860d8de6414c44 - md5: 767b18a469cf18d7476cab915f9fe207 - depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - openssl >=3.3.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 47436 - timestamp: 1733991914197 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - sha256: 496e92f2150fdc351eacf6e236015deedb3d0d3114f8e5954341cbf9f3dda257 - md5: d7d4680337a14001b0e043e96529409b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 236574 - timestamp: 1733975453350 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - sha256: 3bde135c8e74987c0f79ecd4fa17ec9cff0d658b3090168727ca1af3815ae57a - md5: 145e5b4c9702ed279d7d68aaf096f77d - depends: - - __osx >=11.0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 221863 - timestamp: 1733975576886 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-common-0.10.6-h2466b09_0.conda - sha256: 348af25291f2b4106d8453fddb8dcbfed452067bddfa0eeadd24f1c710617a4a - md5: 44a7e180f2054340401499de93ae39ba - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 235514 - timestamp: 1733975788721 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda - sha256: 62ca84da83585e7814a40240a1e750b1563b2680b032a471464eccc001c3309b - md5: 3f4c1197462a6df2be6dc8241828fe93 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 19086 - timestamp: 1733991637424 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda - sha256: 47b2813f652ce7e64ac442f771b2a5f7d4af4ad0d07ff51f6075ea80ed2e3f09 - md5: a8b6c17732d14ed49d0e9b59c43186bc - depends: - - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 18068 - timestamp: 1733991869211 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-compression-0.3.0-h099ea23_5.conda - sha256: f30956b5c450e0a21adc3d523fdbe2d0dcc79125b135f5ccc4497d97f8733891 - md5: b4303abff1423285a2e5063d796e1614 - depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 22364 - timestamp: 1733991973284 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-event-stream-0.5.0-h7959bf6_11.conda - sha256: 10d7240c7db0c941fb1a59c4f8ea6689a434b03309ee7b766fa15a809c553c02 - md5: 9b3fb60fe57925a92f399bc3fc42eccf - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 54003 - timestamp: 1734024480949 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda - sha256: f0667935f4e0d4c25e0e51da035640310b5ceeb8f723156734439bde8b848d7d - md5: ba41238f8e653998d7d2f42e3a8db054 - depends: - - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - libcxx >=18 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 47078 - timestamp: 1734024749727 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-event-stream-0.5.0-h85d8506_11.conda - sha256: bd7d3849ae0a12e170d4d442f7d2db7de98827d8d3505d0a60d12b1170b1ab0d - md5: a32c029b7e933cf93c5066b186560e62 - depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 54426 - timestamp: 1734024881523 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-http-0.9.2-hefd7a92_4.conda - sha256: 4a330206bd51148f6c13ca0b7a4db40f29a46f090642ebacdeb88b8a4abd7f99 - md5: 5ce4df662d32d3123ea8da15571b6f51 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-compression >=0.3.0,<0.3.1.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 197731 - timestamp: 1734008380764 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda - sha256: 22e4737c8a885995b7c1ae1d79c1f6e78d489e16ec079615980fdde067aeaf76 - md5: 495c93a4f08b17deb3c04894512330e6 - depends: - - __osx >=11.0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-compression >=0.3.0,<0.3.1.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 152983 - timestamp: 1734008451473 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-http-0.9.2-h3888f84_4.conda - sha256: ce0cedbe65e36f6e6dc9a8e07336f9c6ceecb09f0ed8eebdd01d74d261b59d16 - md5: 4e7cf9b498fcc5dee5abcdf24e64a96d - depends: - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-compression >=0.3.0,<0.3.1.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 182269 - timestamp: 1734008780813 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - sha256: 5920009b1c6f9a2bc131a36725251894e4b4773fce29c4b1065d4213ae337abe - md5: 80dd9f0ddf935290d1dc00ec75ff3023 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - libgcc >=13 - - s2n >=1.5.10,<1.5.11.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 157864 - timestamp: 1734433578570 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - sha256: c0a1a2b0750225ac3dc07fd258c88c2be866bf8ac67ba3d50bb4ecec852ff8ee - md5: 4c5ff4134e76426a75b8c548984fa933 - depends: - - __osx >=11.0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - license: Apache-2.0 - license_family: Apache + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + tests-backends-py310: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py310h3406613_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py310h63ebcad_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.2-cpu_py310h772e2ea_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cpu_mkl_h783a78b_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-hf2a90c1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h031cc0b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py310h0070a79_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h0158d43_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py310h8648a56_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py310h03d9f68_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cpu_mkl_py310_hefd4a7a_102.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.2-py310h1d65ade_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py310hd951482_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py310h71a0b2e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.6.2-cpu_py310h7772592_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_hc5f6e96_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-h0ad03eb_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h23bb396_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py310h06366c5_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py310h8e2f543_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py310he8aef2f_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py310hf491a08_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py310h07c5b4d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py310h50c4e7d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.10.18-h93e8a92_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py310_h0891237_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py310h8e2f543_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.15.2-py310hef62574_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py310hf4fd40f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py310h8086d47_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.6.2-cpu_py310h2ee8168_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_haa461e3_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py310h5fad91f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h03dc5a2_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py310hd3faf9e_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py310h4d83441_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py310hc9b05e5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.18-h6cefb37_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py310_h10231c0_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310hc74094e_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.2-py310h32ab4ed_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py310hdb0e946_1.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cpu_mkl_hf058426_104.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py310hab3ae16_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py310h9216ec7_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py310h4987827_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py310he9f1925_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cpu_mkl_py310_h2841ce8_104.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310h38315fa_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + tests-cuda: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cuobjdump-12.9.82-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-dev-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvdisasm-12.9.88-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.9.86-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvtx-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/cudnn-9.12.0.46-hbcb9cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-13.6.0-py313h586c94b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.6.0-py313h28b6081_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py313h5d5ffb9_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py313hb1b46e1_200.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcap-2.75-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-dev-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-9.12.0.46-hf7e9902_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-dev-9.12.0.46-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-dev-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufile-1.14.1.1-ha8da6e3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-dev-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-dev-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-dev-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcrypt-lib-1.11.1-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgpg-error-1.55-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmagma-2.9.0-h9918c94_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.9.86-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsystemd0-257.7-h4e0b6ca_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cuda129_mkl_h16584c3_302.conda + - conda: https://prefix.dev/conda-forge/linux-64/libudev1-257.7-hbe16f8c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-ha9997c6_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py313h08cd8bf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py313h50b8c88_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py313h7037e92_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cuda129_mkl_py313_h3949ff4_302.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/rdma-core-59.0-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/triton-3.3.1-cuda129py313h246eb7c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py313h904ca6e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.7.0-cpu_py313h9e1e12b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_h42ab995_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-ha1d9b0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h7b7ecba_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py313h270e054_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py313h366a99e_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py313h1997fa5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py313hc518a0f_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py313hc551f4f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py313_h2b2588c_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.16.1-py313hf2e9e4d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py313h6d8efe1_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py313h8fc57d6_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_ha33cc54_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py313h9cecdfe_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py313hd1f53c0_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py313h2c0ffef_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py313h41a2e72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py313hc50a443_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py313_hfe15936_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cupti-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.9.86-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/win-64/cudnn-9.12.0.46-h32ff316_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-13.6.0-py313h5dfe2c3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.6.0-py313ha16128a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py313h927ade5_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcublas-12.9.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-dev-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudss-0.6.0.5-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcufft-11.4.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.10.19-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.5.82-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.10.65-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libgomp-15.1.0-h1383e82_5.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmagma-2.9.0-h6290ce1_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.9.86-he0c23c2_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cuda128_mkl_h2cc4d28_304.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py313hc403fe3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py313h96c6e06_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py313hefb8edb_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py313hf069bd2_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cuda128_mkl_py313_h2397fbb_304.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + tests-cuda-py310: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py310h3406613_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cuobjdump-12.9.82-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-dev-12.9.79-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvdisasm-12.9.88-hbd13f7d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.9.86-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvtx-12.9.79-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/cudnn-9.12.0.46-hbcb9cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-13.6.0-py310h8c3aed4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.6.0-py310hbc0d89f_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py310h25320af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py310h63ebcad_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py310hec873cc_200.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcap-2.75-h39aace5_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcublas-dev-12.9.1.4-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-9.12.0.46-hf7e9902_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudnn-dev-9.12.0.46-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufft-dev-11.4.1.4-h5888daf_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcufile-1.14.1.1-ha8da6e3_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcurand-dev-10.3.10.19-h9ab20c4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusolver-dev-11.7.5.82-h9ab20c4_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcusparse-dev-12.5.10.65-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcrypt-lib-1.11.1-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgpg-error-1.55-h3f2d84a_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmagma-2.9.0-h9918c94_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.9.86-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsystemd0-257.7-h4e0b6ca_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cuda129_mkl_h16584c3_302.conda + - conda: https://prefix.dev/conda-forge/linux-64/libudev1-257.7-hbe16f8c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-hf2a90c1_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h031cc0b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py310h0070a79_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h0158d43_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py310h8648a56_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py310h03d9f68_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cuda129_mkl_py310_h43be9e4_302.conda + - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/rdma-core-59.0-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.2-py310h1d65ade_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/triton-3.3.1-cuda129py310hc5d9a74_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py310hd951482_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py310h71a0b2e_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.6.2-cpu_py310h7772592_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + - conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_hc5f6e96_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-h0ad03eb_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h23bb396_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py310h06366c5_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py310h8e2f543_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + - conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py310he8aef2f_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py310hf491a08_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py310h07c5b4d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py310h50c4e7d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.10.18-h93e8a92_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py310_h0891237_102.conda + - conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py310h8e2f543_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.15.2-py310hef62574_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py310hf4fd40f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py310h8086d47_1.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.6.2-cpu_py310h2ee8168_1.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_haa461e3_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py310h5fad91f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h03dc5a2_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py310hd3faf9e_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py310h4d83441_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py310hc9b05e5_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.18-h6cefb37_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py310_h10231c0_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310hc74094e_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.2-py310h32ab4ed_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py310hdb0e946_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-cupti-12.9.79-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.9.86-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://prefix.dev/conda-forge/win-64/cudnn-9.12.0.46-h32ff316_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-13.6.0-py310h9349102_0.conda + - conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.6.0-py310h867cfc4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py310h699e580_2.conda + - conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcublas-12.9.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudnn-dev-9.12.0.46-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcudss-0.6.0.5-hca898b4_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcufft-11.4.1.4-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.10.19-he0c23c2_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.5.82-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.10.65-hac47afa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libgomp-15.1.0-h1383e82_5.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmagma-2.9.0-h6290ce1_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.9.86-he0c23c2_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cuda128_mkl_h2cc4d28_304.conda + - conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py310hab3ae16_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda + - conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py310h9216ec7_1.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py310h4987827_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py310he9f1925_1.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cuda128_mkl_py310_h9d6390c_304.conda + - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310h38315fa_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + tests-nogil: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hfc84e54_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-run-parallel-0.6.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h73bbd72_0_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/python-freethreading-3.13.7-h92d6c8b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.2-pyhe1237c8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313h6157c7f_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-run-parallel-0.6.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-hea0e654_0_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/python-freethreading-3.13.7-h92d6c8b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.2-pyhe1237c8_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313hc192f47_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-run-parallel-0.6.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h4a30792_0_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/python-freethreading-3.13.7-h92d6c8b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.2-pyhe1237c8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda + - conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hfb2b801_2.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-run-parallel-0.6.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-h326d9c1_0_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/python-freethreading-3.13.7-h92d6c8b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313t.conda + - conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.2-pyhe1237c8_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + - pypi: ./ + tests-numpy1: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py310h3406613_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-1.22.0-py310h454958d_1.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py310hd951482_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-1.22.0-py310hfbbbacf_1.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.10.18-h93e8a92_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py310hf4fd40f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-1.22.0-py310h567df17_1.tar.bz2 + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.18-h6cefb37_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py310hdb0e946_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-1.22.0-py310hcae7c84_1.tar.bz2 + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_31.conda + - pypi: ./ + tests-py310: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py310h3406613_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py310hd951482_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py310h07c5b4d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.10.18-h93e8a92_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py310hf4fd40f_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py310h4d83441_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.18-h6cefb37_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py310hdb0e946_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py310h4987827_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - pypi: ./ + tests-py313: + channels: + - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313hdb1a8e5_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313h674b998_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: ./ + win-64: + - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + - conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + - conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + - conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + - conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hce7ae62_2.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + - pypi: ./ +packages: +- conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None purls: [] - size: 135729 - timestamp: 1734433832730 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-io-0.15.3-hc5a9e45_5.conda - sha256: 9c024c891af60321e6415e1c8b218e8d6d254dfecbe365489d24b79f5eecbc77 - md5: 8f76c566c8eb5e175228987f67b0f91b + size: 2562 + timestamp: 1578324546067 +- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d depends: - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 159852 - timestamp: 1734433737353 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - sha256: 512d3969426152d9d5fd886e27b13706122dc3fa90eb08c37b0d51a33d7bb14a - md5: 96c3e0221fa2da97619ee82faa341a73 + size: 23621 + timestamp: 1650670423406 +- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda + build_number: 4 + sha256: b5e8980dd5fd96607fcccd98217b1058ec54566845b757cc0ecef146b5f0a51e + md5: cc86eba730b0e87ea9990985d45e60f9 depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 194672 - timestamp: 1734025626798 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - sha256: 96575ea1dd2a9ea94763882e40a66dcbff9c41f702bf37c9514c4c719b3c11dd - md5: c072045a6206f88015d02fcba1705ea1 + size: 8208 + timestamp: 1756424663803 +- conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-4_kmp_llvm.conda + build_number: 4 + sha256: eb6dae227f5d7e870d142782296b67f143b4e33019cff00274a18d38bd6e79db + md5: f817d8c3ef180901aedbb9fe68c81252 depends: - - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - license: Apache-2.0 - license_family: Apache + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 134371 - timestamp: 1734025379525 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-mqtt-0.11.0-h2c94728_12.conda - sha256: bfe3e2c5de01e285e67ac8119de58a11e594d202b3ebcfaa55ffd138a3b28279 - md5: bad2afca289f8854d431acdcc8f1cea8 + size: 8193 + timestamp: 1756424769006 +- conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + build_number: 8 + sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d + md5: 37e16618af5c4851a3f3d66dd0e11141 depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache + - libgomp >=7.5.0 + - libwinpthread >=12.0.0.r2.ggc561118da + constrains: + - openmp_impl 9999 + - msys2-conda-epoch <0.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 186987 - timestamp: 1734025825190 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - sha256: c2f205a7bf64c5f40eea373b3a0a7c363c9aa9246a13dd7f3d9c6a4434c4fe2d - md5: 947c82025693bebd557f782bb5d6b469 + size: 49468 + timestamp: 1718213032772 +- conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.7-hd0c01bc_0.conda + sha256: a6fb8bfb2ef6c7f48195ac2b7683656aecc55429f7fc3123ec6bbb1e1ce06b2b + md5: 4dcdf2570573cf76931efb97d14e4641 depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 + - __glibc >=2.17 - libgcc >=13 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 114156 - timestamp: 1734146123386 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - sha256: 22966164d63808689fffd35945f57756c95337327e28099b5d77b29fc6a56ecc - md5: a37bba7acb62dd70492ee01eacca3b8f - depends: - - __osx >=11.0 - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 97598 - timestamp: 1734146239038 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-s3-0.7.7-h6a38c86_0.conda - sha256: 6698400778ddf56c3dabd44b8fbe567242bb82d50957fb35794ecaea40b0d74a - md5: 1263ee7d4211e4e0e1e3a313c4118601 - depends: - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 109362 - timestamp: 1734146367350 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc - md5: dcd498d493818b776a77fbc242fbf8e4 - depends: - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache + license: MIT + license_family: MIT purls: [] - size: 55911 - timestamp: 1736535960724 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 - md5: e7b5498ac7b7ab921a907be38f3a8080 + size: 1947627 + timestamp: 1737388180543 +- conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.7-h23c3e72_0.conda + sha256: f5f76d36306925f2fbb098a33bcb937553556c5de96d742c8fcef082c75bdee8 + md5: 3d18f82a97621e9e39541eb189ff0534 depends: - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 49872 - timestamp: 1736536152332 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda - sha256: af9cc0696b9fb60e7d0738b140b3d93efcf7f354e56c3034f459fc1651d53921 - md5: 6292ef653d6002edc721d2dc9356aa57 - depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 55109 - timestamp: 1736536467087 -- conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 - md5: 74e8c3e4df4ceae34aa2959df4b28101 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - libgcc >=13 - license: Apache-2.0 - license_family: Apache + constrains: + - __osx >=10.12 + license: MIT + license_family: MIT purls: [] - size: 72762 - timestamp: 1733994347547 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - sha256: 215086d95e8ff1d3fcb0197ada116cc9d7db1fdae7573f5e810d20fa9215b47c - md5: e70e88a357a3749b67679c0788c5b08a + size: 1907446 + timestamp: 1737388230173 +- conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.7-h48c0fde_0.conda + sha256: 93f9426c61265adaa8afa900bf2b35627732fed1fa15886e8836af58547e7830 + md5: 2ec2ec4893bcee0ccd4858b7c8c14d23 depends: - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - license: Apache-2.0 - license_family: Apache + license: MIT + license_family: MIT purls: [] - size: 70186 - timestamp: 1733994496998 -- conda: https://prefix.dev/conda-forge/win-64/aws-checksums-0.2.2-h099ea23_4.conda - sha256: 577e62dbf1750219cfb017d36c9022f40d7dc287b597fd7dec1ca04cade0108c - md5: 5a8ce497f17cf1e6ae745f122b6a2bc3 + size: 1727363 + timestamp: 1737388223041 +- conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.7-h2466b09_0.conda + sha256: bbfa6aa49bd19117fdc36efb26956a1ff57dab5fddc3579b8c30f6ceb853ba5d + md5: bea57e97ccf892453f8dc40f4b72d329 depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 91909 - timestamp: 1733994821424 -- conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda - sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 - md5: f21296b496cca1c1fa426b9a3b676e79 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 354328 - timestamp: 1736598991291 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda - sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 - md5: 31fdd3ffb00f5472196fa95ef08087b7 - depends: - - __osx >=11.0 - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - - libcxx >=18 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 236269 - timestamp: 1736599024242 -- conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda - sha256: 26bf5f5c644d5ff00783dd06d493bfdb9c6c20b9e82f200dbc3ae60754ef1e7f - md5: b1d3b02bde39ffe4ffa61ce87d86abc2 - depends: - - aws-c-auth >=0.8.0,<0.8.1.0a0 - - aws-c-cal >=0.8.1,<0.8.2.0a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-c-http >=0.9.2,<0.9.3.0a0 - - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 262760 - timestamp: 1736599347130 -- conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 - md5: fc01d77a7f383b2915f276c73b7d0934 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - libcurl >=8.11.1,<9.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3088636 - timestamp: 1736598504343 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c - md5: a2374b4182bf5b2d08b2903393d0c487 - depends: - - __osx >=11.0 - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - libcurl >=8.11.1,<9.0a0 - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2824168 - timestamp: 1736598935034 -- conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda - sha256: 97abee16a2171ae38934102a8056b3b2656cb7d711ae4563624fab1d47d77f22 - md5: ce1338d55e45416282f8b3921a2b2a54 - depends: - - aws-c-common >=0.10.6,<0.10.7.0a0 - - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2948912 - timestamp: 1736599399277 -- conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a - md5: 0a8838771cc2e985cd295e01ae83baf1 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.10.1,<9.0a0 - - libgcc >=13 - - libstdcxx >=13 - - openssl >=3.3.2,<4.0a0 license: MIT license_family: MIT purls: [] - size: 345117 - timestamp: 1728053909574 -- conda: https://prefix.dev/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - sha256: f5b91329ed59ffc0be8747784c6e4cc7e56250c54032883a83bc11808ef6a87e - md5: f093a11dcf3cdcca010b20a818fcc6dc + size: 2014904 + timestamp: 1737388233822 +- conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + sha256: 6c4456a138919dae9edd3ac1a74b6fbe5fd66c05675f54df2f8ab8c8d0cc6cea + md5: 1fd9696649f65fd6611fcdb4ffec738a depends: - - __osx >=11.0 - - libcurl >=8.10.1,<9.0a0 - - libcxx >=17 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 294299 - timestamp: 1728054014060 -- conda: https://prefix.dev/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - sha256: 286b31616c191486626cb49e9ceb5920d29394b9e913c23adb7eb637629ba4de - md5: 73f73f60854f325a55f1d31459f2ab73 + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/alabaster?source=hash-mapping + size: 18684 + timestamp: 1733750512696 +- conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.12.0-pyhe01879c_0.conda + sha256: 259b8e21ee0ce8f2cdcee9df7ba9b7e53d1b4aa2d252946acf5108e03d5d7b5e + md5: b656a1f58a53e7b6f5d4588d9b19e7b0 depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - - openssl >=3.3.2,<4.0a0 + - python >=3.10 + - python license: MIT license_family: MIT - purls: [] - size: 232351 - timestamp: 1728486729511 -- conda: https://prefix.dev/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - sha256: bde446b916fff5150606f8ed3e6058ffc55a3aa72381e46f1ab346590b1ae40a - md5: d7b71593a937459f2d4b67e1a4727dc2 + purls: + - pkg:pypi/array-api-compat?source=hash-mapping + size: 45821 + timestamp: 1747403732947 +- pypi: ./ + name: array-api-extra + version: 0.9.1.dev0 + sha256: f0fea5d9245898f46f278e362eb43a806e033dff825db5cb213a4d1968af8a41 + requires_dist: + - array-api-compat>=1.12.0,<2 + requires_python: '>=3.10' + editable: true +- conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda + sha256: e0057ab21157b50792651c6aa7e6d16349a271b8e7e6b9a430ad9ab7b8a8dc0f + md5: 648e253c455718227c61e26f4a4ce701 depends: - - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libcxx >=17 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 166907 - timestamp: 1728486882502 -- conda: https://prefix.dev/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - sha256: 2606260e5379eed255bcdc6adc39b93fb31477337bcd911c121fc43cd29bf394 - md5: 7eb66060455c7a47d9dcdbfa9f46579b + - python >=3.10 + - numpy + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/array-api-strict?source=hash-mapping + size: 62525 + timestamp: 1753634065508 +- conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.11-py313h78bf25f_1.conda + sha256: fd352800653c61b829bd3c2466628059dcef1649ddcaa9ff53cd80e39520b195 + md5: 1351e4454619472afeed9475e451de3c depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - license: MIT - license_family: MIT - purls: [] - size: 549342 - timestamp: 1728578123088 -- conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - sha256: 08d52d130addc0fb55d5ba10d9fa483e39be25d69bac7f4c676c2c3069207590 - md5: 704238ef05d46144dae2e6b5853df8bc + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/astroid?source=hash-mapping + size: 516864 + timestamp: 1756814185955 +- conda: https://prefix.dev/conda-forge/osx-64/astroid-3.3.11-py313habf4b1d_1.conda + sha256: 7f11630057272d3357458daa5d00e5aab9d0b484d98c4c43bf5e9621c8d9686e + md5: 4910a369565c7977f9f473c07d048a14 depends: - - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libcxx >=17 - license: MIT - license_family: MIT - purls: [] - size: 438636 - timestamp: 1728578216193 -- conda: https://prefix.dev/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - sha256: 273475f002b091b66ce7366da04bf164c3732c03f8692ab2ee2d23335b6a82ba - md5: 13de36be8de3ae3f05ba127631599213 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/astroid?source=hash-mapping + size: 516986 + timestamp: 1756814408369 +- conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.11-py313h8f79df9_1.conda + sha256: 478548a3aa58abb9ec1157cb22f85990e3f74d63ad00dea805465e4480f18aeb + md5: 945e62efbf0f263fd71bc26a082d0e99 depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libxml2 >=2.12.7,<3.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 149312 - timestamp: 1728563338704 -- conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - sha256: 77ab04e8fe5636a2de9c718f72a43645f7502cd208868c8a91ffba385547d585 - md5: 7a187cd7b1445afc80253bb186a607cc + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/astroid?source=hash-mapping + size: 516868 + timestamp: 1756814499329 +- conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.11-py313hfa70ccb_1.conda + sha256: c8df112b11668062c29c1c52b61feaca913e9954d8bc83157cf6565a75f265bc + md5: 5b50af3799aa679bd0a7a53a48e3c8ae depends: - - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - libcxx >=17 - - libxml2 >=2.12.7,<3.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 121278 - timestamp: 1728563418777 -- conda: https://prefix.dev/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda - sha256: 5371e4f3f920933bb89b926a85a67f24388227419abd6e99f6086481e5e8d5f2 - md5: 7c1980f89dd41b097549782121a73490 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-2.1-or-later + license_family: LGPL + purls: + - pkg:pypi/astroid?source=hash-mapping + size: 515122 + timestamp: 1756814351312 +- conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda + sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593 + md5: 8f587de4bcf981e26228f268df374a9b + depends: + - python >=3.9 + constrains: + - astroid >=2,<4 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28206 + timestamp: 1733250564754 +- conda: https://prefix.dev/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda + sha256: a9c114cbfeda42a226e2db1809a538929d2f118ef855372293bd188f71711c48 + md5: 791365c5f65975051e4e017b5da3abf5 depends: - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - libgcc >=13 - - libstdcxx >=13 - license: MIT - license_family: MIT + license: GPL-2.0-or-later + license_family: GPL purls: [] - size: 287366 - timestamp: 1728729530295 -- conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda - sha256: f48523f8aa0b5b80f45a92f0556b388dd96f44ac2dc2f44a01d08c1822eec97d - md5: c49fbc5233fcbaa86391162ff1adef38 + size: 68072 + timestamp: 1756738968573 +- conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + sha256: 99c53ffbcb5dc58084faf18587b215f9ac8ced36bbfb55fa807c00967e419019 + md5: a10d11958cadc13fdb43df75f8b1903f depends: - - __osx >=11.0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 - - libcxx >=17 + - python >=3.9 license: MIT license_family: MIT - purls: [] - size: 196032 - timestamp: 1728729672889 -- conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - sha256: f6205d3a62e87447e06e98d911559be0208d824976d77ab092796c9176611fcb - md5: 3e23f7db93ec14c80525257d8affac28 - depends: - - python >=3.9 - - pytz >=2015.7 - license: BSD-3-Clause - license_family: BSD purls: - - pkg:pypi/babel?source=hash-mapping - size: 6551057 - timestamp: 1733236466015 -- conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - sha256: fd98c651dc13618bfc427b548c109b6526603fcf1dca197bdb561a2a5a956622 - md5: ad268761b26971fa1e3c2629f4e5db56 + - pkg:pypi/attrs?source=hash-mapping + size: 57181 + timestamp: 1741918625732 +- conda: https://prefix.dev/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda + sha256: 1c656a35800b7f57f7371605bc6507c8d3ad60fbaaec65876fce7f73df1fc8ac + md5: 0a01c169f0ab0f91b26e77a3301fbfe4 depends: - - basedtyping >=0.0.3 - - mypy_extensions >=1.0.0 - python >=3.9 - - tomli >=1.1.0 - - typing-extensions >=4.1.0 - license: BSD-3-Clause AND Apache-2.0 + - pytz >=2015.7 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/basedmypy?source=hash-mapping - size: 1850703 - timestamp: 1736398661625 -- conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - sha256: c66b5e90af123465f3b34dca54e839aeb2ef443018a008bf5b460a4549d807cc - md5: 9e92cdee91e7ab02b4bddd7883087f4c + - pkg:pypi/babel?source=hash-mapping + size: 6938256 + timestamp: 1738490268466 +- conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.31.4-pyhcf101f3_0.conda + sha256: 934cd2e52b53dbd7a4de85bd41c1553de22862fa48b2737ce263fc11b5738b9a + md5: d1d2fb0411ebaa7b852afa84d13f64ea depends: + - python >=3.10 - nodejs-wheel >=20.13.1 - - python >=3.9 + - python license: MIT AND Apache-2.0 purls: - pkg:pypi/basedpyright?source=hash-mapping - size: 7535687 - timestamp: 1736098739733 -- conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - sha256: 73badfd807775e6e171de10ab752fd4706fe9360f6fd0cfabd509c670d12951b - md5: 234a48e49c3913330665c444824e6533 + size: 8365421 + timestamp: 1756949071665 +- conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.13.5-pyha770c72_0.conda + sha256: d2124c0ea13527c7f54582269b3ae19541141a3740d6d779e7aa95aa82eaf561 + md5: de0fd9702fd4c1186e930b8c35af6b6b depends: - - mypy_extensions >=1.0.0 - - python >=3.9,<4.0.0 - - tomli >=1.1.0 - - typing-extensions >=4.1.0 + - python >=3.10 + - soupsieve >=1.2 + - typing-extensions license: MIT license_family: MIT purls: - - pkg:pypi/basedtyping?source=hash-mapping - size: 22725 - timestamp: 1735032220353 -- conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - sha256: fca842ab7be052eea1037ebee17ac25cc79c626382dd2187b5c6e007b9d9f65f - md5: d48f7e9fdec44baf6d1da416fe402b04 + - pkg:pypi/beautifulsoup4?source=compressed-mapping + size: 88278 + timestamp: 1756094375546 +- conda: https://prefix.dev/conda-forge/noarch/black-25.1.0-pyh866005b_0.conda + sha256: c68f110cd491dc839a69e340930862e54c00fb02cede5f1831fcf8a253bd68d2 + md5: b9b0c42e7316aa6043bdfd49883955b8 depends: - - python >=3.9 - - soupsieve >=1.2 + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.11 license: MIT license_family: MIT purls: - - pkg:pypi/beautifulsoup4?source=hash-mapping - size: 118042 - timestamp: 1733230951790 -- conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - sha256: 66d2649b8b8f1ec58c83a9ff948aed4a3a86465ca6ccda686741797cae54b264 - md5: 976ff24762f1f991b08f7a7a41875086 + - pkg:pypi/black?source=hash-mapping + size: 172678 + timestamp: 1742502887437 +- conda: https://prefix.dev/conda-forge/osx-64/black-25.1.0-py313habf4b1d_0.conda + sha256: 293c0048448eec702c58f12aa7ccab71102e5e61482d3ad6439208ab4d7b5ada + md5: c4f8ef5281c64a0f15ec659e51bb079f depends: - - contourpy >=1.2 - - jinja2 >=2.9 - - numpy >=1.16 - - packaging >=16.8 - - pandas >=1.2 - - pillow >=7.1.0 - - python >=3.10 - - pyyaml >=3.10 - - tornado >=6.2 - - xyzservices >=2021.09.1 - license: BSD-3-Clause - license_family: BSD + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9 + - platformdirs >=2 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT purls: - - pkg:pypi/bokeh?source=hash-mapping - size: 4838239 - timestamp: 1733754831166 -- conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - sha256: 14f1e89d3888d560a553f40ac5ba83e4435a107552fa5b2b2029a7472554c1ef - md5: bf502c169c71e3c6ac0d6175addfacc2 + - pkg:pypi/black?source=hash-mapping + size: 401564 + timestamp: 1738616279268 +- conda: https://prefix.dev/conda-forge/noarch/blacken-docs-1.20.0-pyhd8ed1ab_0.conda + sha256: e1fea6544f8783bbf1dbe2735cc138f54b70bd325d4f54a8213f8a6cf3613ce3 + md5: dc0bd62e2ec90f958d12476cc65482fb depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - libbrotlicommon 1.1.0 hb9d3cd8_2 + - black >=22.1 + - python >=3.10 license: MIT - license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 349668 - timestamp: 1725267875087 -- conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda - sha256: da92e5e904465fce33a7a55658b13caa5963cc463c430356373deeda8b2dbc46 - md5: f6bb3742e17a4af0dc3c8ca942683ef6 + - pkg:pypi/blacken-docs?source=hash-mapping + size: 14477 + timestamp: 1757367329732 +- conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h7033f15_4.conda + sha256: b1941426e564d326097ded7af8b525540be219be7a88ca961d58a8d4fc116db2 + md5: bc8624c405856b1d047dd0a81829b08c depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.13.0rc1,<3.14.0a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 constrains: - - libbrotlicommon 1.1.0 hb9d3cd8_2 + - libbrotlicommon 1.1.0 hb03c661_4 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 350424 - timestamp: 1725267803672 -- conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py310hb4ad77e_2.conda - sha256: a824cc3da3975a2812fac81a53902c07c5cf47d9dd344b783ff4401894de851f - md5: 3117b40143698e1afd17bca69f04e2d9 + - pkg:pypi/brotli?source=compressed-mapping + size: 353639 + timestamp: 1756599425945 +- conda: https://prefix.dev/conda-forge/osx-64/brotli-python-1.1.0-py313h253db18_4.conda + sha256: fc4db6916598d1c634de85337db6d351d6f1cb8a93679715e0ee572777a5007e + md5: 8643345f12d0db3096a8aa0abd74f6e9 depends: - - __osx >=11.0 - - libcxx >=17 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - __osx >=10.13 + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 constrains: - - libbrotlicommon 1.1.0 hd74edd7_2 + - libbrotlicommon 1.1.0 h1c43f85_4 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 339329 - timestamp: 1725268335778 -- conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda - sha256: b0a66572f44570ee7cc960e223ca8600d26bb20cfb76f16b95adf13ec4ee3362 - md5: f3bee63c7b5d041d841aff05785c28b7 + - pkg:pypi/brotli?source=compressed-mapping + size: 369082 + timestamp: 1756600456664 +- conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda + sha256: a6402a7186ace5c3eb21ed4ce50eda3592c44ce38ab4e9a7ddd57d72b1e61fb3 + md5: 9518cd948fc334d66119c16a2106a959 depends: - __osx >=11.0 - - libcxx >=17 - - python >=3.13.0rc1,<3.14.0a0 - - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 constrains: - - libbrotlicommon 1.1.0 hd74edd7_2 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 339067 - timestamp: 1725268603536 -- conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda - sha256: 1b7893a07f2323410b09b63b4627103efa86163be835ac94966333b37741cdc7 - md5: 3a10a1d0cf3ece273195f26191fd6cc6 - depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - libbrotlicommon 1.1.0 h2466b09_2 + - libbrotlicommon 1.1.0 h6caf38d_4 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 321576 - timestamp: 1725268612274 -- conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda - sha256: e89803147849d429f1ba3eec880b487c2cc4cac48a221079001a2ab1216f3709 - md5: c1a5d95bf18940d2b1d12f7bf2fb589b + - pkg:pypi/brotli?source=compressed-mapping + size: 341104 + timestamp: 1756600117644 +- conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313hfe59770_4.conda + sha256: 0e98ebafd586c4da7d848f9de94770cb27653ba9232a2badb28f8a01f6e48fb5 + md5: 477bf04a8a3030368068ccd39b8c5532 depends: - - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - libbrotlicommon 1.1.0 h2466b09_2 + - libbrotlicommon 1.1.0 hfd05255_4 license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=hash-mapping - size: 322309 - timestamp: 1725268431915 + - pkg:pypi/brotli?source=compressed-mapping + size: 323459 + timestamp: 1756600051044 - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d md5: 62ee74e96c5ebb0af99386de58cf9553 @@ -3445,6 +5396,16 @@ packages: purls: [] size: 252783 timestamp: 1720974456583 +- conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5 + md5: 7ed4301d437b59045be7e051a0308211 + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 134188 + timestamp: 1720974491916 - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab @@ -3467,224 +5428,175 @@ packages: purls: [] size: 54927 timestamp: 1720974860185 -- conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda - sha256: d4f28d87b6339b94f74762c0076e29c8ef8ddfff51a564a92da2843573c18320 - md5: e2775acf57efd5af15b8e3d1d74d72d3 +- conda: https://prefix.dev/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + sha256: f8003bef369f57396593ccd03d08a8e21966157269426f71e943f96e4b579aeb + md5: f7f0d6cc2dc986d42ac2689ec88192be depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 license: MIT license_family: MIT purls: [] - size: 206085 - timestamp: 1734208189009 -- conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f - md5: c1c999a38a4303b29d75c636eaa13cf9 + size: 206884 + timestamp: 1744127994291 +- conda: https://prefix.dev/conda-forge/osx-64/c-ares-1.34.5-hf13058a_0.conda + sha256: b37f5dacfe1c59e0a207c1d65489b760dff9ddb97b8df7126ceda01692ba6e97 + md5: eafe5d9f1a8c514afe41e6e833f66dfd depends: - - __osx >=11.0 + - __osx >=10.13 license: MIT license_family: MIT purls: [] - size: 179496 - timestamp: 1734208291879 -- conda: https://prefix.dev/conda-forge/win-64/c-ares-1.34.4-h2466b09_0.conda - sha256: f364f7de63a7c35a62c8d90383dd7747b46fa6b9c35c16c99154a8c45685c86b - md5: d387e6f147273d548f068f49a4291aef + size: 184824 + timestamp: 1744128064511 +- conda: https://prefix.dev/conda-forge/osx-arm64/c-ares-1.34.5-h5505292_0.conda + sha256: b4bb55d0806e41ffef94d0e3f3c97531f322b3cb0ca1f7cdf8e47f62538b7a2b + md5: f8cd1beb98240c7edb1a95883360ccfa depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 193862 - timestamp: 1734208384429 -- conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda - sha256: 1afd7274cbc9a334d6d0bc62fa760acc7afdaceb0b91a8df370ec01fd75dc7dd - md5: 720523eb0d6a9b0f6120c16b2aa4e7de - license: ISC - purls: [] - size: 157088 - timestamp: 1734208393264 -- conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda - sha256: 256be633fd0882ccc1a7a32bc278547e1703f85082c0789a87a603ee3ab8fb82 - md5: 7cb381a6783d91902638e4ed1ebd478e + size: 179696 + timestamp: 1744128058734 +- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-h4c7d964_0.conda + sha256: 3b82f62baad3fd33827b01b0426e8203a2786c8f452f633740868296bcbe8485 + md5: c9e0c0f82f6e63323827db462b40ede8 + depends: + - __win license: ISC purls: [] - size: 157091 - timestamp: 1734208344343 -- conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda - sha256: 424d82db36cd26234bc4772426170efd60e888c2aed0099a257a95e131683a5e - md5: cb2eaeb88549ddb27af533eccf9a45c1 + size: 154489 + timestamp: 1754210967212 +- conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + sha256: 837b795a2bb39b75694ba910c13c15fa4998d4bb2a622c214a6a5174b2ae53d1 + md5: 74784ee3d225fc3dca89edb635b4e5cc + depends: + - __unix license: ISC purls: [] - size: 157422 - timestamp: 1734208404685 -- conda: https://prefix.dev/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda - sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad - md5: 6feb87357ecd66733be3279f16a8c400 + size: 154402 + timestamp: 1754210968730 +- conda: https://prefix.dev/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda + sha256: a1ad5b0a2a242f439608f22a538d2175cac4444b7b3f4e2b8c090ac337aaea40 + md5: 11f59985f49df4620890f3e746ed7102 depends: - python >=3.9 license: ISC purls: - - pkg:pypi/certifi?source=hash-mapping - size: 161642 - timestamp: 1734380604767 -- conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - sha256: 1b389293670268ab80c3b8735bc61bc71366862953e000efbb82204d00e41b6c - md5: 1fc24a3196ad5ede2a68148be61894f4 - depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.4,<4.0a0 - - libgcc >=13 - - pycparser - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 243532 - timestamp: 1725560630552 -- conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda - sha256: 73cd6199b143a8a6cbf733ce124ed57defc1b9a7eab9b10fd437448caf8eaa45 - md5: ce6386a5892ef686d6d680c345c40ad1 + - pkg:pypi/certifi?source=compressed-mapping + size: 158692 + timestamp: 1754231530168 +- conda: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hf01b4d8_1.conda + sha256: 2c2d68ef3480c22e0d5837b9314579b4a8484ccfed264b8b7d5da70f695afdd9 + md5: c4a0f01c46bc155d205694bec57bd709 depends: - __glibc >=2.17,<3.0.a0 - - libffi >=3.4,<4.0a0 - - libgcc >=13 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=14 - pycparser - - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 license: MIT license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping - size: 295514 - timestamp: 1725560706794 -- conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py310h497396d_0.conda - sha256: 2cd81f5f8bb45f7625c232905e5f50f4f50a0cef651ec7143c6cf7d8d87bebcb - md5: 61ed55c277b0bdb5e6e67771f9e5b63e - depends: - - __osx >=11.0 - - libffi >=3.4,<4.0a0 + size: 297231 + timestamp: 1756808418076 +- conda: https://prefix.dev/conda-forge/osx-64/cffi-1.17.1-py313he20ea1e_1.conda + sha256: be88bd2cbb3f1f4e16326affc22b2c26f926dd18e03defc24df1fe6c80e7ce18 + md5: fc55afa9103145b51e5227a4ef0b8bad + depends: + - __osx >=10.13 + - libffi >=3.4.6,<3.5.0a0 - pycparser - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 license: MIT license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping - size: 229224 - timestamp: 1725560797724 -- conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda - sha256: 50650dfa70ccf12b9c4a117d7ef0b41895815bb7328d830d667a6ba3525b60e8 - md5: 6d24d5587a8615db33c961a4ca0a8034 + size: 289490 + timestamp: 1756808563 +- conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda + sha256: 6dd0ba5c68f59eb4039399d0c51d060b89f2028acd5c2f7f6879476ab108d797 + md5: a9024b1e15f59ce83654d542f83c23be depends: - __osx >=11.0 - - libffi >=3.4,<4.0a0 + - libffi >=3.4.6,<3.5.0a0 - pycparser - - python >=3.13.0rc1,<3.14.0a0 - - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 license: MIT license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping - size: 282115 - timestamp: 1725560759157 -- conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda - sha256: 32638e79658f76e3700f783c519025290110f207833ae1d166d262572cbec8a8 - md5: 9c7ec967f4ae263aec56cff05bdbfc07 - depends: - - pycparser - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 238887 - timestamp: 1725561032032 -- conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda - sha256: b19f581fe423858f1f477c52e10978be324c55ebf2e418308d30d013f4a476ff - md5: 519a29d7ac273f8c165efc0af099da42 + size: 289263 + timestamp: 1756808593662 +- conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda + sha256: 8e2cd5b827a717d4a9f14594404a7d3693a5a7b7a9a181409ca1bd24a995d78c + md5: 69a537fed13191160f1a139b6d42f6c1 depends: - pycparser - - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: MIT license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping - size: 291828 - timestamp: 1725561211547 -- conda: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - sha256: d5696636733b3c301054b948cdd793f118efacce361d9bd4afb57d5980a9064f - md5: 57df494053e17dce2ac3a0b33e1b2a2e - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cfgv?source=hash-mapping - size: 12973 - timestamp: 1734267180483 -- conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda - sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b - md5: e83a31202d1c0a000fce3e9cf3825875 + size: 290632 + timestamp: 1756808584791 +- conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + sha256: 838d5a011f0e7422be6427becba3de743c78f3874ad2743c341accbba9bb2624 + md5: 7e7d5ef1b9ed630e4a1c358d6bc62284 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/charset-normalizer?source=hash-mapping - size: 47438 - timestamp: 1735929811779 -- conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab - md5: f22f4d4970e09d68a10b922cbb0408d3 + size: 51033 + timestamp: 1754767444665 +- conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda + sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 + md5: 94b550b8d3a614dbd326af798c7dfb40 depends: - __unix - - python >=3.9 + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/click?source=hash-mapping - size: 84705 - timestamp: 1734858922844 -- conda: https://prefix.dev/conda-forge/noarch/click-8.1.8-pyh7428d3b_0.conda - sha256: c889ed359ae47eead4ffe8927b7206b22c55e67d6e74a9044c23736919d61e8d - md5: 90e5571556f7a45db92ee51cb8f97af6 + size: 87749 + timestamp: 1747811451319 +- conda: https://prefix.dev/conda-forge/noarch/click-8.2.1-pyh7428d3b_0.conda + sha256: 20c2d8ea3d800485245b586a28985cba281dd6761113a49d7576f6db92a0a891 + md5: 3a59475037bc09da916e4062c5cad771 depends: - __win - colorama - - python >=3.9 + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/click?source=hash-mapping - size: 85169 - timestamp: 1734858972635 -- conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda - sha256: 918151ad25558a37721055a02c0357ce9a2f51f07da1b238608e48ef17d35260 - md5: 1f76b7e2b3ab88def5aa2f158322c7e6 + size: 88117 + timestamp: 1747811467132 +- conda: https://prefix.dev/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda + sha256: 21ecead7268241007bf65691610cd7314da68c1f88113092af690203b5780db5 + md5: 364ba6c9fb03886ac979b482f39ebb92 depends: - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/cloudpickle?source=hash-mapping - size: 25975 - timestamp: 1735328713686 + size: 25870 + timestamp: 1736947650712 - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 md5: 962b9857ee8e7018c22f2776ffa0b2d7 @@ -3696,87 +5608,79 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 27011 timestamp: 1733218222191 -- conda: https://prefix.dev/conda-forge/linux-64/contourpy-1.3.1-py310h3788b33_0.conda - sha256: 1b18ebb72fb20b9ece47c582c6112b1d4f0f7deebaa056eada99e1f994e8a81f - md5: f993b13665fc2bb262b30217c815d137 +- conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py310h3406613_1.conda + sha256: 917519990bf711336345ff11642853382a8a83be8dcfb4fbd5084084b4e771ca + md5: a42ce2be914eabff4bb1674c57304967 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.23 + - libgcc >=14 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - license: BSD-3-Clause - license_family: BSD + - tomli + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 260973 - timestamp: 1731428528301 -- conda: https://prefix.dev/conda-forge/osx-arm64/contourpy-1.3.1-py310h7f4e7e6_0.conda - sha256: 3a9cce7ee94d3a9e9cb230a70359945573c01650fd954dc19da58474074334e4 - md5: f32dcaa4434bc4cd66437945c66cec22 + - pkg:pypi/coverage?source=hash-mapping + size: 307994 + timestamp: 1756930911557 +- conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda + sha256: c772697f83e33baabe52f8b136f5408ea7a6a85d4f6134705b0858185d16e22b + md5: 7d28b9543d76f78ccb110a1fdf5a0762 depends: - - __osx >=11.0 - - libcxx >=18 - - numpy >=1.23 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - tomli + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 230775 - timestamp: 1731428811312 -- conda: https://prefix.dev/conda-forge/win-64/contourpy-1.3.1-py310hc19bc0b_0.conda - sha256: b9e50ead1c1a7a7c0bff5b1e72436016037b0187cecba7f626c9feffe5b3deaf - md5: 741bcc6a07e77d3102aa23c580cad4f0 + - pkg:pypi/coverage?source=hash-mapping + size: 390237 + timestamp: 1756930857246 +- conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda + sha256: 146640c5c2e1d26969305a82bb0bf0abd965a7dfe17a423e882593be9ea05d74 + md5: 1354cfd7f4ad47c8327d87f9eeb352f7 depends: - - numpy >=1.23 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + - python >=3.10 + - tomli + track_features: + - coverage_no_compile + license: Apache-2.0 + license_family: APACHE purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 199849 - timestamp: 1731429286097 -- conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py310h89163eb_0.conda - sha256: 41336a050be9faa75b5785af036a756acd95adf2319cf258fe1836e2bf55221b - md5: f9bf6ea6ddf8349750f1b455f603b0ae + - pkg:pypi/coverage?source=hash-mapping + size: 164457 + timestamp: 1756930637803 +- conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py310hd951482_1.conda + sha256: e094e92b5a6a8aa96f52a32fa962b307b625679e5a22d34138d8e2b00a64b755 + md5: 5cbe9b031506cd40bfb060803c399b59 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 294613 - timestamp: 1735245270240 -- conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.10-py313h8060acc_0.conda - sha256: 707b9be598f4c8c724258ec078163282225d11c680b3c28cbf4e5baf578d1bc3 - md5: b76045c1b72b2db6e936bc1226a42c99 + size: 307159 + timestamp: 1756931000018 +- conda: https://prefix.dev/conda-forge/osx-64/coverage-7.10.6-py313h0f4d31d_1.conda + sha256: d966669b493ce56e30ea65c327a4a4f17411c172bd25be045cc11cb9528a6fbf + md5: 7f4ff6781ae861717f2be833ed81795e depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - tomli license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 373128 - timestamp: 1735245465985 -- conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py310hc74094e_0.conda - sha256: d77f7967add0155a4ed887933c01339b9f776b918452a0c2df8b74c74dde33af - md5: 2c599a597c9d1aaf693f9236fcee9f54 + size: 387192 + timestamp: 1756931013439 +- conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py310hf4fd40f_1.conda + sha256: b7858ffcc11a65472b2282aa14e567a9117910e49194db8760869471ebd96016 + md5: 1093cf442ff603532c46447ce29f5229 depends: - __osx >=11.0 - python >=3.10,<3.11.0a0 @@ -3787,11 +5691,11 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 293981 - timestamp: 1735245343917 -- conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.10-py313ha9b7d5b_0.conda - sha256: 276f3b2591bb78ded4d579014c9e7c17b08d31657cbd925e20e860ca81ffa5ce - md5: 3cfcb6a0e061db97eb8ca9b603251956 + size: 306966 + timestamp: 1756931197366 +- conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.10.6-py313h7d74516_1.conda + sha256: 59d49a869ef601a2b0d1c4e73e9f6730d999a6288ca65358d503a25d9877a457 + md5: 90f56c16681e0fee9c270c04ca32a711 depends: - __osx >=11.0 - python >=3.13,<3.14.0a0 @@ -3802,171 +5706,370 @@ packages: license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 371467 - timestamp: 1735245368381 -- conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py310h38315fa_0.conda - sha256: 187b0afc6fad0078667b1ade42e02623945c884b70554039cd30c5b92ebf46a6 - md5: 17a5805f88d2bce1e213b73201ef1007 + size: 387262 + timestamp: 1756931330496 +- conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py310hdb0e946_1.conda + sha256: 636033b29ab4a1e16840ffa0a7063864776a47c6bedf5edf97c481cc8d996a90 + md5: de8d07aa9fabb48922856f9f67233726 depends: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tomli - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 320275 - timestamp: 1735245663229 -- conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.10-py313hb4c8b1a_0.conda - sha256: 45317af859608460dd44f4c7a6d9fae0b97ade50f8938dc1f1bc39df836029da - md5: b256188abee8e72deaa8be324cc27153 + size: 332940 + timestamp: 1756930987464 +- conda: https://prefix.dev/conda-forge/win-64/coverage-7.10.6-py313hd650c13_1.conda + sha256: 43aa6d703c34e4369caa64e6047af0fbecf9ba3672b6faa31c23d5f59fb0a828 + md5: cb05e3249d226930a394a5f3e4ee04a6 depends: - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - tomli - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/coverage?source=hash-mapping - size: 398427 - timestamp: 1735245578974 -- conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.16-py310hd8ed1ab_1.conda + size: 412900 + timestamp: 1756930854650 +- conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda noarch: generic - sha256: 522b5ff2c5b1ebe0050ad15cd76a1e14696752eead790ab28e29977d7a8a99e6 - md5: 5c7fe189f8761cd08a69924554c1ffab + sha256: 44329b37f854a90b4b9bcf500c25c13dce91180eca26a9272f6a254725d2db8c + md5: 7004cb3fa62ad44d1cb70f3b080dfc8f depends: - - python 3.10.16.* + - python >=3.10,<3.11.0a0 - python_abi * *_cp310 license: Python-2.0 purls: [] - size: 48888 - timestamp: 1733407928192 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.6.77-ha770c72_0.conda - sha256: 00a7de1d084896758dc2d24b1faf4bf59e596790b22a3a08bf163a810bbacde8 - md5: 365a924cf93535157d61debac807e9e4 + size: 50504 + timestamp: 1749048166134 +- conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_0.conda + noarch: generic + sha256: ee4bc030784cf369916b79d14c67842859a27970e61a4b056092f778ed56da86 + md5: d58313aa63c8d4c127f710763026c2f3 + depends: + - python >=3.13,<3.14.0a0 + - python_abi * *_cp313t + license: Python-2.0 + purls: [] + size: 47949 + timestamp: 1756909308151 +- conda: https://prefix.dev/conda-forge/noarch/cpython-3.13.7-py313hd8ed1ab_100.conda + noarch: generic + sha256: e9ac20662d1c97ef96e44751a78c0057ec308f7cc208ef1fbdc868993c9f5eb3 + md5: c5623ddbd37c5dafa7754a83f97de01e + depends: + - python >=3.13,<3.14.0a0 + - python_abi * *_cp313 + license: Python-2.0 + purls: [] + size: 48174 + timestamp: 1756909387263 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda + sha256: 2ee3b9564ca326226e5cda41d11b251482df8e7c757e333d28ec75213c75d126 + md5: 87ff6381e33b76e5b9b179a2cdd005ec + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1150650 + timestamp: 1746189825236 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda + sha256: 681eb1d9afd596e04329a82b04734c0e37c6ecb94b3380f3a378d61983e2a8cc + md5: 8f897dca7111f3bb4ded97ba6947b186 + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1139649 + timestamp: 1746189858434 +- conda: https://prefix.dev/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda + sha256: e6257534c4b4b6b8a1192f84191c34906ab9968c92680fa09f639e7846a87304 + md5: 79d280de61e18010df5997daea4743df depends: - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 94239 + timestamp: 1753975242354 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-crt-tools-12.9.86-ha770c72_2.conda + sha256: 2da9964591af14ba11b2379bed01d56e7185260ee0998d1a939add7fb752db45 + md5: 503a94e20d2690d534d676a764a1852c + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 29138 + timestamp: 1753975252445 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda + sha256: 57d1294ecfaf9dc8cdb5fc4be3e63ebc7614538bddb5de53cfd9b1b7de43aed5 + md5: cb15315d19b58bd9cd424084e58ad081 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-cudart_linux-64 12.9.79 h3f2d84a_0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1067930 - timestamp: 1727807050610 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cccl_win-64-12.6.77-h57928b3_0.conda - sha256: 8edb86dda336cb5ba5650c1251e792580e5d76543187beb003352e1f6e9b617e - md5: 1ae84321073896156e5e4e5f95a1de4d + size: 23242 + timestamp: 1749218416505 +- conda: https://prefix.dev/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda + sha256: a30cd9adf3a70d069d4d87c5728ec16778b77071629612ca5d8513cd92d89c09 + md5: 0a243d4f000a0d2f51dd94ee9132b234 depends: - - cuda-version >=12.6,<12.7.0a0 + - cuda-cudart_win-64 12.9.79 he0c23c2_0 + - cuda-version >=12.9,<12.10.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1068812 - timestamp: 1727807189161 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.6.77-h3f2d84a_0.conda - sha256: 60847bd8c74b02ca17d68d742fe545db84a18bf808344eb99929f32f79bffcf9 - md5: f967e2449b6c066f6d09497fff12d803 + size: 170799 + timestamp: 1749218946117 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda + sha256: ffe86ed0144315b276f18020d836c8ef05bf971054cf7c3eb167af92494080d5 + md5: 86e40eb67d83f1a58bdafdd44e5a77c6 depends: - cuda-cccl_linux-64 - cuda-cudart-static_linux-64 - cuda-cudart_linux-64 - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 365370 - timestamp: 1727810466552 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.6.77-he0c23c2_0.conda - sha256: 6abee18760437c55f41b310980a597bda95cba7277a160a288b25d2faf55257d - md5: 3f9a064a676b3f44da9ea34ae854acb9 + size: 389140 + timestamp: 1749218427266 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda + sha256: e022d36a333420130faf6473c49f8dab54bf976cf320577ffb06db0a0797b734 + md5: 3c3e2f6b5455783fd332a072d632ea78 depends: - cuda-cccl_win-64 - cuda-cudart-static_win-64 - cuda-cudart_win-64 - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1190184 + timestamp: 1749218971019 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda + sha256: d435f8a19b59b52ce460ee3a6bfd877288a0d1d645119a6ba60f1c3627dc5032 + md5: b87bf315d81218dd63eb46cc1eaef775 + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1148889 + timestamp: 1749218381225 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda + sha256: 6a3410cd7ce07955cb705801055ef129ebee1cd6390c6fe9e5f607b67c3dba36 + md5: 0dd152a1493d90356037604a865f050f + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 354611 + timestamp: 1749218544740 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda + sha256: 6cde0ace2b995b49d0db2eefb7bc30bf00ffc06bb98ef7113632dec8f8907475 + md5: 64508631775fbbf9eca83c84b1df0cae + depends: + - cuda-version >=12.9,<12.10.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 197249 + timestamp: 1749218394213 +- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.9.79-he0c23c2_0.conda + sha256: 6a89a53cdbcfafa0bb55abee1b58492c6a9a28e688abe04f48f0d01649c5f3e4 + md5: 71c9c2ab52226f990f268164381d8494 + depends: + - cuda-version >=12.9,<12.10.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 795994 - timestamp: 1727810947677 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_linux-64-12.6.77-h3f2d84a_0.conda - sha256: aefed29499bdbe5d0c65ca44ef596929cf34cc3014f0ae225cdd45a0e66f2660 - md5: 3ad8eacbf716ddbca1b5292a3668c821 + size: 23260 + timestamp: 1749218569458 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-cuobjdump-12.9.82-hbd13f7d_0.conda + sha256: a4f37cd8823d209639bdda1eea3ee0eb01040e44e2480c2f393e684c472c2f0c + md5: 667a138d80047e7869f5330087772fd7 depends: - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-nvdisasm + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 243219 + timestamp: 1749223489014 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-12.9.79-h9ab20c4_0.conda + sha256: 55922005d1b31ba090455ab39d2e5a9b771fe503713d4b7699752a76aedccb2b + md5: 229b3cc1f6b6b633923e1c9856ee0d80 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1842820 + timestamp: 1749218443367 +- conda: https://prefix.dev/conda-forge/win-64/cuda-cupti-12.9.79-he0c23c2_0.conda + sha256: 95883229d937ad2e8d32745264d7c8a572c3920409d891aa5e8071139ece461b + md5: 597f14a0d98a977f3dffb8c6cf64ecce + depends: + - cuda-version >=12.9,<12.10.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 762328 - timestamp: 1727810443982 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart-static_win-64-12.6.77-he0c23c2_0.conda - sha256: a36d2216dfe3cfbd5687a511fa9596683b5028598b2a348a14f735a25f996c2f - md5: f5f6db5c5e308919544cb5d394d05766 + size: 4094677 + timestamp: 1749218909294 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-cupti-dev-12.9.79-h9ab20c4_0.conda + sha256: 13b46369781c4202ba50fc26788e0304720de87272304fb7fdb46ad6818f96c0 + md5: 9ab84df0819a61a0f9c09c8adce8bf5a depends: - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.28,<3.0.a0 + - cuda-cupti 12.9.79 h9ab20c4_0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - cuda-cupti-static >=12.9.79 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 342006 - timestamp: 1727810565776 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_linux-64-12.6.77-h3f2d84a_0.conda - sha256: cf8433afa236108dba2a94ea5d4f605c50f0e297ee54eb6cb37175fd84ced907 - md5: 314908ad05e2c4833475a7d93f4149ca + size: 4604126 + timestamp: 1749218509769 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda + sha256: 0e849be7b5e4832ca218ec2c48a9ba3a15a984f629e2e54f38a53f4f57220341 + md5: dc256c9864c2e8e9c817fbca1c84a4bc depends: - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-crt-tools 12.9.86 ha770c72_2 + - cuda-nvvm-tools 12.9.86 h4bc722e_2 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=12 + - libstdcxx >=12 + constrains: + - gcc_impl_linux-64 >=6,<15.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 188616 - timestamp: 1727810451690 -- conda: https://prefix.dev/conda-forge/noarch/cuda-cudart_win-64-12.6.77-he0c23c2_0.conda - sha256: 5fbfedab5162ea1e778c84f588bce42b7a72b7fb714d2ddf3c22757ffb5d11ad - md5: 334451d538c5fe66d81cfe8947930f8e + size: 27380012 + timestamp: 1753975454194 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvdisasm-12.9.88-hbd13f7d_0.conda + sha256: 6ef7c122897a9e27bc3aaed1745ea03bfecb5f553d420b0e4bf2ef6f568aab81 + md5: 7e9e4991e5890f32e8ef3c9a971171df depends: - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 22586 - timestamp: 1727810570341 -- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.6.85-hbd13f7d_0.conda - sha256: 3ddec2c3b68cea5edba728ffc61a2257300d401d428b9d60aca7363c0c0d4ad5 - md5: 9d9909844a0133153d54b6f07283da8c + size: 5517799 + timestamp: 1749221325784 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvrtc-12.9.86-h5888daf_0.conda + sha256: 4d339c411c23d40ff3a8671284e476a31b31273b1a4d29c680c01940a559bd95 + md5: 9c52e4389e54d4f5800b23512e479479 depends: - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 18138390 - timestamp: 1732133174552 -- conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.6.85-he0c23c2_0.conda - sha256: 251e79afc2adecd30863fb763523ac8ef2d62490ae3fbcb4d60673e4fcdd454f - md5: f08894d09aac69d2144815c4a36e66e6 + size: 67183992 + timestamp: 1749221543691 +- conda: https://prefix.dev/conda-forge/win-64/cuda-nvrtc-12.9.86-he0c23c2_0.conda + sha256: dadb5980acc9622e65ebf20559c6e5fff781c3ae5d69fccb2fc19de89644fc7c + md5: eaf294eebe18e813a14fc04b486addab depends: - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 30648689 - timestamp: 1732133462356 -- conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.6-h7480c83_3.conda - sha256: fd9104d73199040285b6a6ad56322b38af04828fabbac1f5a268a83509358425 - md5: 1c8b99e65a4423b1e4ac2e4c76fb0978 + size: 58555916 + timestamp: 1749221935901 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvtx-12.9.79-h5888daf_0.conda + sha256: 8a09c380831215cd3c996bac59c5e3bd774648a2a19e4edfc99b283b65605844 + md5: 50e6a4a31fb588f158ab850b1d545747 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 29292 + timestamp: 1749221478549 +- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda + sha256: 45f5e881ed0d973132a5475a0b5c066db6e748ef3a831a14dba8374b252e0067 + md5: f9af26e4079adcd72688a8e8dbecb229 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 24246736 + timestamp: 1753975332907 +- conda: https://prefix.dev/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + sha256: 5f5f428031933f117ff9f7fcc650e6ea1b3fef5936cf84aa24af79167513b656 + md5: b6d5d7f1c171cbd228ea06b556cfa859 + constrains: + - cudatoolkit 12.9|12.9.* + - __cuda >=12 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 21578 + timestamp: 1746134436166 +- conda: https://prefix.dev/conda-forge/linux-64/cudnn-9.12.0.46-hbcb9cd8_0.conda + sha256: a1eba663e77e1cbd1e2c59287a45151086405cd5e5df53e8f5b8f54569655f30 + md5: 472e7cb693d6813a82326a3906d56b03 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn-dev 9.12.0.46 h58dd1b1_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - cudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 19445 + timestamp: 1755787697723 +- conda: https://prefix.dev/conda-forge/win-64/cudnn-9.12.0.46-h32ff316_0.conda + sha256: 23724350b0b19402ee1e76308c13aa467af49326e05907c48d2bc6991b53d75a + md5: 37bd11540d9d3f51ce8d3e4e766147f5 + depends: + - cuda-version >=12,<13.0a0 + - libcudnn-dev 9.12.0.46 hca898b4_0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - cudatoolkit 12.6|12.6.* - - __cuda >=12 - license: LicenseRef-NVIDIA-End-User-License-Agreement + - cudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement purls: [] - size: 20940 - timestamp: 1722603990914 -- conda: https://prefix.dev/conda-forge/linux-64/cupy-13.3.0-py310h1b77274_2.conda - sha256: 70e709d551f6e361f30db07095ee1ad100a88856576f1c756fe5b70db85ff2b6 - md5: 39e67291f815da99637a734876dfc77e + size: 19705 + timestamp: 1755787530135 +- conda: https://prefix.dev/conda-forge/linux-64/cupy-13.6.0-py310h8c3aed4_0.conda + sha256: 2544811489903ccb63085940a6ded55c3b7dea4508e514b0242e95ee9918ad29 + md5: 94fd53a832d45fb04eae9f5b168f9f5a depends: - cuda-cudart-dev_linux-64 - cuda-nvrtc - - cuda-version >=12.0,<13.0a0 - - cupy-core 13.3.0 py310h8de46e0_2 + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py310hbc0d89f_0 - libcublas - libcufft - libcurand @@ -3977,16 +6080,36 @@ packages: license: MIT license_family: MIT purls: [] - size: 354997 - timestamp: 1729280132792 -- conda: https://prefix.dev/conda-forge/win-64/cupy-13.3.0-py310h619d0c7_2.conda - sha256: f133dd2957f4ee4fbc7510d5c5130d31cba4b3b0f3f35aed597938f7ecca06db - md5: 7fa52b4cdd45b5485b6a20762884b332 + size: 359348 + timestamp: 1755609757002 +- conda: https://prefix.dev/conda-forge/linux-64/cupy-13.6.0-py313h586c94b_0.conda + sha256: 12fd6d5e86e34ed908db703154b4a9c38e9e0d11bf8c325a46a615e462d9549e + md5: 18adeae1c1bd2d0d92ebdb68f0b06b79 + depends: + - cuda-cudart-dev_linux-64 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py313h28b6081_0 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: [] + size: 359159 + timestamp: 1755607007346 +- conda: https://prefix.dev/conda-forge/win-64/cupy-13.6.0-py310h9349102_0.conda + sha256: 9f5269cb71bc7aa12eab368628cca91924950bcab65c89eaa89faed0eb388261 + md5: b2530735a80332638413a50babd589c5 depends: - cuda-cudart-dev_win-64 - cuda-nvrtc - - cuda-version >=12.0,<13.0a0 - - cupy-core 13.3.0 py310h441eff7_2 + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py310h867cfc4_0 - libcublas - libcufft - libcurand @@ -3997,232 +6120,192 @@ packages: license: MIT license_family: MIT purls: [] - size: 356161 - timestamp: 1729280925723 -- conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.3.0-py310h8de46e0_2.conda - sha256: 45f452ba11cd88c3375493b2b9d75bb412320b30d1871f4d817608cf8ec97497 - md5: 9f9f87f2744573abc3e371960374eea0 + size: 359984 + timestamp: 1755608915142 +- conda: https://prefix.dev/conda-forge/win-64/cupy-13.6.0-py313h5dfe2c3_0.conda + sha256: fb3d6709a51b0231747884bd427193a2f8d8fc9a790a0766ec7cb3bb1659f328 + md5: c60585cf4aaa55e4ac785c1a815f688e + depends: + - cuda-cudart-dev_win-64 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - cupy-core 13.6.0 py313ha16128a_0 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: [] + size: 359890 + timestamp: 1755608436753 +- conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.6.0-py310hbc0d89f_0.conda + sha256: 1289848c4e21bfc72aa466f83a96a56964b9bb048765cb551b37508ef5e22598 + md5: 151ba01a228834d38501d3550e23536b depends: - __glibc >=2.17,<3.0.a0 - - fastrlock >=0.8.2,<0.9.0a0 - - libgcc >=12 - - libstdcxx >=12 - - numpy >=1.22,<3.0.0a0 + - fastrlock >=0.8.3,<0.9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22,<2.3 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 constrains: - - cuda-version >=12.0,<13 - - nccl >=2.23.4.1,<3.0a0 - - libcublas >=12,<13.0a0 + - optuna ~=3.0 + - nccl >=2.27.7.1,<3.0a0 + - libcurand >=10,<11.0a0 + - cutensor >=2.2.0.0,<3.0a0 + - libcusolver >=11,<12.0a0 - libcusparse >=12,<13.0a0 - libcufft >=11,<12.0a0 + - libcublas >=12,<13.0a0 - cuda-nvrtc >=12,<13.0a0 - - cupy >=13.3.0,<13.4.0a0 - - libcurand >=10,<11.0a0 - - cutensor >=2.0.2.5,<3.0a0 - __cuda >=12.0 - - libcusolver >=11,<12.0a0 + - cuda-version >=12,<13.0a0 + - cupy >=13.6.0,<13.7.0a0 + - scipy >=1.7,<1.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy?source=hash-mapping + size: 56523192 + timestamp: 1755609567294 +- conda: https://prefix.dev/conda-forge/linux-64/cupy-core-13.6.0-py313h28b6081_0.conda + sha256: 77092b9dcd82796601f289768ec9e5f0a508f7c559afdb53c82d0e02c65625a2 + md5: 45fc2910a9d2f3f4133cd7fd55e74afd + depends: + - __glibc >=2.17,<3.0.a0 + - fastrlock >=0.8.3,<0.9.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.22,<2.3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - libcublas >=12,<13.0a0 + - cutensor >=2.2.0.0,<3.0a0 + - nccl >=2.27.7.1,<3.0a0 + - __cuda >=12.0 + - libcurand >=10,<11.0a0 - optuna ~=3.0 - - scipy ~=1.7 + - libcufft >=11,<12.0a0 + - libcusolver >=11,<12.0a0 + - cuda-version >=12,<13.0a0 + - libcusparse >=12,<13.0a0 + - scipy >=1.7,<1.17 + - cuda-nvrtc >=12,<13.0a0 + - cupy >=13.6.0,<13.7.0a0 license: MIT license_family: MIT purls: - pkg:pypi/cupy?source=hash-mapping - size: 40844715 - timestamp: 1729280030931 -- conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.3.0-py310h441eff7_2.conda - sha256: 26065fb5dce29c4d430278022525abbae705254800adfcac4ec0de21f813a14f - md5: a218cde313af1846053c79d53b7fa0e3 - depends: - - fastrlock >=0.8.2,<0.9.0a0 - - numpy >=1.22,<3.0.0a0 + size: 56635911 + timestamp: 1755606899872 +- conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.6.0-py310h867cfc4_0.conda + sha256: ecfa789ba77c9e9e800d2112fb9cdb2dbd85fa75cc2378978361eafa129be445 + md5: f531b09b50fba00db29c55a83b2a7f7b + depends: + - fastrlock >=0.8.3,<0.9.0a0 + - numpy >=1.22,<2.3 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 constrains: - - cutensor >=2.0.2.5,<3.0a0 - - scipy ~=1.7 - - __cuda >=12.0 - - optuna ~=3.0 - - libcublas >=12,<13.0a0 - - libcurand >=10,<11.0a0 - - cupy >=13.3.0,<13.4.0a0 + - cuda-version >=12,<13.0a0 + - cutensor >=2.2.0.0,<3.0a0 - libcusolver >=11,<12.0a0 - - cuda-nvrtc >=12,<13.0a0 - - cuda-version >=12.0,<13 + - __cuda >=12.0 - libcufft >=11,<12.0a0 + - cupy >=13.6.0,<13.7.0a0 + - scipy >=1.7,<1.17 + - libcublas >=12,<13.0a0 - libcusparse >=12,<13.0a0 + - cuda-nvrtc >=12,<13.0a0 + - optuna ~=3.0 + - libcurand >=10,<11.0a0 license: MIT license_family: MIT purls: - pkg:pypi/cupy?source=hash-mapping - size: 38806181 - timestamp: 1729280848364 -- conda: https://prefix.dev/conda-forge/linux-64/cytoolz-1.0.1-py310ha75aee5_0.conda - sha256: b427689dfc24a6a297363122ce10d502ea00ddb3c43af6cff175ff563cc94eea - md5: d0be1adaa04a03aed745f3d02afb59ce - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - toolz >=0.10.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cytoolz?source=hash-mapping - size: 367939 - timestamp: 1734107352663 -- conda: https://prefix.dev/conda-forge/osx-arm64/cytoolz-1.0.1-py310h078409c_0.conda - sha256: 2e9fa448ccdff423659f94dfc3feb1ff5a5dad4411f77bd3bcfe834c0f90538a - md5: cc727be997fbe103b6e750b53bd78edd - depends: - - __osx >=11.0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - toolz >=0.10.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cytoolz?source=hash-mapping - size: 313656 - timestamp: 1734107486887 -- conda: https://prefix.dev/conda-forge/win-64/cytoolz-1.0.1-py310ha8f682b_0.conda - sha256: 670800d13b6cd64b8f53756b28254b47cfc177606dcd42094696582335ed0f02 - md5: ed2af2a0262d44f753738588640b8534 - depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - toolz >=0.10.0 + size: 54385499 + timestamp: 1755608840453 +- conda: https://prefix.dev/conda-forge/win-64/cupy-core-13.6.0-py313ha16128a_0.conda + sha256: 9b62d28ad5a00eb72eb83614cf41b7874002d4b0e0700ccff407da6ead6767a3 + md5: 86f0f9ed7ffbbc8b2cd8146c343fcdab + depends: + - fastrlock >=0.8.3,<0.9.0a0 + - numpy >=1.22,<2.3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + constrains: + - cutensor >=2.2.0.0,<3.0a0 + - __cuda >=12.0 + - cupy >=13.6.0,<13.7.0a0 + - scipy >=1.7,<1.17 + - optuna ~=3.0 + - cuda-nvrtc >=12,<13.0a0 + - libcusolver >=11,<12.0a0 + - cuda-version >=12,<13.0a0 + - libcurand >=10,<11.0a0 + - libcublas >=12,<13.0a0 + - libcusparse >=12,<13.0a0 + - libcufft >=11,<12.0a0 + license: MIT + license_family: MIT purls: - - pkg:pypi/cytoolz?source=hash-mapping - size: 295487 - timestamp: 1734107690341 -- conda: https://prefix.dev/conda-forge/noarch/dask-2024.12.1-pyhd8ed1ab_0.conda - sha256: 4caae23bb33892998bee07024ddf1eec346400556c7bb7d45d1cee148af060d1 - md5: f3134df9565c4d4415ff0e61f3aa28d0 + - pkg:pypi/cupy?source=hash-mapping + size: 54665493 + timestamp: 1755608344397 +- conda: https://prefix.dev/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda + sha256: 039130562a81522460f6638cabaca153798d865c24bb87781475e8fd5708d590 + md5: 3293644021329a96c606c3d95e180991 depends: - - bokeh >=3.1.0 - - cytoolz >=0.11.0 - - dask-core >=2024.12.1,<2024.12.2.0a0 - - dask-expr >=1.1,<1.2 - - distributed >=2024.12.1,<2024.12.2.0a0 - - jinja2 >=2.10.3 - - lz4 >=4.3.2 - - numpy >=1.24 - - pandas >=2.0 - - pyarrow >=14.0.1 - python >=3.10 - constrains: - - openssl !=1.1.1e - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7590 - timestamp: 1734476244327 -- conda: https://prefix.dev/conda-forge/noarch/dask-core-2024.12.1-pyhd8ed1ab_0.conda - sha256: a2dfdb73143ddc75ee7ca25b0a8c714ecaedafb45c6a4684883b7648924e2ea3 - md5: 48060c395f1e87a80330c0adaad332f7 - depends: - click >=8.1 - cloudpickle >=3.0.0 - - fsspec >=2021.09.0 - - importlib-metadata >=4.13.0 + - fsspec >=2021.9.0 - packaging >=20.0 - partd >=1.4.0 - - python >=3.10 - pyyaml >=5.3.1 - toolz >=0.10.0 + - importlib-metadata >=4.13.0 + - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/dask?source=hash-mapping - size: 906359 - timestamp: 1734468020040 -- conda: https://prefix.dev/conda-forge/noarch/dask-expr-1.1.21-pyhd8ed1ab_0.conda - sha256: 5aceb0fb2ba39a3fa30f5b8fe7b0d9d832aacdc76dd2b01bd88d92893eabc50f - md5: e72a014dbbd35545dcfba4de9c92fb1d - depends: - - dask-core 2024.12.1 - - pandas >=2 - - pyarrow >=14.0.1 - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/dask-expr?source=hash-mapping - size: 185833 - timestamp: 1734473200411 -- conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda - sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479 - md5: d622d8d7ee8868870f9cbe259f381181 + size: 1058723 + timestamp: 1752524171028 +- conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 + md5: 9ce473d1d1be1cc3810856a48b3fab32 depends: - python >=3.9 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/decorator?source=hash-mapping - size: 14068 - timestamp: 1733236549190 -- conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda - sha256: 499be2f8e4397a46249e8e500535795704af27e56360ae0c964904140b41454a - md5: 5e11310fca410e9f31381157079dee55 + size: 14129 + timestamp: 1740385067843 +- conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda + sha256: 43dca52c96fde0c4845aaff02bcc92f25e1c2e5266ddefc2eac1a3de0960a3b1 + md5: 885745570573eb6a08e021841928297a depends: - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/dill?source=hash-mapping - size: 89973 - timestamp: 1733249646688 -- conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_1.conda - sha256: 0e160c21776bd881b79ce70053e59736f51036784fa43a50da10a04f0c1b9c45 - md5: 8d88f4a2242e6b96f9ecff9a6a05b2f1 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/distlib?source=hash-mapping - size: 274151 - timestamp: 1733238487461 -- conda: https://prefix.dev/conda-forge/noarch/distributed-2024.12.1-pyhd8ed1ab_0.conda - sha256: 0cdd52fd0654428eb5bc6f460747ac484d07cca8434e361078f20e2c3258bb1e - md5: 58df114d7649ddb3f68c9b9adc6fbabe - depends: - - click >=8.0 - - cloudpickle >=3.0.0 - - cytoolz >=0.11.2 - - dask-core >=2024.12.1,<2024.12.2.0a0 - - jinja2 >=2.10.3 - - locket >=1.0.0 - - msgpack-python >=1.0.2 - - packaging >=20.0 - - psutil >=5.8.0 - - python >=3.10 - - pyyaml >=5.4.1 - - sortedcontainers >=2.0.5 - - tblib >=1.6.0 - - toolz >=0.11.2 - - tornado >=6.2.0 - - urllib3 >=1.26.5 - - zict >=3.0.0 - constrains: - - openssl !=1.1.1e - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/distributed?source=hash-mapping - size: 803908 - timestamp: 1734473202885 + size: 90864 + timestamp: 1744798629464 - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda sha256: fa5966bb1718bbf6967a85075e30e4547901410cc7cb7b16daf68942e9a94823 md5: 24c1ca34138ee57de72a943237cde4cc @@ -4233,114 +6316,168 @@ packages: - pkg:pypi/docutils?source=hash-mapping size: 402700 timestamp: 1733217860944 -- conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 - md5: a16662747cdeb9abbac74d0057cc976e +- conda: https://prefix.dev/conda-forge/linux-64/dprint-0.50.0-hb23c6cf_0.conda + sha256: 84a7ab17f3d3d50242a28506e599cc06b1ecea8f4f4d5e6e808d6c15d19ba6f7 + md5: aa32af075fd0d097fbb7f42a1886611b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: [] + size: 6006705 + timestamp: 1747623395464 +- conda: https://prefix.dev/conda-forge/osx-64/dprint-0.50.0-hd2571bf_0.conda + sha256: c9d5be21192cdc537b5058b3452b2a2d97234313e973ada938df07511978fe69 + md5: fc3e6231b1b9d7913c79494f2ab8cc23 + depends: + - __osx >=10.13 + constrains: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 5938302 + timestamp: 1747623421024 +- conda: https://prefix.dev/conda-forge/osx-arm64/dprint-0.50.0-h8dba533_0.conda + sha256: 6a2de866896d638c8d437f281568d272ea2726edb93556075b6145aafbe6f749 + md5: 483a7eea67dc9053c3f3e332db34e016 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 5466628 + timestamp: 1747623425492 +- conda: https://prefix.dev/conda-forge/win-64/dprint-0.50.0-h63977a8_0.conda + sha256: 472651da1d9fdf8f971d6e7315e66eaf751a4d89931b35ad67688169d47c16f7 + md5: b2dfadee4319a59f897548368d2f82dd + depends: + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 6332369 + timestamp: 1747623393600 +- conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda + sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca + md5: 72e42d28960d875c7654614f8b50939a depends: - python >=3.9 + - typing_extensions >=4.6.0 license: MIT and PSF-2.0 purls: - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20486 - timestamp: 1733208916977 -- conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda - sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60 - md5: ef8b5fca76806159fc25b4f48d8737eb + size: 21284 + timestamp: 1746947398083 +- conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad + md5: ff9efb7f7469aed3c4a8106ffa29593c depends: - - python >=3.9 + - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/executing?source=hash-mapping - size: 28348 - timestamp: 1733569440265 -- conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py310h8c668a6_1.conda - sha256: 25c6927ff29307a937ab3d549665adfd69070c4eccc850b6dc7fb401fd4f118c - md5: 4c9c2d9a2754460d342a84703b64c96b + - pkg:pypi/executing?source=compressed-mapping + size: 30753 + timestamp: 1756729456476 +- conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py310h25320af_2.conda + sha256: 95eea806cb216036e4d0446fcff724c334c8899d02be2368a430ec5361ed29a4 + md5: 8dbd4fc06661c78fdc2daedf23824bfe depends: - python - - libstdcxx >=13 - - libgcc >=13 + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - python_abi 3.10.* *_cp310 license: MIT license_family: MIT - purls: [] - size: 40945 - timestamp: 1734873426861 -- conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py310h9a06e79_1.conda - sha256: 3a61f72d93f43eeda01fde9c30e39ce3d442e4caa51eb20e04654366b3e3b789 - md5: 1eca50ca6668276e794da4c769510131 + purls: + - pkg:pypi/fastrlock?source=hash-mapping + size: 40665 + timestamp: 1756729198132 +- conda: https://prefix.dev/conda-forge/linux-64/fastrlock-0.8.3-py313h5d5ffb9_2.conda + sha256: 30498ed45133f457fd9ed14d5fac6512347f05d11fe1ed89842c7dfdb516f78f + md5: 9bcbd351966dc56a24fc0c368da5ad99 depends: - python - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastrlock?source=hash-mapping + size: 41201 + timestamp: 1756729160955 +- conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py310h699e580_2.conda + sha256: 57deb00090c09edc841a43499f23396bb35d51aa5aaa6886d4ae1d0ff969b3dd + md5: 3207527dea58c115e7e97856709465db + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - python_abi 3.10.* *_cp310 license: MIT license_family: MIT - purls: [] - size: 36203 - timestamp: 1734873436406 -- conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda - sha256: 18dca6e2194732df7ebf824abaefe999e4765ebe8e8a061269406ab88fc418b9 - md5: d692e9ba6f92dc51484bf3477e36ce7c - depends: - - python >=3.9 - license: Unlicense purls: - - pkg:pypi/filelock?source=hash-mapping - size: 17441 - timestamp: 1733240909987 -- conda: https://prefix.dev/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 - md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + - pkg:pypi/fastrlock?source=hash-mapping + size: 36960 + timestamp: 1756729187087 +- conda: https://prefix.dev/conda-forge/win-64/fastrlock-0.8.3-py313h927ade5_2.conda + sha256: 2a23cce182f04de8e522d47a9e41f9f9a85eb25a2d67d52356ce1d6522bbbe79 + md5: 1fc8d6295c7ebff653118d2ba22cf226 depends: - - libgcc-ng >=12 - - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<2.0.0a0 - license: GPL-2.0-only OR FTL - purls: [] - size: 634972 - timestamp: 1694615932610 -- conda: https://prefix.dev/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda - sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 - md5: e6085e516a3e304ce41a8ee08b9b89ad - depends: - - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<2.0.0a0 - license: GPL-2.0-only OR FTL - purls: [] - size: 596430 - timestamp: 1694616332835 -- conda: https://prefix.dev/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 - md5: 3761b23693f768dc75a8fd0a73ca053f - depends: - - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: GPL-2.0-only OR FTL - purls: [] - size: 510306 - timestamp: 1694616398888 -- conda: https://prefix.dev/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda - sha256: 3320970c4604989eadf908397a9475f9e6a96a773c185915111399cbfbe47817 - md5: e041ad4c43ab5e10c74587f95378ebc7 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastrlock?source=hash-mapping + size: 36385 + timestamp: 1756729186432 +- conda: https://prefix.dev/conda-forge/noarch/filelock-3.19.1-pyhd8ed1ab_0.conda + sha256: 7a2497c775cc7da43b5e32fc5cf9f4e8301ca723f0eb7f808bbe01c6094a3693 + md5: 9c418d067409452b2e87e0016257da68 depends: - python >=3.9 + license: Unlicense + purls: + - pkg:pypi/filelock?source=compressed-mapping + size: 18003 + timestamp: 1755216353218 +- conda: https://prefix.dev/conda-forge/noarch/fsspec-2025.9.0-pyhd8ed1ab_0.conda + sha256: 05e55a2bd5e4d7f661d1f4c291ca8e65179f68234d18eb70fc00f50934d3c4d3 + md5: 76f492bd8ba8a0fb80ffe16fc1a75b3b + depends: + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/fsspec?source=hash-mapping - size: 137756 - timestamp: 1734650349242 + size: 145678 + timestamp: 1756908673345 - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda sha256: 3d6e42c5c22ea3c3b8d35b6582f544bc5fc08df37c394f5a30d6644b626a7be6 md5: a4ffdb4a5370e427f0ad980df69bbdbc @@ -4356,53 +6493,6 @@ packages: - pkg:pypi/furo?source=hash-mapping size: 82395 timestamp: 1735043817924 -- conda: https://prefix.dev/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a - md5: d411fc29e338efb48c5fd4576d71d881 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 119654 - timestamp: 1726600001928 -- conda: https://prefix.dev/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 - md5: 57a511a5905caa37540eb914dfcbf1fb - depends: - - __osx >=11.0 - - libcxx >=17 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 82090 - timestamp: 1726600145480 -- conda: https://prefix.dev/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 - md5: ff862eebdfeb2fd048ae9dc92510baca - depends: - - gflags >=2.2.2,<2.3.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 143452 - timestamp: 1718284177264 -- conda: https://prefix.dev/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 - md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 - depends: - - __osx >=11.0 - - gflags >=2.2.2,<2.3.0a0 - - libcxx >=16 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 112215 - timestamp: 1718284365403 - conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -4413,6 +6503,16 @@ packages: purls: [] size: 460055 timestamp: 1718980856608 +- conda: https://prefix.dev/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda + sha256: 75aa5e7a875afdcf4903b7dc98577672a3dc17b528ac217b915f9528f93c85fc + md5: 427101d13f19c4974552a4e5b072eef1 + depends: + - __osx >=10.13 + - libcxx >=16 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] + size: 428919 + timestamp: 1718981041839 - conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda sha256: 76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd md5: eed7278dfbab727b56f2c0b64330814b @@ -4423,13 +6523,46 @@ packages: purls: [] size: 365188 timestamp: 1718981343258 -- conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.1.5-py310he8512ff_3.conda - sha256: 18866d66175a957fd5a61125bb618b160c77c8d08d0d9d5be991e9f77c19b288 - md5: 832c93fd1bee415d2833b023f5ebb2dc +- conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py310h63ebcad_1.conda + sha256: 5dd159303bf0e2a4f72829a7dd2cf7aea52eaed4ba41e780212775e15dcac00b + md5: 1010410284a28a6b0a7b115b8cb5a40d + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 204060 + timestamp: 1756739685161 +- conda: https://prefix.dev/conda-forge/linux-64/gmpy2-2.2.1-py313h86d8783_1.conda + sha256: b8b9c2f1b517ee9067ad74112a5b2c7d96b937bcbeea91161ea4cd6ca0e8bbc7 + md5: c9bc12b70b0c422e937945694e7cf6c0 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 215280 + timestamp: 1756739742130 +- conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py310h71a0b2e_1.conda + sha256: db0dc4ed38ed8e7098b8b66c6c1c1b8bc8c5c8ddea857a8e6328f188c9617fc1 + md5: 9a98b8db502f18642dd772cd17cee3a4 depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=10.13 - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - mpc >=1.3.1,<2.0a0 - mpfr >=4.2.1,<5.0a0 - python >=3.10,<3.11.0a0 @@ -4438,11 +6571,27 @@ packages: license_family: LGPL purls: - pkg:pypi/gmpy2?source=hash-mapping - size: 202700 - timestamp: 1733462653858 -- conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.1.5-py310h805dbd7_3.conda - sha256: e287abe2518728097e1278e550d7a7c0e8033f0eab1ac408b73449b263ebd82d - md5: 2bf8b309e18059ee570ff14976f855c1 + size: 164299 + timestamp: 1756739882172 +- conda: https://prefix.dev/conda-forge/osx-64/gmpy2-2.2.1-py313h904ca6e_1.conda + sha256: 4d33c780509865cc81234e92081eaae1803604b663fec134ab8e33f6e354df26 + md5: ebd9e6dde441c23bb86f41b2eb3bfa60 + depends: + - __osx >=10.13 + - gmp >=6.3.0,<7.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 170794 + timestamp: 1756739979335 +- conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py310h8086d47_1.conda + sha256: e51bf60bfb27f81faf2b3f25a7a08c3881517d2c5d5581ec38a0bb75c6a45e25 + md5: 885b257e79dfa525524d07c2d228f240 depends: - __osx >=11.0 - gmp >=6.3.0,<7.0a0 @@ -4455,43 +6604,76 @@ packages: license_family: LGPL purls: - pkg:pypi/gmpy2?source=hash-mapping - size: 146398 - timestamp: 1733462796032 -- conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c - md5: 825927dc7b0f287ef8d4d0011bb113b1 - depends: - - hpack >=4.0,<5 - - hyperframe >=6.0,<7 - - python >=3.9 + size: 156747 + timestamp: 1756740002688 +- conda: https://prefix.dev/conda-forge/osx-arm64/gmpy2-2.2.1-py313h6d8efe1_1.conda + sha256: a2cef020e8b0bad48ee2cc47c0bcc368f58da6b26eb41fe37a0da8cf968082b4 + md5: 696a6638cc1059b4da6b8b16dc81988e + depends: + - __osx >=11.0 + - gmp >=6.3.0,<7.0a0 + - mpc >=1.3.1,<2.0a0 + - mpfr >=4.2.1,<5.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: LGPL-3.0-or-later + license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping + size: 162864 + timestamp: 1756739927182 +- conda: https://prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python license: MIT license_family: MIT purls: - - pkg:pypi/h2?source=hash-mapping - size: 52000 - timestamp: 1733298867359 -- conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5 - md5: 2aa5ff7fa34a81b9196532c84c10d865 + - pkg:pypi/h2?source=compressed-mapping + size: 95967 + timestamp: 1756364871835 +- conda: https://prefix.dev/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/hpack?source=hash-mapping - size: 29412 - timestamp: 1733299296857 -- conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b - md5: 566e75c90c1d0c8c459eb0ad9833dc7a + size: 30731 + timestamp: 1737618390337 +- conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/hyperframe?source=hash-mapping - size: 17239 - timestamp: 1733298862681 + size: 17397 + timestamp: 1737618427549 +- conda: https://prefix.dev/conda-forge/noarch/hypothesis-6.138.15-pyha770c72_0.conda + sha256: f5dae3728085968adb13ad819286e444e449bdd721471b1e8be69fca1e0ff205 + md5: ea0b6fac22b954644123f80163871d6f + depends: + - attrs >=22.2.0 + - click >=7.0 + - exceptiongroup >=1.0.0 + - python >=3.10 + - setuptools + - sortedcontainers >=2.1.0,<3.0.0 + license: MPL-2.0 + purls: + - pkg:pypi/hypothesis?source=hash-mapping + size: 379661 + timestamp: 1757320479923 - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e md5: 8b189310083baabfb622af68fd9d3ae3 @@ -4504,6 +6686,16 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 +- conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7 + md5: d68d48a3060eb5abdc1cdc8e2a3a5966 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + size: 11761697 + timestamp: 1720853679409 - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 md5: 5eb22c1d7b3fc4abb50d92d621583137 @@ -4514,18 +6706,6 @@ packages: purls: [] size: 11857802 timestamp: 1720853997952 -- conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - sha256: e8ea11b8e39a98a9c34efb5c21c3fca718e31e1f41fd9ae5f6918b8eb402da59 - md5: c1b0f663ff141265d1be1242259063f0 - depends: - - python >=3.9 - - ukkonen - license: MIT - license_family: MIT - purls: - - pkg:pypi/identify?source=hash-mapping - size: 78415 - timestamp: 1736026672643 - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 md5: 39a4f67be3286c86d696df570b1201b7 @@ -4548,18 +6728,19 @@ packages: - pkg:pypi/imagesize?source=hash-mapping size: 10164 timestamp: 1656939625410 -- conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda - sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9 - md5: 315607a3030ad5d5227e76e0733798ff +- conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 depends: - python >=3.9 - - zipp >=0.5 + - zipp >=3.20 + - python license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/importlib-metadata?source=hash-mapping - size: 28623 - timestamp: 1733223207185 + size: 34641 + timestamp: 1747934053147 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca md5: 6837f3eff7dcea42ecd714ce1ac2b108 @@ -4579,1321 +6760,1264 @@ packages: purls: [] size: 1852356 timestamp: 1723739573141 -- conda: https://prefix.dev/conda-forge/noarch/ipython-8.31.0-pyh707e725_0.conda - sha256: e10d1172ebf950f8f087f0d9310d215f5ddb8f3ad247bfa58ab5a909b3cabbdc - md5: 1d7fcd803dfa936a6c3bd051b293241c +- conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyh6be1c34_0.conda + sha256: 658c547dafb10cd0989f2cdf72f8ee9fe8f66240307b64555ee43f6908e9d0ad + md5: aec1868dd4cbe028b2c8cb11377895a6 depends: - - __unix + - __win + - colorama - decorator - exceptiongroup + - ipython_pygments_lexers - jedi >=0.16 - matplotlib-inline - - pexpect >4.3 - pickleshare - prompt-toolkit >=3.0.41,<3.1.0 - pygments >=2.4.0 - - python >=3.10 + - python >=3.11 - stack_data - traitlets >=5.13.0 - typing_extensions >=4.6 + - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/ipython?source=hash-mapping - size: 600761 - timestamp: 1734788248334 -- conda: https://prefix.dev/conda-forge/noarch/ipython-8.31.0-pyh7428d3b_0.conda - sha256: bce70d36099dbb2c0a4b9cb7c3f2a8742db94a63aea329a75688d6b93ae07ebb - md5: 749ce640fcb691daa2579344cca50f6e + size: 630157 + timestamp: 1756474536497 +- conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda + sha256: e9ca009d3aab9d8a85f0241d6ada2c7fbc84072008e95f803fa59da3294aa863 + md5: c0916cc4b733577cd41df93884d857b0 depends: - - __win - - colorama + - __unix + - pexpect >4.3 - decorator - exceptiongroup + - ipython_pygments_lexers - jedi >=0.16 - matplotlib-inline - pickleshare - prompt-toolkit >=3.0.41,<3.1.0 - pygments >=2.4.0 - - python >=3.10 + - python >=3.11 - stack_data - traitlets >=5.13.0 - typing_extensions >=4.6 + - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/ipython?source=hash-mapping - size: 601358 - timestamp: 1734788456856 -- conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda - sha256: 6ebf6e83c2d449760ad5c5cc344711d6404f9e3cf6952811b8678aca5a4ab01f - md5: ef7dc847f19fe4859d5aaa33385bf509 + size: 630826 + timestamp: 1756474504536 +- conda: https://prefix.dev/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 + md5: bd80ba060603cc228d9d81c257093119 + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-pygments-lexers?source=hash-mapping + size: 13993 + timestamp: 1737123723464 +- conda: https://prefix.dev/conda-forge/noarch/isort-6.0.1-pyhd8ed1ab_1.conda + sha256: e1d0e81e3c3da5d7854f9f57ffb89d8f4505bb64a2f05bb01d78eff24344a105 + md5: c25d1a27b791dab1797832aafd6a3e9a depends: - python >=3.9,<4.0 - - setuptools license: MIT license_family: MIT purls: - pkg:pypi/isort?source=hash-mapping - size: 73545 - timestamp: 1733236278052 -- conda: https://prefix.dev/conda-forge/noarch/jax-0.4.35-pyhd8ed1ab_1.conda - sha256: 665e96d8a8144f33ea9733746ee3a9c913dd5fa460fb2095592f935cab0753a8 - md5: 8fe7d2b5328189557c539e8a82af00e9 + size: 75118 + timestamp: 1746190379093 +- conda: https://prefix.dev/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + sha256: 573a5582dfba84a8f67c351b6218cb9579cb8d0f6d4b4186a806852111d4a6f1 + md5: bd364feb12c744cf5c60e1e5b586171b depends: - importlib-metadata >=4.6 - - jaxlib >=0.4.34,<=0.4.35 - - ml_dtypes >=0.4.0 - - numpy >=1.24 - - opt-einsum + - jaxlib >=0.6.0,<=0.6.0 + - ml_dtypes >=0.5.0 + - numpy >=1.25 + - opt_einsum + - python >=3.10 + - scipy >=1.11.1 + constrains: + - cudnn >=9.8,<10.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/jax?source=hash-mapping + size: 1538293 + timestamp: 1748688029463 +- conda: https://prefix.dev/conda-forge/noarch/jax-0.6.2-pyhd8ed1ab_0.conda + sha256: cd87eb6872d5429647506daa1c50c0e0459eb04aba39c914dcbbacf9b07895fa + md5: db9b3178b5b7b19a0917a350802518fe + depends: + - importlib-metadata >=4.6 + - jaxlib >=0.6.2,<=0.6.2 + - ml_dtypes >=0.5.0 + - numpy >=1.26 + - opt_einsum - python >=3.10 - - scipy >=1.10 + - scipy >=1.12 + constrains: + - cudnn >=9.8,<10.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/jax?source=hash-mapping + size: 1797258 + timestamp: 1753574279311 +- conda: https://prefix.dev/conda-forge/noarch/jax-0.7.0-pyhd8ed1ab_0.conda + sha256: c9dfa0d2fd5e42de88c8d2f62f495b6747a7d08310c4bbf94d0fa7e0dcaad573 + md5: cf9f37f6340f024ff8e3c3666de41bf5 + depends: + - importlib-metadata >=4.6 + - jaxlib >=0.7.0,<=0.7.0 + - ml_dtypes >=0.5.0 + - numpy >=1.26 + - opt_einsum + - python >=3.11 + - scipy >=1.12 constrains: - - cudnn >=9.2.1.18 + - cudnn >=9.8,<10.0 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/jax?source=hash-mapping - size: 1430482 - timestamp: 1733731330348 -- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.4.35-cpu_py310h430587c_0.conda - sha256: 5b62a246c89cd7f945aee8e3e9a30c7da33cebace23567b8ba25316ff65925b8 - md5: ab1fcddcb6dd3a5d38379c2478486153 + size: 1836006 + timestamp: 1753869796115 +- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py310hec873cc_200.conda + sha256: 5a52619f5e6d40d5c8e8223a5ec113d5bb097456656bc5668ab24df6b75f69ae + md5: 1b39986ae9b1bcfddc720ef10bb67420 depends: + - __cuda - __glibc >=2.17,<3.0.a0 + - cuda-cudart >=12.6.77,<13.0a0 + - cuda-cupti >=12.6.80,<13.0a0 + - cuda-cupti-dev + - cuda-nvcc-tools + - cuda-nvtx >=12.6.77,<13.0a0 + - cuda-version >=12.6,<13 + - cudnn >=9.10.1.4,<10.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 + - libcublas >=12.6.4.1,<13.0a0 + - libcublas-dev + - libcufft >=11.3.0.4,<12.0a0 + - libcufft-dev + - libcurand >=10.3.7.77,<11.0a0 + - libcurand-dev + - libcusolver >=11.7.1.2,<12.0a0 + - libcusolver-dev + - libcusparse >=12.5.4.2,<13.0a0 + - libcusparse-dev - libgcc >=13 - - libgrpc >=1.67.1,<1.68.0a0 + - libgrpc >=1.71.0,<1.72.0a0 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - ml_dtypes >=0.2.0 + - nccl >=2.26.6.1,<3.0a0 - numpy >=1.19,<3 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - scipy >=1.9 constrains: - - jax >=0.4.35 + - jax >=0.6.0 license: Apache-2.0 license_family: APACHE purls: + - pkg:pypi/jax-cuda12-pjrt?source=hash-mapping + - pkg:pypi/jax-cuda12-plugin?source=hash-mapping - pkg:pypi/jaxlib?source=hash-mapping - size: 58074734 - timestamp: 1733953456717 -- conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.4.35-cpu_py310h604521f_0.conda - sha256: 2ce46bea8bb00296197ab797e40ecdcbc5c644ad8f9b4138105a7545f49bda11 - md5: e4262fb94e8b250726bd302056a88cbc + size: 146820753 + timestamp: 1748663708635 +- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py313hb1b46e1_200.conda + sha256: a844966afa3cf9af2ec3a08fd31f605cf10db14217c93ff9877308718adfcf83 + md5: 8d7e109d11f32a6aab5fc954970f8687 depends: - - __osx >=11.0 + - __cuda + - __glibc >=2.17,<3.0.a0 + - cuda-cudart >=12.6.77,<13.0a0 + - cuda-cupti >=12.6.80,<13.0a0 + - cuda-cupti-dev + - cuda-nvcc-tools + - cuda-nvtx >=12.6.77,<13.0a0 + - cuda-version >=12.6,<13 + - cudnn >=9.10.1.4,<10.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libcxx >=17 - - libgrpc >=1.67.1,<1.68.0a0 + - libabseil >=20250127.1,<20250128.0a0 + - libcublas >=12.6.4.1,<13.0a0 + - libcublas-dev + - libcufft >=11.3.0.4,<12.0a0 + - libcufft-dev + - libcurand >=10.3.7.77,<11.0a0 + - libcurand-dev + - libcusolver >=11.7.1.2,<12.0a0 + - libcusolver-dev + - libcusparse >=12.5.4.2,<13.0a0 + - libcusparse-dev + - libgcc >=13 + - libgrpc >=1.71.0,<1.72.0a0 + - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - ml_dtypes >=0.2.0 - - numpy >=1.19,<3 - - openssl >=3.4.0,<4.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - nccl >=2.26.6.1,<3.0a0 + - numpy >=1.21,<3 + - openssl >=3.5.0,<4.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - scipy >=1.9 constrains: - - jax >=0.4.35 + - jax >=0.6.0 license: Apache-2.0 license_family: APACHE purls: + - pkg:pypi/jax-cuda12-pjrt?source=hash-mapping + - pkg:pypi/jax-cuda12-plugin?source=hash-mapping - pkg:pypi/jaxlib?source=hash-mapping - size: 45461434 - timestamp: 1733950221343 -- conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 - md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 - depends: - - parso >=0.8.3,<0.9.0 - - python >=3.9 - license: Apache-2.0 AND MIT - purls: - - pkg:pypi/jedi?source=hash-mapping - size: 843646 - timestamp: 1733300981994 -- conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3 - md5: 2752a6ed44105bfb18c9bef1177d9dcd - depends: - - markupsafe >=2.0 - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jinja2?source=hash-mapping - size: 112561 - timestamp: 1734824044952 -- conda: https://prefix.dev/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb - md5: 30186d27e2c9fa62b45fb1476b7200e3 - depends: - - libgcc-ng >=10.3.0 - license: LGPL-2.1-or-later - purls: [] - size: 117831 - timestamp: 1646151697040 -- conda: https://prefix.dev/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 - md5: 3f43953b7d3fb3aaa1d0d0723d91e368 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1370023 - timestamp: 1719463201255 -- conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b - md5: c6dc8a0fdec13a0565936655c33069a1 - depends: - - __osx >=11.0 - - libcxx >=16 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1155530 - timestamp: 1719463474401 -- conda: https://prefix.dev/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 - md5: 31aec030344e962fbd7dbbbbd68e60a9 - depends: - - openssl >=3.3.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 712034 - timestamp: 1719463874284 -- conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 - md5: 51bb7010fc86f70eee639b4bb7a894f5 - depends: - - libgcc-ng >=12 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - license: MIT - license_family: MIT - purls: [] - size: 245247 - timestamp: 1701647787198 -- conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 - md5: 66f6c134e76fe13cce8a9ea5814b5dd5 - depends: - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - license: MIT - license_family: MIT - purls: [] - size: 211959 - timestamp: 1701647962657 -- conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 - md5: d3592435917b62a8becff3a60db674f6 - depends: - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 507632 - timestamp: 1701648249706 -- conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe - md5: 048b02e3962f066da18efe3a21b77672 + size: 146979645 + timestamp: 1748672910601 +- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.2-cpu_py310h772e2ea_1.conda + sha256: c10315207f6050763ea4a645a8c1eb6593bb894424cfee0b169993b894af0113 + md5: 2441cb89b4f7d61ec5d334fece18ebf2 depends: - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=14 + - libgrpc >=1.71.0,<1.72.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.21,<3 + - openssl >=3.5.1,<4.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - scipy >=1.9 constrains: - - binutils_impl_linux-64 2.43 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 669211 - timestamp: 1729655358674 -- conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 - md5: 76bbff344f0134279f225174e9064c8f - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 281798 - timestamp: 1657977462600 -- conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 - md5: de462d5aacda3b30721b512c5da4e742 - depends: - - libcxx >=13.0.1 + - jax >=0.6.2 license: Apache-2.0 - license_family: Apache - purls: [] - size: 215721 - timestamp: 1657977558796 -- conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 - md5: 1900cb3cab5055833cfddb0ba233b074 - depends: - - vc >=14.2,<15 - - vs2015_runtime >=14.29.30037 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 194365 - timestamp: 1657977692274 -- conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - sha256: 143a586aa67d50622ef703de57b9d43f44945836d6568e0e7aa174bd8c45e0d4 - md5: 488f260ccda0afaf08acb286db439c2f + license_family: APACHE + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 66549761 + timestamp: 1753445233908 +- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.7.0-cpu_py313h9430eff_0.conda + sha256: 943aa1d77bbdcf520f346f80d04c73650069b2eb5748a8acd2f982726c9eef0e + md5: ccaf7b7827187035057a9d3308f7d017 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=14 + - libgrpc >=1.71.0,<1.72.0a0 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.23,<3 + - openssl >=3.5.1,<4.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - scipy >=1.9 constrains: - - libabseil-static =20240722.0=cxx17* - - abseil-cpp =20240722.0 + - jax >=0.7.0 license: Apache-2.0 - license_family: Apache - purls: [] - size: 1311599 - timestamp: 1736008414161 -- conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - sha256: 05fa5e5e908962b9c5aba95f962e2ca81d9599c4715aebe5e4ddb72b309d1770 - md5: c2d95bd7aa8d564a9bd7eca5e571a5b3 + license_family: APACHE + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 67288916 + timestamp: 1753586883063 +- conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.6.2-cpu_py310h7772592_1.conda + sha256: 6dd2ed914c85058841709ac01ff3dbda73f97e9b6e21671a481d691d11c7c9b1 + md5: 196bf1716a504fa7a6f01cf2e4e7a14e depends: - - __osx >=11.0 - - libcxx >=18 + - __osx >=10.15 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 + - libgrpc >=1.71.0,<1.72.0a0 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.21,<3 + - openssl >=3.5.1,<4.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - scipy >=1.9 constrains: - - libabseil-static =20240722.0=cxx17* - - abseil-cpp =20240722.0 + - jax >=0.6.2 license: Apache-2.0 - license_family: Apache - purls: [] - size: 1178260 - timestamp: 1736008642885 -- conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - sha256: 846eacff96d36060fe5f7b351e4df6fafae56bf34cc6426497f12b5c13f317cf - md5: c57ee7f404d1aa84deb3e15852bec6fa + license_family: APACHE + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 64437433 + timestamp: 1753407039736 +- conda: https://prefix.dev/conda-forge/osx-64/jaxlib-0.7.0-cpu_py313h9e1e12b_0.conda + sha256: 61995d445fddbaf446a8bd4c4914ff2dcee923e4eea5df53c6270739c81ed6b6 + md5: 4f1359086b49bf7bb2e02500b38b4ce4 depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=10.15 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 + - libgrpc >=1.71.0,<1.72.0a0 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.23,<3 + - openssl >=3.5.1,<4.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - scipy >=1.9 constrains: - - abseil-cpp =20240722.0 - - libabseil-static =20240722.0=cxx17* + - jax >=0.7.0 license: Apache-2.0 - license_family: Apache - purls: [] - size: 1784929 - timestamp: 1736008778245 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda - build_number: 8 - sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 - md5: 1c9caae53b14a385b59e87687adad2d6 + license_family: APACHE + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 65494147 + timestamp: 1753579234092 +- conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.6.2-cpu_py310h2ee8168_1.conda + sha256: 7ac18970ab23c8921d8184f3bb560e007ffe5263e7d399267bdacb7501fcd8d8 + md5: 8b625a3dbb93b0696f0d60a180b51f53 depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - gflags >=2.2.2,<2.3.0a0 - - glog >=0.7.1,<0.8.0a0 + - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc >=13 - - libgoogle-cloud >=2.33.0,<2.34.0a0 - - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 - - libre2-11 >=2024.7.2 - - libstdcxx >=13 - - libutf8proc >=2.9.0,<2.10.0a0 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 + - libgrpc >=1.71.0,<1.72.0a0 - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.0.3,<2.0.4.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.6,<1.6.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.21,<3 + - openssl >=3.5.1,<4.0a0 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + - scipy >=1.9 constrains: - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu + - jax >=0.6.2 license: Apache-2.0 license_family: APACHE - purls: [] - size: 8801586 - timestamp: 1736610546493 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda - build_number: 8 - sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f - md5: fdc79871e6c243b819497337215416d9 + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 52943650 + timestamp: 1753406821244 +- conda: https://prefix.dev/conda-forge/osx-arm64/jaxlib-0.7.0-cpu_py313h8fc57d6_1.conda + sha256: 79dee64c5f3ee6f0461ea29773bdc13ce041e228e6b18c792146a47a0cf3f9ef + md5: c455307ad223cd115159851dfd17ac8a depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - - azure-core-cpp >=1.14.0,<1.14.1.0a0 - - azure-identity-cpp >=1.10.0,<1.10.1.0a0 - - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 - - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=18 - - libgoogle-cloud >=2.33.0,<2.34.0a0 - - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 - - libre2-11 >=2024.7.2 - - libutf8proc >=2.9.0,<2.10.0a0 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 + - libgrpc >=1.71.0,<1.72.0a0 - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.0.3,<2.0.4.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.6,<1.6.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.23,<3 + - openssl >=3.5.2,<4.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - scipy >=1.9 constrains: - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu + - jax >=0.7.0 license: Apache-2.0 - license_family: APACHE - purls: [] - size: 5497383 - timestamp: 1736608604724 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda - build_number: 8 - sha256: 9323e933e603b15bca2231ccda45849a80e7cf415c2872c194286e84e4a09290 - md5: 8d18b506794c1e583998a6d54054145b + purls: + - pkg:pypi/jaxlib?source=hash-mapping + size: 53862197 + timestamp: 1757348446613 +- conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 + md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.9 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/jedi?source=hash-mapping + size: 843646 + timestamp: 1733300981994 +- conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda + sha256: f1ac18b11637ddadc05642e8185a851c7fab5998c6f5470d716812fae943b2af + md5: 446bd6c8cb26050d528881df495ce646 depends: - - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - - bzip2 >=1.0.8,<2.0a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.11.1,<9.0a0 - - libgoogle-cloud >=2.33.0,<2.34.0a0 - - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 - - libre2-11 >=2024.7.2 - - libutf8proc >=2.9.0,<2.10.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.0.3,<2.0.4.0a0 - - re2 - - snappy >=1.2.1,<1.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.42.34433 - - zstd >=1.5.6,<1.6.0a0 - constrains: - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 5248568 - timestamp: 1736611659169 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda - build_number: 8 - sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d - md5: 544759904898499f634f8f88a9907f88 + - markupsafe >=2.0 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping + size: 112714 + timestamp: 1741263433881 +- conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + sha256: 1a620f27d79217c1295049ba214c2f80372062fd251b569e9873d4a953d27554 + md5: 0be7c6e070c19105f966d3758448d018 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h9d9f30d_8_cpu - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: APACHE + constrains: + - binutils_impl_linux-64 2.44 + license: GPL-3.0-only + license_family: GPL purls: [] - size: 611558 - timestamp: 1736610592458 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda - build_number: 8 - sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e - md5: 8db96829f8e427167f450c7467a1ba44 - depends: - - __osx >=11.0 - - libarrow 18.1.0 hf3eb8e5_8_cpu - - libcxx >=18 - license: Apache-2.0 - license_family: APACHE + size: 676044 + timestamp: 1752032747103 +- conda: https://prefix.dev/conda-forge/linux-64/lefthook-1.12.4-hfc2019e_0.conda + sha256: c5c4a7fa7fd1c5231b378097a6983642d58e840dd5f3189e80012bd19644e419 + md5: fd2c2d4188ac456189eee8bd915eceb1 + license: MIT + license_family: MIT purls: [] - size: 484442 - timestamp: 1736608695654 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda - build_number: 8 - sha256: 43470dc8369d6ffab8699780c744ee75d04989641c0dc60afcf68db0213c4d5c - md5: 7e11f505623fda50814299f0c066b7e9 - depends: - - libarrow 18.1.0 hb928929_8_cpu - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.42.34433 - license: Apache-2.0 - license_family: APACHE + size: 5392091 + timestamp: 1757095568751 +- conda: https://prefix.dev/conda-forge/osx-64/lefthook-1.12.4-hccc6df8_0.conda + sha256: d87284f95af19dbfb40d43738c9fbc45370112631bf59c96dedf4e711773a1cb + md5: d4a5d68dc739d3427dc50b8da0c8b1f6 + constrains: + - __osx >=10.12 + license: MIT + license_family: MIT purls: [] - size: 446853 - timestamp: 1736611713691 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda - build_number: 8 - sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 - md5: 894a5ed78728b77c997fefeee222ac4d + size: 5443887 + timestamp: 1757095596510 +- conda: https://prefix.dev/conda-forge/osx-arm64/lefthook-1.12.4-h820172f_0.conda + sha256: 4924a5356d821cb9b81575881e347d402e5c52b2b7798b7045d13d93c552bb7b + md5: fc937954510e80da9a2bfda9e481826e + license: MIT + license_family: MIT + purls: [] + size: 4902152 + timestamp: 1757095695724 +- conda: https://prefix.dev/conda-forge/win-64/lefthook-1.12.4-h11686cb_0.conda + sha256: 08ca9210fafe0702ecb7cff445bf000234a73a3a2c0bfa0a33c22f65c046d7fb + md5: d089abd9b5abcdfe99a5938d139dec55 + license: MIT + license_family: MIT + purls: [] + size: 5327777 + timestamp: 1757095611671 +- conda: https://prefix.dev/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 + md5: 00290e549c5c8a32cc271020acc9ec6b depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h9d9f30d_8_cpu - - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 + constrains: + - abseil-cpp =20250127.1 + - libabseil-static =20250127.1=cxx17* license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 588032 - timestamp: 1736610711976 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda - build_number: 8 - sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f - md5: 7b3736f49b3ba299b7799aeb448cb830 + size: 1325007 + timestamp: 1742369558286 +- conda: https://prefix.dev/conda-forge/osx-64/libabseil-20250127.1-cxx17_h0e468a2_0.conda + sha256: 8c43a7daa4df04f66d08e6a6cd2f004fc84500bf8c0c75dc9ee633b34c2a01be + md5: b2004ae68003d2ef310b49847b911e4b depends: - - __osx >=11.0 - - libarrow 18.1.0 hf3eb8e5_8_cpu - - libarrow-acero 18.1.0 hf07054f_8_cpu + - __osx >=10.13 - libcxx >=18 - - libparquet 18.1.0 h636d7b7_8_cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 491001 - timestamp: 1736609758514 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda - build_number: 8 - sha256: 34cd6707c28efbf5cabef6e57e19e0aedcb670ec559e95885704872c7b42077c - md5: b93e516a5a780f722e9ed9b3d12c9213 - depends: - - libarrow 18.1.0 hb928929_8_cpu - - libarrow-acero 18.1.0 h7d8d6a5_8_cpu - - libparquet 18.1.0 ha850022_8_cpu - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.42.34433 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 434392 - timestamp: 1736611904846 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - build_number: 8 - sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 - md5: 46eaf81238da6f3ffab1f3ffdcee382e - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h9d9f30d_8_cpu - - libarrow-acero 18.1.0 hcb10f89_8_cpu - - libarrow-dataset 18.1.0 hcb10f89_8_cpu - - libgcc >=13 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libstdcxx >=13 + constrains: + - libabseil-static =20250127.1=cxx17* + - abseil-cpp =20250127.1 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 521707 - timestamp: 1736610765240 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - build_number: 8 - sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 - md5: f67eb19d22ba355cced8c86073ad49b1 + size: 1177855 + timestamp: 1742369859708 +- conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20250127.1-cxx17_h07bc746_0.conda + sha256: 9884f855bdfd5cddac209df90bdddae8b3a6d8accfd2d3f52bc9db2f9ebb69c9 + md5: 26aabb99a8c2806d8f617fd135f2fc6f depends: - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hf3eb8e5_8_cpu - - libarrow-acero 18.1.0 hf07054f_8_cpu - - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libprotobuf >=5.28.3,<5.28.4.0a0 + constrains: + - abseil-cpp =20250127.1 + - libabseil-static =20250127.1=cxx17* license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: [] - size: 452161 - timestamp: 1736609917123 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda - build_number: 8 - sha256: 4ddb7ac8c2f7caf9a357696c0ab448884480d4cd7d72516dc9b63b0833c5abb2 - md5: f4b70d99b8e7e1334735a215205b686b + size: 1192962 + timestamp: 1742369814061 +- conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda + sha256: 78790771f44e146396d9ae92efbe1022168295afd8d174f653a1fa16f0f0fa32 + md5: d6a4cd236fc1c69a1cfc9698fb5e391f depends: - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb928929_8_cpu - - libarrow-acero 18.1.0 h7d8d6a5_8_cpu - - libarrow-dataset 18.1.0 h7d8d6a5_8_cpu - - libprotobuf >=5.28.3,<5.28.4.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - - vc14_runtime >=14.42.34433 + - vc14_runtime >=14.42.34438 + constrains: + - libabseil-static =20250512.1=cxx17* + - abseil-cpp =20250512.1 license: Apache-2.0 - license_family: APACHE + license_family: Apache + purls: [] + size: 1615210 + timestamp: 1750194549591 +- conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_h59b9bed_openblas.conda + build_number: 35 + sha256: 83d0755acd486660532003bc2562223504b57732bc7e250985391ce335692cf7 + md5: eaf80af526daf5745295d9964c2bd3cf + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - blas 2.135 openblas + - liblapack 3.9.0 35*_openblas + - libcblas 3.9.0 35*_openblas + - liblapacke 3.9.0 35*_openblas + - mkl <2025 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 364597 - timestamp: 1736611987931 -- conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda - build_number: 26 - sha256: 11cc33993e1865e6caa3e05f117effb3f7cbacc632e5adc572ffd36b4fa47241 - md5: 60463d3ec26e0860bfc7fc1547e005ef + size: 16937 + timestamp: 1757002815691 +- conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-35_hfdb39a5_mkl.conda + build_number: 35 + sha256: 038c7bf7134147966b4d785f1e8afed0728e440d190e21b1963c2b3713287bd3 + md5: 9fedd782400297fa574e739146f04e34 depends: - mkl >=2024.2.2,<2025.0a0 constrains: - - liblapack 3.9.0 26_linux64_mkl - - blas * mkl - - libcblas 3.9.0 26_linux64_mkl - - liblapacke 3.9.0 26_linux64_mkl + - liblapacke 3.9.0 35*_mkl + - blas 2.135 mkl + - liblapack 3.9.0 35*_mkl + - libcblas 3.9.0 35*_mkl track_features: - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 16766 - timestamp: 1734432542498 -- conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - build_number: 26 - sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c - md5: ac52800af2e0c0e7dac770b435ce768a + size: 17387 + timestamp: 1757002960950 +- conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-20_osx64_mkl.conda + build_number: 20 + sha256: 808742b95f44dcc7c546e5c3bb7ed378b08aeaef3ee451d31dfe26cdf76d109f + md5: 160fdc97a51d66d51dc782fb67d35205 depends: - - libopenblas >=0.3.28,<0.3.29.0a0 - - libopenblas >=0.3.28,<1.0a0 + - mkl >=2023.2.0,<2024.0a0 constrains: - - libcblas 3.9.0 26_linux64_openblas - - liblapack 3.9.0 26_linux64_openblas - - liblapacke 3.9.0 26_linux64_openblas - - blas * openblas + - blas * mkl + - libcblas 3.9.0 20_osx64_mkl + - liblapack 3.9.0 20_osx64_mkl + - liblapacke 3.9.0 20_osx64_mkl + track_features: + - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 16393 - timestamp: 1734432564346 -- conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - build_number: 26 - sha256: 597f9c3779caa979c8c6abbb3ba8c7191b84e1a910d6b0d10e5faf35284c450c - md5: 21be102c9ae80a67ba7de23b129aa7f6 + size: 15075 + timestamp: 1700568635315 +- conda: https://prefix.dev/conda-forge/osx-64/libblas-3.9.0-34_h7f60823_openblas.conda + build_number: 34 + sha256: ea5d0341df78f7f2d6fe3a03a9b7327958d9e21b4f2d13ef0eddadc335999232 + md5: 3f29ba70f912e56d4be6b55bc213a082 depends: - - libopenblas >=0.3.28,<0.3.29.0a0 - - libopenblas >=0.3.28,<1.0a0 + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 constrains: - - liblapack 3.9.0 26_osxarm64_openblas - - liblapacke 3.9.0 26_osxarm64_openblas - - libcblas 3.9.0 26_osxarm64_openblas - - blas * openblas + - liblapacke 3.9.0 34*_openblas + - mkl <2025 + - libcblas 3.9.0 34*_openblas + - liblapack 3.9.0 34*_openblas + - blas 2.134 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 16714 - timestamp: 1734433054681 -- conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - build_number: 26 - sha256: d631993a5cf5b8d3201f881084fce7ff6a26cd49883e189bf582cd0b7975c80a - md5: ecfe732dbad1be001826fdb7e5e891b5 + size: 19537 + timestamp: 1754678644797 +- conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-35_h10e41b3_openblas.conda + build_number: 35 + sha256: 52ddab13634559d8fc9c7808c52200613bb3825c6e0708820f5744aa55324702 + md5: 0b59bf8bb0bc16b2c5bdae947a44e1f1 depends: - - mkl 2024.2.2 h66d3029_15 + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 constrains: - - liblapacke 3.9.0 26_win64_mkl - - liblapack 3.9.0 26_win64_mkl - - blas * mkl - - libcblas 3.9.0 26_win64_mkl + - libcblas 3.9.0 35*_openblas + - liblapacke 3.9.0 35*_openblas + - liblapack 3.9.0 35*_openblas + - mkl <2025 + - blas 2.135 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 3733122 - timestamp: 1734432745507 -- conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 - md5: 41b599ed2b02abcfdd84302bff174b23 + size: 17191 + timestamp: 1757003619794 +- conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-35_h5709861_mkl.conda + build_number: 35 + sha256: 4180e7ab27ed03ddf01d7e599002fcba1b32dcb68214ee25da823bac371ed362 + md5: 45d98af023f8b4a7640b1f713ce6b602 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 68851 - timestamp: 1725267660471 -- conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 - md5: d0bf1dff146b799b319ea0434b93f779 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 68426 - timestamp: 1725267943211 -- conda: https://prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c - md5: f7dc9a8f21d74eab46456df301da2972 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 70526 - timestamp: 1725268159739 -- conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf - md5: 9566f0bd264fbd463002e759b8a82401 - depends: - - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.1.0 hb9d3cd8_2 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 32696 - timestamp: 1725267669305 -- conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda - sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 - md5: 55e66e68ce55523a6811633dd1ac74e2 - depends: - - __osx >=11.0 - - libbrotlicommon 1.1.0 hd74edd7_2 - license: MIT - license_family: MIT - purls: [] - size: 28378 - timestamp: 1725267980316 -- conda: https://prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda - sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f - md5: 9bae75ce723fa34e98e239d21d752a7e - depends: - - libbrotlicommon 1.1.0 h2466b09_2 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT + - mkl >=2024.2.2,<2025.0a0 + constrains: + - blas 2.135 mkl + - liblapack 3.9.0 35*_mkl + - libcblas 3.9.0 35*_mkl + - liblapacke 3.9.0 35*_mkl + license: BSD-3-Clause + license_family: BSD purls: [] - size: 32685 - timestamp: 1725268208844 -- conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 - md5: 06f70867945ea6a84d35836af780f1de + size: 66044 + timestamp: 1757003486248 +- conda: https://prefix.dev/conda-forge/linux-64/libcap-2.75-h39aace5_0.conda + sha256: 9c84448305e7c9cc44ccec7757cf5afcb5a021f4579aa750a1fa6ea398783950 + md5: c44c16d6976d2aebbd65894d7741e67e depends: - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.1.0 hb9d3cd8_2 + - attr >=2.5.1,<2.6.0a0 - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 281750 - timestamp: 1725267679782 -- conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda - sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 - md5: 4f3a434504c67b2c42565c0b85c1885c - depends: - - __osx >=11.0 - - libbrotlicommon 1.1.0 hd74edd7_2 - license: MIT - license_family: MIT - purls: [] - size: 279644 - timestamp: 1725268003553 -- conda: https://prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda - sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 - md5: 85741a24d97954a991e55e34bc55990b - depends: - - libbrotlicommon 1.1.0 h2466b09_2 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - purls: [] - size: 245929 - timestamp: 1725268238259 -- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda - build_number: 26 - sha256: 23866eb509e5896b8fcf647e9cef8f0923d5bb378c0dd14b44b94abe1b24c4d7 - md5: 760c109bfe25518d6f9af51d7af8b9f3 - depends: - - libblas 3.9.0 26_linux64_mkl - constrains: - - liblapack 3.9.0 26_linux64_mkl - - blas * mkl - - liblapacke 3.9.0 26_linux64_mkl - track_features: - - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 16269 - timestamp: 1734432548754 -- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda - build_number: 26 - sha256: 9c74e536c9bc868e356ffd43f81c2cb398aec84b40fcadc312315b164a5500ee - md5: ebcc5f37a435aa3c19640533c82f8d76 + size: 120375 + timestamp: 1741176638215 +- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_h372d94f_mkl.conda + build_number: 35 + sha256: f565da198a837b0d19ede6affedc0c2cf743c193606f800c7a98f0909b290d31 + md5: 25fab7e2988299928dea5939d9958293 depends: - - libblas 3.9.0 26_linux64_openblas + - libblas 3.9.0 35_hfdb39a5_mkl constrains: - - liblapack 3.9.0 26_linux64_openblas - - liblapacke 3.9.0 26_linux64_openblas - - blas * openblas + - blas 2.135 mkl + - liblapack 3.9.0 35*_mkl + - liblapacke 3.9.0 35*_mkl + track_features: + - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 16336 - timestamp: 1734432570482 -- conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - build_number: 26 - sha256: 27a29ef6b2fd2179bc3a0bb9db351f078ba140ca10485dca147c399639f84c93 - md5: a0e9980fe12d42f6d0c0ec009f67e948 + size: 17021 + timestamp: 1757002973897 +- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-35_he106b2a_openblas.conda + build_number: 35 + sha256: 6f296f1567a7052c0f8b9527f74cfebc5418dbbae6dcdbae8659963f8ae7f48e + md5: e62d58d32431dabed236c860dfa566ca depends: - - libblas 3.9.0 26_osxarm64_openblas + - libblas 3.9.0 35_h59b9bed_openblas constrains: - - liblapack 3.9.0 26_osxarm64_openblas - - liblapacke 3.9.0 26_osxarm64_openblas - - blas * openblas + - blas 2.135 openblas + - liblapack 3.9.0 35*_openblas + - liblapacke 3.9.0 35*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 16628 - timestamp: 1734433061517 -- conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-26_win64_mkl.conda - build_number: 26 - sha256: 66699c4f84fd36b67a34a7ac59fb86e73ee0c5b3c3502441041c8dd51f0a7d49 - md5: 652f3adcb9d329050a325416edb14246 + size: 16900 + timestamp: 1757002826333 +- conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-20_osx64_mkl.conda + build_number: 20 + sha256: a35e3c8f0efee2bee8926cbbf23dcb36c9cfe3100690af3b86f933bab26c4eeb + md5: 51089a4865eb4aec2bc5c7468bd07f9f depends: - - libblas 3.9.0 26_win64_mkl + - libblas 3.9.0 20_osx64_mkl constrains: - - liblapacke 3.9.0 26_win64_mkl - - liblapack 3.9.0 26_win64_mkl - blas * mkl + - liblapack 3.9.0 20_osx64_mkl + - liblapacke 3.9.0 20_osx64_mkl + track_features: + - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 3732146 - timestamp: 1734432785653 -- conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - md5: c965a5aa0d5c1c37ffc62dff36e28400 + size: 14694 + timestamp: 1700568672081 +- conda: https://prefix.dev/conda-forge/osx-64/libcblas-3.9.0-34_hff6cab4_openblas.conda + build_number: 34 + sha256: 393e24b890009d4d4ace5531d39adfd9be3b97040653f6febbb74311dad84146 + md5: 0f6bf5f39b2301a165389e3624f0c297 depends: - - libgcc-ng >=9.4.0 - - libstdcxx-ng >=9.4.0 + - libblas 3.9.0 34_h7f60823_openblas + constrains: + - liblapacke 3.9.0 34*_openblas + - liblapack 3.9.0 34*_openblas + - blas 2.134 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 20440 - timestamp: 1633683576494 -- conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 - md5: 32bd82a6a625ea6ce090a81c3d34edeb + size: 19518 + timestamp: 1754678655239 +- conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-35_hb3479ef_openblas.conda + build_number: 35 + sha256: dfd8dd4eea94894a01c1e4d9a409774ad2b71f77e713eb8c0dc62bb47abe2f0b + md5: 7f8a6b52d39bde47c6f2d3ef96bd5e68 depends: - - libcxx >=11.1.0 + - libblas 3.9.0 35_h10e41b3_openblas + constrains: + - liblapacke 3.9.0 35*_openblas + - blas 2.135 openblas + - liblapack 3.9.0 35*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18765 - timestamp: 1633683992603 -- conda: https://prefix.dev/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e - md5: cd4cc2d0c610c8cb5419ccc979f2d6ce + size: 17163 + timestamp: 1757003634172 +- conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-35_h2a3cdd5_mkl.conda + build_number: 35 + sha256: 88939f6c1b5da75bd26ce663aa437e1224b26ee0dab5e60cecc77600975f397e + md5: 9639091d266e92438582d0cc4cfc8350 depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 + - libblas 3.9.0 35_h5709861_mkl + constrains: + - blas 2.135 mkl + - liblapack 3.9.0 35*_mkl + - liblapacke 3.9.0 35*_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 25694 - timestamp: 1633684287072 -- conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.6.4.1-hbd13f7d_0.conda - sha256: 99ac5f733effaabf30db0f9bf69f8969597834251cbe2ecff4b682806c0ad97b - md5: c7124adbde472a7052dc42e3fc8310db + size: 66398 + timestamp: 1757003514529 +- conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.9.1.4-h9ab20c4_0.conda + sha256: 38bc99de89687ec391750dc603203364bdedfb92c600dcb2916dd3cd8558f5f5 + md5: 605f995d88cdb64714bd9979aadc7cd4 depends: - - __glibc >=2.17,<3.0.a0 + - __glibc >=2.28,<3.0.a0 - cuda-nvrtc - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 267981139 - timestamp: 1732133541796 -- conda: https://prefix.dev/conda-forge/win-64/libcublas-12.6.4.1-he0c23c2_0.conda - sha256: 1638aee3474fabdee03cf02383d1b3be4a5257a427909692adad9cab454a5ff6 - md5: 6ec858b74ad405f09d11ea4ab6251499 + size: 467680700 + timestamp: 1749227622432 +- conda: https://prefix.dev/conda-forge/win-64/libcublas-12.9.1.4-he0c23c2_0.conda + sha256: f0f1fddb9ec6c56b09897d55d75c2e167519199896fe96d60d1316a2d575d302 + md5: 8af1f3e0e73db074ce3eb843a86e0e56 depends: - cuda-nvrtc - - cuda-version >=12.6,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 301165909 - timestamp: 1732133805459 -- conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.3.0.4-hbd13f7d_0.conda - sha256: fc64a2611a15db7baef61efee2059f090b8f866d06b8f65808c8d2ee191cf7db - md5: a296940fa2e0448d066d03bf6b586772 + size: 461266290 + timestamp: 1749228024174 +- conda: https://prefix.dev/conda-forge/linux-64/libcublas-dev-12.9.1.4-h9ab20c4_0.conda + sha256: 935d6b3aa00d3b07f4abc811a9288ef331f344b12e87a85c985d45647e2e36b3 + md5: 0c1751a225676415945cbbbbb41605bc depends: - - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.28,<3.0.a0 + - cuda-crt-dev_linux-64 + - cuda-cudart-dev_linux-64 + - cuda-version >=12.9,<12.10.0a0 + - libcublas 12.9.1.4 h9ab20c4_0 - libgcc >=13 - libstdcxx >=13 + constrains: + - libcublas-static >=12.9.1.4 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 163772747 - timestamp: 1727808246058 -- conda: https://prefix.dev/conda-forge/win-64/libcufft-11.3.0.4-he0c23c2_0.conda - sha256: a72d075612577d3e2c52df0072b73dc29244ddcfde92ea91b7ccfbe847840117 - md5: 6c008913bfc99685ebda59c47dc69200 + size: 93594 + timestamp: 1749228328524 +- conda: https://prefix.dev/conda-forge/linux-64/libcudnn-9.12.0.46-hf7e9902_0.conda + sha256: 915f23a4dcc2a257559a2da01fbe00fff8fbdb09798e16a7821cbd7429fb796f + md5: c33604ca3d16831b5e650b0aca8e96e8 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 440437029 + timestamp: 1755787266178 +- conda: https://prefix.dev/conda-forge/win-64/libcudnn-9.12.0.46-hca898b4_0.conda + sha256: 81f4e65ed425f26a9780303620b786903b0198d666f2b3824ea88d279d2c9dd3 + md5: e9b8e667a63f68319f60c49dd9a61683 depends: - - cuda-version >=12.6,<12.7.0a0 + - cuda-nvrtc + - cuda-version >=12,<13.0a0 + - libcublas - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: LicenseRef-NVIDIA-End-User-License-Agreement + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement purls: [] - size: 163447085 - timestamp: 1727808389092 -- conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.7.77-hbd13f7d_0.conda - sha256: 58ee962804a9df475638e0e83f1116bfbf00a5e4681ed180eb872990d49d7902 - md5: d8b8a1e6e6205447289cd09212c914ac + size: 423284089 + timestamp: 1755787097810 +- conda: https://prefix.dev/conda-forge/linux-64/libcudnn-dev-9.12.0.46-h58dd1b1_0.conda + sha256: 852297a5494cc4fe315a371916b9910597275125882f34fb9604a0ec54580a39 + md5: d641a0db25d7af83eaee0654a76e5064 depends: - - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.6,<12.7.0a0 - - libgcc >=13 - - libstdcxx >=13 + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libcudnn 9.12.0.46 hf7e9902_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudnn-jit-dev <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 43729 + timestamp: 1755787663094 +- conda: https://prefix.dev/conda-forge/win-64/libcudnn-dev-9.12.0.46-hca898b4_0.conda + sha256: 3ad01968d25d67ebf34214e3ded96575b507b9dd457110a661d15850294b8ef1 + md5: c070c54b81a0bb6c8a3051491bf42117 + depends: + - cuda-version >=12,<13.0a0 + - libcudnn 9.12.0.46 hca898b4_0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libcudnn-jit-dev <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 156529 + timestamp: 1755787499860 +- conda: https://prefix.dev/conda-forge/linux-64/libcudss-0.6.0.5-h58dd1b1_0.conda + sha256: 6da3c21c86751846759692f2afdbfb8ed76076530be9e626d0cf9afa809afaee + md5: b347c1d8d190bbaeb8b58ccb986cdd7a + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-version >=12,<13.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudss-commlayer-nccl 0.6.0.5 h4d09622_0 + - libcudss-commlayer-mpi 0.6.0.5 h09b4041_0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 41790488 - timestamp: 1727807993172 -- conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.7.77-he0c23c2_0.conda - sha256: f912ca0d687859b66c7ee8cf3ee7ce470df755e324c3170a8aa7a416b528b011 - md5: 45fed84e6ddab8bfcd93b194fae9626a + size: 36268949 + timestamp: 1753302377524 +- conda: https://prefix.dev/conda-forge/win-64/libcudss-0.6.0.5-hca898b4_0.conda + sha256: d2dc8f68904d232c916903a87caf64055bddcded9545685aac8190fe45827425 + md5: 08481b1082ff6ea0b0b0780ab20b5091 depends: - - cuda-version >=12.6,<12.7.0a0 + - _openmp_mutex >=4.5 + - cuda-version >=12,<13.0a0 + - libcublas + - libgomp >=15.1.0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libcudss-commlayer-nccl 0.6.0.5 0 + - libcudss-commlayer-mpi 0.6.0.5 0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 43727889 - timestamp: 1727808369048 -- conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda - sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906 - md5: 2b3e0081006dc21e8bf53a91c83a055c + size: 35349253 + timestamp: 1753302416732 +- conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.4.1.4-h5888daf_0.conda + sha256: fb4d2b0c23104d2c42400a3f69f311f087a3b71ab9c9c36bb249919e599b7e8d + md5: 2da1a83a3b1951e7e8d1c9c3d1340c41 depends: - __glibc >=2.17,<3.0.a0 - - krb5 >=1.21.3,<1.22.0a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - - libnghttp2 >=1.64.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: curl - license_family: MIT - purls: [] - size: 423011 - timestamp: 1733999897624 -- conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6 - md5: 46d7524cabfdd199bffe63f8f19a552b - depends: - - __osx >=11.0 - - krb5 >=1.21.3,<1.22.0a0 - - libnghttp2 >=1.64.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: curl - license_family: MIT + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 385098 - timestamp: 1734000160270 -- conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda - sha256: 1a67f01da0e35296c6d1fdf6baddc45ad3cc2114132ff4638052eb7cf258aab2 - md5: 071d3f18dba5a6a13c6bb70cdb42678f + size: 162077229 + timestamp: 1749221627451 +- conda: https://prefix.dev/conda-forge/win-64/libcufft-11.4.1.4-he0c23c2_0.conda + sha256: 6dc0a009985d7a984a7748e470a5381af314684baf6d8316b3d323b39b956edf + md5: 4f97f77eb80b22bee668824fc42f0dee depends: - - krb5 >=1.21.3,<1.22.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - cuda-version >=12.9,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: curl - license_family: MIT + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 349553 - timestamp: 1734000095720 -- conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.1.2-hbd13f7d_0.conda - sha256: 3de5457807dd30f9509863324cfbe9d74d20f477dfeb5ed7de68bbb3da4064bd - md5: 035db50d5e949de81e015df72a834e79 + size: 162162326 + timestamp: 1749222051116 +- conda: https://prefix.dev/conda-forge/linux-64/libcufft-dev-11.4.1.4-h5888daf_0.conda + sha256: 8885e88ff6b52e971ab1dadca150a67bbc12b7aa9ea510be81e8a7d7a65ff99e + md5: 62c9c50b9a7f4dc72b7ed82e7233597d depends: - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.6,<12.7.0a0 - - libcublas >=12.6.3.3,<12.7.0a0 - - libcusparse >=12.5.4.2,<12.6.0a0 + - cuda-version >=12.9,<12.10.0a0 + - libcufft 11.4.1.4 h5888daf_0 - libgcc >=13 - - libnvjitlink >=12.6.77,<12.7.0a0 - libstdcxx >=13 + constrains: + - libcufft-static >=11.4.1.4 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 100482680 - timestamp: 1727816156921 -- conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.1.2-he0c23c2_0.conda - sha256: 6e9b812f95fb9498eabeb336136f5655cd7f5802b6f94284719f6c05d64d46a9 - md5: 4a5afb2e1c3ec09bfd891b57ef2eb98b + size: 34644 + timestamp: 1749221956811 +- conda: https://prefix.dev/conda-forge/linux-64/libcufile-1.14.1.1-ha8da6e3_0.conda + sha256: 4ea2d869d04c50459cab1a50167b28b52c22a0b86566f53d06ef14bddb135268 + md5: 0b4600c9d7f93339ae78d504a9188eb8 depends: - - cuda-version >=12.6,<12.7.0a0 - - libcublas >=12.6.3.3,<12.7.0a0 - - libcusparse >=12.5.4.2,<12.6.0a0 - - libnvjitlink >=12.6.77,<12.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + - libstdcxx >=13 + - rdma-core >=57.0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 95730312 - timestamp: 1727816713108 -- conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.4.2-hbd13f7d_0.conda - sha256: 9db5d983d102c20f2cecc494ea22d84c44df37d373982815fc2eb669bf0bd376 - md5: 8186e9de34f321aa34965c1cb72c0c26 + size: 972484 + timestamp: 1749221601010 +- conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.10.19-h9ab20c4_0.conda + sha256: c4576976b8b5ceb060b32d24fc08db5253606256c3c99b42ace343e9be2229db + md5: c745bc0dd1f066e6752c8b2909216b62 depends: - - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.6,<12.7.0a0 + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - - libnvjitlink >=12.6.77,<12.7.0a0 - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 124403455 - timestamp: 1727811455861 -- conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.4.2-he0c23c2_0.conda - sha256: d3f5924397f12cca678807d8507af073803a7db25cf1658ce09a8f47692a59a1 - md5: 22144b496a855eae2ccbf754ff37b690 + size: 46161381 + timestamp: 1746193213392 +- conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.10.19-he0c23c2_0.conda + sha256: 3d3bddf1126f257a90b6e17b336b2a13c9dfa23e8c480b9d155803debcfa5c8a + md5: 3f2c7b49414e5b761333aea772d93da4 depends: - - cuda-version >=12.6,<12.7.0a0 - - libnvjitlink >=12.6.77,<12.7.0a0 + - cuda-version >=12.9,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 122556064 - timestamp: 1727811617684 -- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 - md5: 5b3e1610ff8bd5443476b91d618f5b77 + size: 49031195 + timestamp: 1746193674828 +- conda: https://prefix.dev/conda-forge/linux-64/libcurand-dev-10.3.10.19-h9ab20c4_0.conda + sha256: 1d59e844f3a79c19040efc1f15f23e33bb6b13df19bb63714e9b34515fc9d8fc + md5: 9a7e41b2c3cf57f6a3a1aeac35ebebc0 depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libcurand 10.3.10.19 h9ab20c4_0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libcurand-static >=10.3.10.19 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 523505 - timestamp: 1736877862502 -- conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda - sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 - md5: 8dfae1d2e74767e9ce36d5fa0d8605db + size: 253530 + timestamp: 1746193336357 +- conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.5.82-h9ab20c4_1.conda + sha256: 45d3d2d9ddcee35ba2c27663d974b1c7e784ef91ccd5c1dd01c74f34dd748319 + md5: 68f7279b8961065c511bed5e4b00fcc6 depends: - - __glibc >=2.17,<3.0.a0 + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libcublas >=12.9.1.4,<12.10.0a0 + - libcusparse >=12.5.10.65,<12.6.0a0 - libgcc >=13 - license: MIT - license_family: MIT + - libnvjitlink >=12.9.86,<13.0a0 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 72255 - timestamp: 1734373823254 -- conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 - md5: 1d8b9588be14e71df38c525767a1ac30 + size: 205161238 + timestamp: 1752012205208 +- conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.5.82-hac47afa_1.conda + sha256: 59da992123fcc966254f910f06c08e8417e1054bbb43455f3387d92b5428c546 + md5: dbcf1140e02c41d64d65b5473d716da6 depends: - - __osx >=11.0 - license: MIT - license_family: MIT + - cuda-version >=12.9,<12.10.0a0 + - libcublas >=12.9.1.4,<12.10.0a0 + - libcusparse >=12.5.10.65,<12.6.0a0 + - libnvjitlink >=12.9.86,<13.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 54132 - timestamp: 1734373971372 -- conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.23-h9062f6e_0.conda - sha256: 96c47725a8258159295996ea2758fa0ff9bea330e72b59641642e16be8427ce8 - md5: a9624935147a25b06013099d3038e467 + size: 198171513 + timestamp: 1752012457166 +- conda: https://prefix.dev/conda-forge/linux-64/libcusolver-dev-11.7.5.82-h9ab20c4_1.conda + sha256: 646555acbc0ff9492fde61af2ef7fac6ba7b21abca204e3e7e68967f217adb23 + md5: c7812251b40cb76f5a876440f365ac32 depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT + - __glibc >=2.28,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libcusolver 11.7.5.82 h9ab20c4_1 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libcusolver-static >=11.7.5.82 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 155723 - timestamp: 1734374084110 -- conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda - sha256: 4d0d69ddf9cc7d724a1ccf3a9852e44c8aea9825692582bac2c4e8d21ec95ccd - md5: 8247f80f3dc464d9322e85007e307fe8 + size: 60980 + timestamp: 1752012578026 +- conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.10.65-h5888daf_1.conda + sha256: 4424d0fe2a30c2d8622d466264d5a45f319d5a6b82212d4dcc43832e7be569d4 + md5: 68f6a483f51c8ed3732d50662cf6769d depends: - - ncurses - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=13 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD + - libnvjitlink >=12.9.86,<13.0a0 + - libstdcxx >=13 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 134657 - timestamp: 1736191912705 -- conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - sha256: fb934d7a03279ec8eae4bf1913ac9058fcf6fed35290d8ffa6e04157f396a3b1 - md5: af89aa84ffb5ee551ce0c137b951a3b5 + size: 208913744 + timestamp: 1752011897231 +- conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.10.65-hac47afa_1.conda + sha256: 5235459cbcfe757cee7ec8914ae14b43a8d322c2fcc29dc2ab773fc8ec72d849 + md5: b701cf3b58059215c9a1a8138ce3d184 depends: - - ncurses - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD + - cuda-version >=12.9,<12.10.0a0 + - libnvjitlink >=12.9.86,<13.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 107634 - timestamp: 1736192034117 -- conda: https://prefix.dev/conda-forge/linux-64/libev-4.33-hd590300_2.conda - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - md5: 172bf1cd1ff8629f2b1179945ed45055 + size: 206427296 + timestamp: 1752011985752 +- conda: https://prefix.dev/conda-forge/linux-64/libcusparse-dev-12.5.10.65-h5888daf_1.conda + sha256: 1f4042f7e11bfc75bfb3c497d139f806b48564b6a9eb38639d8bb15cf104f9ae + md5: 6f31959d9d36b67b2ecea017f8352cc9 depends: - - libgcc-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 112766 - timestamp: 1702146165126 -- conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f - md5: 36d33e440c31857372a72137f78bacf5 - license: BSD-2-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 + - libcusparse 12.5.10.65 h5888daf_1 + - libgcc >=13 + - libnvjitlink >=12.9.86,<13.0a0 + - libstdcxx >=13 + constrains: + - libcusparse-static >=12.5.10.65 + license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 107458 - timestamp: 1702146414478 -- conda: https://prefix.dev/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - md5: a1cfcc585f0c42bf8d5546bb1dfb668d + size: 52958 + timestamp: 1752012194858 +- conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda + sha256: ff2c82c14232cc0ff8038b3d43dace4a792c05a9b01465448445ac52539dee40 + md5: d5bb255dcf8d208f30089a5969a0314b depends: - - libgcc-ng >=12 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=10.13 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 427426 - timestamp: 1685725977222 -- conda: https://prefix.dev/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 - md5: 1a109764bff3bdc7bdd84088347d71dc + size: 572463 + timestamp: 1756698407882 +- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda + sha256: 58427116dc1b58b13b48163808daa46aacccc2c79d40000f8a3582938876fed7 + md5: 0fb2c0c9b1c1259bc7db75c1342b1d99 depends: - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 368167 - timestamp: 1685726248899 -- conda: https://prefix.dev/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - sha256: af03882afb7a7135288becf340c2f0cf8aa8221138a9a7b108aaeb308a486da1 - md5: 25efbd786caceef438be46da78a7b5ef + size: 568692 + timestamp: 1756698505599 +- conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 + md5: 4211416ecba1866fab0c6470986c22d6 depends: - - openssl >=3.1.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT purls: [] - size: 410555 - timestamp: 1685726568668 -- conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda - sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 - md5: db833e03127376d461e1e13e76f09b6c + size: 74811 + timestamp: 1752719572741 +- conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda + sha256: 689862313571b62ee77ee01729dc093f2bf25a2f99415fcfe51d3a6cd31cce7b + md5: 9fdeae0b7edda62e989557d645769515 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 constrains: - - expat 2.6.4.* + - expat 2.7.1.* license: MIT license_family: MIT purls: [] - size: 73304 - timestamp: 1730967041968 -- conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745 - md5: 38d2656dd914feb0cab8c629370768bf + size: 72450 + timestamp: 1752719744781 +- conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + sha256: 8fbb17a56f51e7113ed511c5787e0dec0d4b10ef9df921c4fd1cccca0458f648 + md5: b1ca5f21335782f71a8bd69bdc093f67 depends: - __osx >=11.0 constrains: - - expat 2.6.4.* + - expat 2.7.1.* license: MIT license_family: MIT purls: [] - size: 64693 - timestamp: 1730967175868 -- conda: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda - sha256: 0c0447bf20d1013d5603499de93a16b6faa92d7ead870d96305c0f065b6a5a12 - md5: eb383771c680aa792feb529eaf9df82f + size: 65971 + timestamp: 1752719657566 +- conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.1-hac47afa_0.conda + sha256: 8432ca842bdf8073ccecf016ccc9140c41c7114dc4ec77ca754551c01f780845 + md5: 3608ffde260281fa641e70d6e34b1b96 depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - expat 2.6.4.* + - expat 2.7.1.* license: MIT license_family: MIT purls: [] - size: 139068 - timestamp: 1730967442102 -- conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e - md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + size: 141322 + timestamp: 1752719767870 +- conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab + md5: ede4673863426c0883c0063d853bbd85 depends: - - libgcc-ng >=9.4.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT purls: [] - size: 58292 - timestamp: 1636488182923 -- conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca - md5: 086914b672be056eb70fd4285b6783b6 + size: 57433 + timestamp: 1743434498161 +- conda: https://prefix.dev/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda + sha256: 6394b1bc67c64a21a5cc73d1736d1d4193a64515152e861785c44d2cfc49edf3 + md5: 4ca9ea59839a9ca8df84170fab4ceb41 + depends: + - __osx >=10.13 license: MIT license_family: MIT purls: [] - size: 39020 - timestamp: 1636488587153 -- conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 - md5: 2c96d1b6915b408893f9472569dee135 + size: 51216 + timestamp: 1743434595269 +- conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60 + md5: c215a60c2935b517dcda8cad4705734d depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 + - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 42063 - timestamp: 1636489106777 -- conda: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 - md5: 3cb76c3f10d3bc7f1105b2fc9db984df + size: 39839 + timestamp: 1743434670405 +- conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda + sha256: d3b0b8812eab553d3464bbd68204f007f1ebadf96ce30eb0cbc5159f72e353f5 + md5: 85d8fa5e55ed8f93f874b3b23ed54ec6 depends: - - _libgcc_mutex 0.1 conda_forge + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 44978 + timestamp: 1743435053850 +- conda: https://prefix.dev/conda-forge/linux-64/libgcc-15.1.0-h767d61c_5.conda + sha256: 0caed73aac3966bfbf5710e06c728a24c6c138605121a3dacb2e03440e8baa6a + md5: 264fbfba7fb20acf3b29cde153e345ce + depends: + - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgomp 14.2.0 h77fa898_1 - - libgcc-ng ==14.2.0=*_1 + - libgomp 15.1.0 h767d61c_5 + - libgcc-ng ==15.1.0=*_5 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 848745 - timestamp: 1729027721139 -- conda: https://prefix.dev/conda-forge/win-64/libgcc-14.2.0-h1383e82_1.conda - sha256: ef840e797714440bb10b69446d815966fff41fdac79f79c4e19c475d81cd375d - md5: 75fdd34824997a0f9950a703b15d8ac5 + size: 824191 + timestamp: 1757042543820 +- conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda + sha256: f54bb9c3be12b24be327f4c1afccc2969712e0b091cdfbd1d763fb3e61cda03f + md5: 069afdf8ea72504e48d23ae1171d951c depends: - - _openmp_mutex >=4.5 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libgcc 15.1.0 h767d61c_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29187 + timestamp: 1757042549554 +- conda: https://prefix.dev/conda-forge/linux-64/libgcrypt-lib-1.11.1-hb9d3cd8_0.conda + sha256: dc9c7d7a6c0e6639deee6fde2efdc7e119e7739a6b229fa5f9049a449bae6109 + md5: 8504a291085c9fb809b66cabd5834307 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libgpg-error >=1.55,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 590353 + timestamp: 1747060639058 +- conda: https://prefix.dev/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_5.conda + sha256: 4c1a526198d0d62441549fdfd668cc8e18e77609da1e545bdcc771dd8dc6a990 + md5: 0c91408b3dec0b97e8a3c694845bd63b + depends: + - libgfortran5 15.1.0 hcea5267_5 constrains: - - libgcc-ng ==14.2.0=*_1 - - libgomp 14.2.0 h1383e82_1 - - msys2-conda-epoch <0.0a0 + - libgfortran-ng ==15.1.0=*_5 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 666386 - timestamp: 1729089506769 -- conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 - md5: e39480b9ca41323497b05492a63bc35b + size: 29169 + timestamp: 1757042575979 +- conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda + sha256: 844500c9372d455f6ae538ffd3cdd7fda5f53d25a2a6b3ba33060a302c37bc3e + md5: 07cfad6b37da6e79349c6e3a0316a83b depends: - - libgcc 14.2.0 h77fa898_1 + - libgfortran5 15.1.0 hfa3c126_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 54142 - timestamp: 1729027726517 -- conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 - md5: f1fd30127802683586f768875127a987 + size: 133973 + timestamp: 1756239628906 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-15.1.0-hfdf1602_1.conda + sha256: 981e3fac416e80b007a2798d6c1d4357ebebeb72a039aca1fb3a7effe9dcae86 + md5: c98207b6e2b1a309abab696d229f163e depends: - - libgfortran5 14.2.0 hd5240d6_1 - constrains: - - libgfortran-ng ==14.2.0=*_1 + - libgfortran5 15.1.0 hb74de2c_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 53997 - timestamp: 1729027752995 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b - md5: 4a55d9e169114b2b90d3ec4604cd7bbf + size: 134383 + timestamp: 1756239485494 +- conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda + sha256: 9d06adc6d8e8187ddc1cad87525c690bc8202d8cb06c13b76ab2fc80a35ed565 + md5: fbd4008644add05032b6764807ee2cba depends: - - libgfortran5 13.2.0 hf226fd6_3 + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.1.0 + constrains: + - libgfortran 15.1.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 110233 - timestamp: 1707330749033 -- conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d - md5: 9822b874ea29af082e5d36098d25427d + size: 1564589 + timestamp: 1757042559498 +- conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda + sha256: c4bb79d9e9be3e3a335282b50d18a7965e2a972b95508ea47e4086f1fd699342 + md5: 696e408f36a5a25afdb23e862053ca82 depends: - - libgcc >=14.2.0 + - llvm-openmp >=8.0.0 constrains: - - libgfortran 14.2.0 + - libgfortran 15.1.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1462645 - timestamp: 1729027735353 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a - md5: 66ac81d54e95c534ae488726c1f698ea + size: 1225193 + timestamp: 1756238834726 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-15.1.0-hb74de2c_1.conda + sha256: 1f8f5b2fdd0d2559d0f3bade8da8f57e9ee9b54685bd6081c6d6d9a2b0239b41 + md5: 4281bd1c654cb4f5cab6392b3330451f depends: - llvm-openmp >=8.0.0 constrains: - - libgfortran 5.0.0 13_2_0_*_3 + - libgfortran 15.1.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 997381 - timestamp: 1707330687590 -- conda: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 - md5: cc3573974587f12dda90d96e3e55a702 + size: 759679 + timestamp: 1756238772083 +- conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda + sha256: 125051d51a8c04694d0830f6343af78b556dd88cc249dfec5a97703ebfb1832d + md5: dcd5ff1940cd38f6df777cac86819d60 depends: - - _libgcc_mutex 0.1 conda_forge + - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 460992 - timestamp: 1729027639220 -- conda: https://prefix.dev/conda-forge/win-64/libgomp-14.2.0-h1383e82_1.conda - sha256: d8739b834608f35775209b032f0c2be752ef187863c7ec847afcebe2f681be4e - md5: 9e2d4d1214df6f21cba12f6eff4972f9 + size: 447215 + timestamp: 1757042483384 +- conda: https://prefix.dev/conda-forge/win-64/libgomp-15.1.0-h1383e82_5.conda + sha256: 65fd558d8f3296e364b8ae694932a64642fdd26d8eb4cf7adf08941e449be926 + md5: eae9a32a85152da8e6928a703a514d35 depends: - libwinpthread >=12.0.0.r4.gg4f2fc60ca constrains: @@ -5901,406 +8025,362 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 524249 - timestamp: 1729089441747 -- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda - sha256: ae48ee93e2c226bf682f1e389c2fd51ae7bf77c2ce4b3aee069764f4be1c63f2 - md5: 61829a8dd5f4e2327e707572065bae41 + size: 535560 + timestamp: 1757042749206 +- conda: https://prefix.dev/conda-forge/linux-64/libgpg-error-1.55-h3f2d84a_0.conda + sha256: 697334de4786a1067ea86853e520c64dd72b11a05137f5b318d8a444007b5e60 + md5: 2bd47db5807daade8500ed7ca4c512a4 depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libcurl >=8.11.1,<9.0a0 - - libgcc >=13 - - libgrpc >=1.67.1,<1.68.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 - - openssl >=3.4.0,<4.0a0 - constrains: - - libgoogle-cloud 2.33.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1254656 - timestamp: 1735648569457 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda - sha256: ce95aca02451694a4154c7770b6addf4fb859abf17912de6ec947da8469a56ce - md5: 91de1fbab8610974c0094c266bc63435 - depends: - - __osx >=11.0 - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libcurl >=8.11.1,<9.0a0 - - libcxx >=18 - - libgrpc >=1.67.1,<1.68.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - openssl >=3.4.0,<4.0a0 - constrains: - - libgoogle-cloud 2.33.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 877594 - timestamp: 1735648230965 -- conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-2.33.0-h95c5cb2_1.conda - sha256: ff10a5e71ae42c2e29849468b2fe6785bc9bcb1e61db0a40158c6638c28fee90 - md5: 3c63396fe52bd0649c72fec64b92f641 - depends: - - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libcurl >=8.11.1,<9.0a0 - - libgrpc >=1.67.1,<1.68.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - libgoogle-cloud 2.33.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 14439 - timestamp: 1735649066152 -- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda - sha256: 41022523320ca8633a6c615710823e596efadb50f06d724e1a0c81e27994f257 - md5: b0cfb5044685a7a9fa43ae669124f0a0 - depends: + - libgcc >=13 - __glibc >=2.17,<3.0.a0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - libgcc >=13 - - libgoogle-cloud 2.33.0 h2b5623c_1 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 784357 - timestamp: 1735648759177 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda - sha256: c0524a22064bc17f5c037da09ba54cc9e767741ef645178e499750c44bec2531 - md5: af8e51382464d4cc2d0054977c40a732 - depends: - - __osx >=11.0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libcxx >=18 - - libgoogle-cloud 2.33.0 hdbe95d5_1 - - libzlib >=1.3.1,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 526963 - timestamp: 1735649222088 -- conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-storage-2.33.0-he5eb982_1.conda - sha256: 76a916fba00a4bb395b85e7c2563d5ba325b04febb4f0e0066884ff39c54ec62 - md5: 6ae574bba5f1294487936e5d5f0f4c11 - depends: - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libgoogle-cloud 2.33.0 h95c5cb2_1 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache + license: LGPL-2.1-only purls: [] - size: 14336 - timestamp: 1735649423845 -- conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda - sha256: 014627485b3cf0ea18e04c0bab07be7fb98722a3aeeb58477acc7e1c3d2f911e - md5: 0c6497a760b99a926c7c12b74951a39c + size: 312184 + timestamp: 1745575272035 +- conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + sha256: 37267300b25f292a6024d7fd9331085fe4943897940263c3a41d6493283b2a18 + md5: c3cfd72cbb14113abee7bbd86f44ad69 depends: - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.4,<2.0a0 + - c-ares >=1.34.5,<2.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libgcc >=13 - - libprotobuf >=5.28.3,<5.28.4.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 - libre2-11 >=2024.7.2 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - re2 constrains: - - grpc-cpp =1.67.1 + - grpc-cpp =1.71.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 7792251 - timestamp: 1735584856826 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - sha256: 630edf63981818ff590367cb95fddbed0f5a390464d0952c90ec81de899e84a6 - md5: 8a3cba079d6ac985e7d73c76a678fbb4 + size: 7920187 + timestamp: 1745229332239 +- conda: https://prefix.dev/conda-forge/osx-64/libgrpc-1.71.0-h7d722e6_1.conda + sha256: 304649f99f6cde43cf4fb95cc2892b5955aa31bf3d8b74f707a8ca1347c06b88 + md5: 460e0c0ac50927c2974e41aab9272c6b depends: - - __osx >=11.0 - - c-ares >=1.34.4,<2.0a0 + - __osx >=10.14 + - c-ares >=1.34.5,<2.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libcxx >=18 - - libprotobuf >=5.28.3,<5.28.4.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 - libre2-11 >=2024.7.2 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - re2 constrains: - - grpc-cpp =1.67.1 + - grpc-cpp =1.71.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 5311706 - timestamp: 1735585137716 -- conda: https://prefix.dev/conda-forge/win-64/libgrpc-1.67.1-h0ac93cb_1.conda - sha256: 4bf4b455fc8c56ac84001d394f93465c0cd42e78d8053a7c99668bba681b0973 - md5: d41dfb3f07ea2f3687e9a2d7db31c506 + size: 5510897 + timestamp: 1745201273719 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda + sha256: 082668830025c2a2842165724b44d4f742688353932a6705cd61aa4ecb9aa173 + md5: 59fe16787c94d3dc92f2dfa533de97c6 depends: - - c-ares >=1.34.4,<2.0a0 + - __osx >=11.0 + - c-ares >=1.34.5,<2.0a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=18 + - libprotobuf >=5.29.3,<5.29.4.0a0 - libre2-11 >=2024.7.2 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - re2 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 constrains: - - grpc-cpp =1.67.1 + - grpc-cpp =1.71.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 17282979 - timestamp: 1735632501670 -- conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - sha256: d14c016482e1409ae1c50109a9ff933460a50940d2682e745ab1c172b5282a69 - md5: 804ca9e91bcaea0824a341d55b1684f2 + size: 4908484 + timestamp: 1745191611284 +- conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.12.1-default_h7f8ec31_1001.conda + sha256: e64452dc61c7317d6afaf22168414d89f97eefb3d436f474e665b1ce069e47b5 + md5: 37f887c669f73e79ffdb02129456644b depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - libxml2 >=2.13.4,<3.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.5 license: BSD-3-Clause - license_family: BSD purls: [] - size: 2423200 - timestamp: 1731374922090 -- conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.2-default_ha69328c_1001.conda - sha256: 850e255997f538d5fb6ed651321141155a33bb781d43d326fc4ff62114dd2842 - md5: b87a0ac5ab6495d8225db5dc72dd21cd + size: 2448257 + timestamp: 1757305556046 +- conda: https://prefix.dev/conda-forge/osx-64/libhwloc-2.12.1-default_h094e1f9_1001.conda + sha256: e4388ffd038349b02921872b91260bdb72eb47a6a528902a58716b48b233cf00 + md5: 75d7759422b200b38ccd24a2fc34ca55 + depends: + - __osx >=10.13 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.5 + license: BSD-3-Clause + purls: [] + size: 2379586 + timestamp: 1757305533929 +- conda: https://prefix.dev/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1001.conda + sha256: 573ed036dab093d8a935c76ae03913d1762004cfd46729a3fbea1089b696fdb3 + md5: b4b6d44c3c3360ec96891bca529e9f24 depends: - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - libxml2 >=2.13.4,<3.0a0 + - libxml2 + - libxml2-16 >=2.14.5 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: BSD-3-Clause - license_family: BSD purls: [] - size: 2390021 - timestamp: 1731375651179 -- conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 - md5: d66573916ffcf376178462f1b61c941e + size: 2413164 + timestamp: 1757305758742 +- conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 depends: - - libgcc-ng >=12 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: LGPL-2.1-only purls: [] - size: 705775 - timestamp: 1702682170569 -- conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 - md5: 69bda57310071cf6d2b86caf11573d2d + size: 790176 + timestamp: 1754908768807 +- conda: https://prefix.dev/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + sha256: a1c8cecdf9966921e13f0ae921309a1f415dfbd2b791f2117cf7e8f5e61a48b6 + md5: 210a85a1119f97ea7887188d176db135 + depends: + - __osx >=10.13 license: LGPL-2.1-only purls: [] - size: 676469 - timestamp: 1702682458114 -- conda: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b - md5: e1eb10b1cca179f2baa3601e4efc8712 + size: 737846 + timestamp: 1754908900138 +- conda: https://prefix.dev/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + sha256: 0dcdb1a5f01863ac4e8ba006a8b0dc1a02d2221ec3319b5915a1863254d7efa7 + md5: 64571d1dd6cdcfa25d0664a5950fdaa2 depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: LGPL-2.1-only purls: [] - size: 636146 - timestamp: 1702682547199 -- conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f - md5: ea25936bb4080d843790b586850f82b8 + size: 696926 + timestamp: 1754909290005 +- conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_h7ac8fdf_openblas.conda + build_number: 35 + sha256: 3967e62d4d1d5c1492f861864afca95aaa8cac14e696ce7b9be7d0b6a50507e8 + md5: 88fa5489509c1da59ab2ee6b234511a5 depends: - - libgcc-ng >=12 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib - purls: [] - size: 618575 - timestamp: 1694474974816 -- conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 - md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + - libblas 3.9.0 35_h59b9bed_openblas constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib + - blas 2.135 openblas + - libcblas 3.9.0 35*_openblas + - liblapacke 3.9.0 35*_openblas + license: BSD-3-Clause + license_family: BSD purls: [] - size: 547541 - timestamp: 1694475104253 -- conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff - md5: 3f1b948619c45b1ca714d60c7389092c + size: 16920 + timestamp: 1757002835750 +- conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-35_hc41d3b0_mkl.conda + build_number: 35 + sha256: 81bbecf7c06d50f48b2af2a1e7b3706a0ff0190ed8ab8f46444d4475bfa1e360 + md5: 5b4f86e5bc48d347eaf1ca2d180780ad depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libblas 3.9.0 35_hfdb39a5_mkl constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib + - liblapacke 3.9.0 35*_mkl + - blas 2.135 mkl + - libcblas 3.9.0 35*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD purls: [] - size: 822966 - timestamp: 1694475223854 -- conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda - build_number: 26 - sha256: 4ab8f00c325e1aacb6edc881b39c7c294adafc9d485cdde82979d1617fcd1e6f - md5: 84112111a50db59ca64153e0054fa73e + size: 17011 + timestamp: 1757002986706 +- conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-20_osx64_mkl.conda + build_number: 20 + sha256: fdccac604746f9620fefaee313707aa2f500f73e51f8e3a4b690d5d4c90ce3dc + md5: 58f08e12ad487fac4a08f90ff0b87aec depends: - - libblas 3.9.0 26_linux64_mkl + - libblas 3.9.0 20_osx64_mkl constrains: - blas * mkl - - libcblas 3.9.0 26_linux64_mkl - - liblapacke 3.9.0 26_linux64_mkl + - libcblas 3.9.0 20_osx64_mkl + - liblapacke 3.9.0 20_osx64_mkl track_features: - blas_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 16302 - timestamp: 1734432554916 -- conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda - build_number: 26 - sha256: b76458c36331376911e0f98fa68109e02f4d5e5ebfffa79587ac69cef748bba1 - md5: 3792604c43695d6a273bc5faaac47d48 + size: 14699 + timestamp: 1700568690313 +- conda: https://prefix.dev/conda-forge/osx-64/liblapack-3.9.0-34_h236ab99_openblas.conda + build_number: 34 + sha256: 6ecbd5c2b39e40766935c8311238cfbfcf7ca43b5eafc9bb5f883d59c705981e + md5: 8ddbc2de70c2fedfb4cfbcb8d5562ac8 depends: - - libblas 3.9.0 26_linux64_openblas + - libblas 3.9.0 34_h7f60823_openblas constrains: - - libcblas 3.9.0 26_linux64_openblas - - liblapacke 3.9.0 26_linux64_openblas - - blas * openblas + - liblapacke 3.9.0 34*_openblas + - blas 2.134 openblas + - libcblas 3.9.0 34*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 16338 - timestamp: 1734432576650 -- conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda - build_number: 26 - sha256: dd6d9a21e672aee4332f019c8229ce70cf5eaf6c2f4cbd1443b105fb66c00dc5 - md5: cebad79038a75cfd28fa90d147a2d34d + size: 19548 + timestamp: 1754678665504 +- conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-35_hc9a63f6_openblas.conda + build_number: 35 + sha256: 84f1c11187b564a9fdf464dad46d436ade966262e3000f7c5037b56b244f6fb8 + md5: 437d6c679b3d959d87b3b735fcc0b4ee depends: - - libblas 3.9.0 26_osxarm64_openblas + - libblas 3.9.0 35_h10e41b3_openblas constrains: - - liblapacke 3.9.0 26_osxarm64_openblas - - libcblas 3.9.0 26_osxarm64_openblas - - blas * openblas + - liblapacke 3.9.0 35*_openblas + - libcblas 3.9.0 35*_openblas + - blas 2.135 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 16624 - timestamp: 1734433068120 -- conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - build_number: 26 - sha256: 6701bd162d105531b75d05acf82b4ad9fbc5a24ffbccf8c66efa9e72c386b33c - md5: 0a717f5fda7279b77bcce671b324408a + size: 17166 + timestamp: 1757003647724 +- conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-35_hf9ab0e9_mkl.conda + build_number: 35 + sha256: 56e0992fb58eed8f0d5fa165b8621fa150b84aa9af1467ea0a7a9bb7e2fced4f + md5: 0c6ed9d722cecda18f50f17fb3c30002 depends: - - libblas 3.9.0 26_win64_mkl + - libblas 3.9.0 35_h5709861_mkl constrains: - - liblapacke 3.9.0 26_win64_mkl - - blas * mkl - - libcblas 3.9.0 26_win64_mkl + - blas 2.135 mkl + - libcblas 3.9.0 35*_mkl + - liblapacke 3.9.0 35*_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 3732160 - timestamp: 1734432822278 -- conda: https://prefix.dev/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a - md5: 73301c133ded2bf71906aa2104edae8b - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 31484415 - timestamp: 1690557554081 -- conda: https://prefix.dev/conda-forge/osx-arm64/libllvm14-14.0.6-hd1a9a77_4.conda - sha256: 6f603914fe8633a615f0d2f1383978eb279eeb552079a78449c9fbb43f22a349 - md5: 9f3dce5d26ea56a9000cd74c034582bd - depends: - - libcxx >=15 - - libzlib >=1.2.13,<2.0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 20571387 - timestamp: 1690559110016 -- conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - sha256: e6e425252f3839e2756e4af1ea2074dffd3396c161bf460629f9dfd6a65f15c6 - md5: 2ecf2f1c7e4e21fcfe6423a51a992d84 + size: 78485 + timestamp: 1757003541803 +- conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 112894 + timestamp: 1749230047870 +- conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda + sha256: 7e22fd1bdb8bf4c2be93de2d4e718db5c548aa082af47a7430eb23192de6bb36 + md5: 8468beea04b9065b9807fc8b9cdc5894 + depends: + - __osx >=10.13 + constrains: + - xz 5.8.1.* license: 0BSD purls: [] - size: 111132 - timestamp: 1733407410083 -- conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - sha256: d863b8257406918ffdc50ae65502f2b2d6cede29404d09a094f59509d6a0aaf1 - md5: b2553114a7f5e20ccd02378a77d836aa + size: 104826 + timestamp: 1749230155443 +- conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285 + md5: d6df911d4564d77c4374b02552cb17d1 depends: - __osx >=11.0 + constrains: + - xz 5.8.1.* license: 0BSD purls: [] - size: 99129 - timestamp: 1733407496073 -- conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - sha256: 24d04bd55adfa44c421c99ce169df38cb1ad2bba5f43151bc847fc802496a1fa - md5: 015b9c0bd1eef60729ab577a38aaf0b5 + size: 92286 + timestamp: 1749230283517 +- conda: https://prefix.dev/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc + md5: c15148b2e18da456f5108ccb5e411446 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 + constrains: + - xz 5.8.1.* license: 0BSD purls: [] - size: 104332 - timestamp: 1733407872569 -- conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda - sha256: d02d1d3304ecaf5c728e515eb7416517a0b118200cd5eacbe829c432d1664070 - md5: aeb98fdeb2e8f25d43ef71fbacbeec80 + size: 104935 + timestamp: 1749230611612 +- conda: https://prefix.dev/conda-forge/linux-64/libmagma-2.9.0-h9918c94_2.conda + sha256: 4be16ac5ab80c094f596e51926ba4b56737f9d62b00f620de602d2d7d55b55de + md5: 1271532895d1f829fa0edbde3bb46a68 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - _openmp_mutex >=4.5 + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - libblas >=3.9.0,<4.0a0 + - libcublas >=12.9.1.4,<13.0a0 + - libcusparse >=12.5.10.65,<13.0a0 + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 707474474 + timestamp: 1753236923145 +- conda: https://prefix.dev/conda-forge/win-64/libmagma-2.9.0-h6290ce1_2.conda + sha256: ee5fabd5c6400f3416858404e39be1ec5b8d4a080355884dc4f740255f67cd32 + md5: 881c52b5c7b6cd35eab9a7879d9eefd4 + depends: + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - libblas >=3.9.0,<4.0a0 + - libcublas >=12.9.1.4,<13.0a0 + - libcusparse >=12.5.10.65,<13.0a0 + - liblapack >=3.9.0,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 577894084 + timestamp: 1753296611984 +- conda: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee + md5: c7e925f37e3b40d893459e625f6a53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 91183 + timestamp: 1748393666725 +- conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-h6e16a3a_0.conda + sha256: 98299c73c7a93cd4f5ff8bb7f43cd80389f08b5a27a296d806bdef7841cc9b9e + md5: 18b81186a6adb43f000ad19ed7b70381 + depends: + - __osx >=10.13 license: BSD-2-Clause license_family: BSD purls: [] - size: 89991 - timestamp: 1723817448345 -- conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - sha256: f7917de9117d3a5fe12a39e185c7ce424f8d5010a6f97b4333e8a1dcb2889d16 - md5: 7476305c35dd9acef48da8f754eedb40 + size: 77667 + timestamp: 1748393757154 +- conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + sha256: 0a1875fc1642324ebd6c4ac864604f3f18f57fbcf558a8264f6ced028a3c75b2 + md5: 85ccccb47823dd9f7a99d2c7f530342f depends: - __osx >=11.0 license: BSD-2-Clause license_family: BSD purls: [] - size: 69263 - timestamp: 1723817629767 + size: 71829 + timestamp: 1748393749336 - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf md5: 74860100b2029e2523cf480804c76b9b @@ -6313,619 +8393,594 @@ packages: purls: [] size: 88657 timestamp: 1723861474602 -- conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 - md5: 19e57602824042dfd0446292ef90488b +- conda: https://prefix.dev/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + sha256: ba7c5d294e3d80f08ac5a39564217702d1a752e352e486210faff794ac5001b4 + md5: db63358239cbe1ff86242406d440e44a depends: - __glibc >=2.17,<3.0.a0 - - c-ares >=1.32.3,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 647599 - timestamp: 1729571887612 -- conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f - md5: 3408c02539cee5f1141f9f11450b6a51 - depends: - - __osx >=11.0 - - c-ares >=1.34.2,<2.0a0 - - libcxx >=17 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT + license: LGPL-2.1-or-later + license_family: LGPL purls: [] - size: 566719 - timestamp: 1729572385640 -- conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 - md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + size: 741323 + timestamp: 1731846827427 +- conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 depends: - - libgcc-ng >=12 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: LGPL-2.1-only license_family: GPL purls: [] - size: 33408 - timestamp: 1697359010159 -- conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.6.85-hbd13f7d_0.conda - sha256: f8af058f7ba2e436f6bbeaabe273a6e88d6193028572769c8402bbee2bdfa95d - md5: dca2d62b3812922e6976f76c0a401918 + size: 33731 + timestamp: 1750274110928 +- conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.9.86-h5888daf_1.conda + sha256: 55478faf21bd0ea6679189fa998fb3282f8bae93b1a4edf38b3e259bacce841d + md5: f38e71689d0807320af7373dd458b77d depends: - __glibc >=2.17,<3.0.a0 - - cuda-version >=12,<12.7.0a0 + - cuda-version >=12,<12.10.0a0 - libgcc >=13 - libstdcxx >=13 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 15590703 - timestamp: 1732133239776 -- conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.6.85-he0c23c2_0.conda - sha256: fd1646332a5aebb43b0e9ae786c57097e0a3c0201cc249983f155530228b1494 - md5: 5066f88e4f76924ce7bd8362dad10c18 + size: 30527890 + timestamp: 1751470375759 +- conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.9.86-he0c23c2_1.conda + sha256: e08bfc251e3dda05b20d266ca9331e92cb72c6ed866d98c039ab7bd2738f7618 + md5: 881857816711d7538ad598edc99526f6 depends: - - cuda-version >=12,<12.7.0a0 + - cuda-version >=12,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 13122932 - timestamp: 1732133470361 -- conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe - md5: 62857b389e42b36b686331bec0922050 + size: 27346958 + timestamp: 1751470930566 +- conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_2.conda + sha256: 1b51d1f96e751dc945cc06f79caa91833b0c3326efe24e9b506bd64ef49fc9b0 + md5: dfc5aae7b043d9f56ba99514d5e60625 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libgfortran - - libgfortran5 >=14.2.0 + - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.28,<0.3.29.0a0 + - openblas >=0.3.30,<0.3.31.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 5578513 - timestamp: 1730772671118 -- conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 - md5: 40803a48d947c8639da6704e9a44d3ce + size: 5938936 + timestamp: 1755474342204 +- conda: https://prefix.dev/conda-forge/osx-64/libopenblas-0.3.30-openmp_h83c2472_2.conda + sha256: 341dd45c2e88261f1f9ff76c3410355b4b0e894abe6ac89f7cbf64a3d10f0f01 + md5: 89edf77977f520c4245567460d065821 depends: - - __osx >=11.0 - - libgfortran 5.* - - libgfortran5 >=13.2.0 - - llvm-openmp >=18.1.8 + - __osx >=10.13 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 constrains: - - openblas >=0.3.28,<0.3.29.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4165774 - timestamp: 1730772154295 -- conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - build_number: 8 - sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 - md5: a9fa0ef309406c84b46db3a28efd761e - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h9d9f30d_8_cpu - - libgcc >=13 - - libstdcxx >=13 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1207011 - timestamp: 1736610684584 -- conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - build_number: 8 - sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb - md5: b8bd275a49877fdec62ff787818a869d - depends: - - __osx >=11.0 - - libarrow 18.1.0 hf3eb8e5_8_cpu - - libcxx >=18 - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 873593 - timestamp: 1736609701839 -- conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda - build_number: 8 - sha256: 3292cd6efa06a20362fdb212e64783f8c8df4fe4687ed01a4c4ad3f8843cbb92 - md5: fc609e4314b53f0980a6f09862bc92a2 - depends: - - libarrow 18.1.0 hb928929_8_cpu - - libthrift >=0.21.0,<0.21.1.0a0 - - openssl >=3.4.0,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.42.34433 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 812306 - timestamp: 1736611863777 -- conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f - md5: 85cbdaacad93808395ac295b5667d25b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 289426 - timestamp: 1736339058310 -- conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - sha256: ddcc81c049b32fb5eb3ac1f9a6d3a589c08325c8ec6f89eb912208b19330d68c - md5: d554c806d065b1763cb9e1cb1d25741d + size: 6262457 + timestamp: 1755473612572 +- conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_h60d53f8_2.conda + sha256: 7b8551a4d21cf0b19f9a162f1f283a201b17f1bd5a6579abbd0d004788c511fa + md5: d004259fd8d3d2798b16299d6ad6c9e9 depends: - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 263151 - timestamp: 1736339184358 -- conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda - sha256: e39c4f1bc8fee08f6a2eb4a88174d14c3a99dbb4850c98f3a87eb83b4dabbfca - md5: 41fb9e522ec6e0b34a6f23c98b07e1cf + size: 4284696 + timestamp: 1755471861128 +- conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.29.3-h7460b1f_2.conda + sha256: 674635c341a7838138a0698fc5704eab3b9a3a14f85e6f47a9d7568b8fa01a11 + md5: 25b96b519eb2ed19faeef1c12954e82b depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=14 + - libstdcxx >=14 - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: zlib-acknowledgement + license: BSD-3-Clause + license_family: BSD purls: [] - size: 348982 - timestamp: 1736339314098 -- conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - sha256: 51125ebb8b7152e4a4e69fd2398489c4ec8473195c27cde3cbdf1cb6d18c5493 - md5: d8703f1ffe5a06356f06467f1d0b9464 + size: 3475015 + timestamp: 1753801238063 +- conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda + sha256: c0b766c87a50098685f43d57424eebae35f1c4b812fc6d025cbb15a8c0a2800e + md5: 8abbe99f9b80602f94a801321ec06ace depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=10.14 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libgcc >=13 - - libstdcxx >=13 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 2960815 - timestamp: 1735577210663 -- conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - sha256: f58a16b13ad53346903c833e266f83c3d770a43a432659b98710aed85ca885e7 - md5: bdbfea4cf45ae36652c6bbcc2e7ebe91 + size: 2694250 + timestamp: 1753800435072 +- conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.29.3-h6c9c1dd_2.conda + sha256: 8c6350afed4c78fc5fbab85b8f00af084586176fd5f6e4340f66d2e239d028dc + md5: cb31a05af57f76e19766ef8b30b3b6d3 depends: - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - libcxx >=18 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=19 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 2271580 - timestamp: 1735576361997 -- conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda - sha256: 78c1b917d50c0317579bd9a5714a6d544d69786fd3228a4201dc4e8710ef6348 - md5: 3be9f2fb7dce19d66d5cf1003a34b0e1 + size: 2637991 + timestamp: 1753800039682 +- conda: https://prefix.dev/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_1.conda + sha256: 085b55d51328c8fcd6aef15f717a21d921bf8df1db2adfa81036e041a0609cd4 + md5: f046835750b70819a1e2fffddf111825 depends: - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250512.1,<20250513.0a0 - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD purls: [] - size: 6172959 - timestamp: 1735577517299 -- conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - sha256: 4420f8362c71251892ba1eeb957c5e445e4e1596c0c651c28d0d8b415fe120c7 - md5: b2fede24428726dd867611664fb372e8 + size: 7615542 + timestamp: 1751690551169 +- conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + sha256: 89535af669f63e0dc4ae75a5fc9abb69b724b35e0f2ca0304c3d9744a55c8310 + md5: f6881c04e6617ebba22d237c36f1b88e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libgcc >=13 - libstdcxx >=13 constrains: - - re2 2024.07.02.* + - re2 2025.06.26.* license: BSD-3-Clause license_family: BSD purls: [] - size: 209793 - timestamp: 1735541054068 -- conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - sha256: 112a73ad483353751d4c5d63648c69a4d6fcebf5e1b698a860a3f5124fc3db96 - md5: 6b1e3624d3488016ca4f1ca0c412efaa + size: 211720 + timestamp: 1751053073521 +- conda: https://prefix.dev/conda-forge/osx-64/libre2-11-2025.06.26-hfc00f1c_0.conda + sha256: 979a49a54fcfb38f4de258d970b5c572fa29e780a67e847ea18860f99af39020 + md5: 2ba834cda1154dd23d8f1bba2f8f13e0 depends: - - __osx >=11.0 + - __osx >=10.13 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libcxx >=18 constrains: - - re2 2024.07.02.* + - re2 2025.06.26.* license: BSD-3-Clause license_family: BSD purls: [] - size: 167155 - timestamp: 1735541067807 -- conda: https://prefix.dev/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_2.conda - sha256: f5bcc036ea1946444dc3adc772dfb045ff9e6d3486e924133ad7d018de651738 - md5: 67612b1af5350b6dcf289db63ec3e685 + size: 180092 + timestamp: 1751053180332 +- conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2025.06.26-hd41c47c_0.conda + sha256: d125de07bcdeadddd415d2f855f7fe383b066a373fa88244e51c58fef5cb8774 + md5: ce95f5724e52eb76f4cd4be6e7a0d9ae depends: + - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libabseil >=20250127.1,<20250128.0a0 + - libcxx >=18 constrains: - - re2 2024.07.02.* + - re2 2025.06.26.* license: BSD-3-Clause license_family: BSD purls: [] - size: 260655 - timestamp: 1735541391655 -- conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 + size: 167704 + timestamp: 1751053331260 +- conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da + md5: 0b367fad34931cb79e0d6b7e5c06bb1c depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 873551 - timestamp: 1733761824646 -- conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a - depends: - - __osx >=11.0 + - libgcc >=14 - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 850553 - timestamp: 1733762057506 -- conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - sha256: ecfc0182c3b2e63c870581be1fa0e4dbdfec70d2011cb4f5bde416ece26c41df - md5: ff00095330e0d35a16bd3bdbd1a2d3e7 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Unlicense + license: blessing purls: [] - size: 891292 - timestamp: 1733762116902 -- conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 - md5: be2de152d8073ef1c01b7728475f2fe7 + size: 932581 + timestamp: 1753948484112 +- conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda + sha256: 466366b094c3eb4b1d77320530cbf5400e7a10ab33e4824c200147488eebf7a6 + md5: 156bfb239b6a67ab4a01110e6718cbc4 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD + license: blessing purls: [] - size: 304278 - timestamp: 1732349402869 -- conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 - md5: ddc7194676c285513706e5fc64f214d7 + size: 980121 + timestamp: 1753948554003 +- conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + sha256: 802ebe62e6bc59fc26b26276b793e0542cfff2d03c086440aeaf72fb8bbcec44 + md5: 1dcb0468f5146e38fae99aef9656034b depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD + license: blessing purls: [] - size: 279028 - timestamp: 1732349599461 -- conda: https://prefix.dev/conda-forge/win-64/libssh2-1.11.1-he619c9f_0.conda - sha256: 4b3256bd2b4e4b3183005d3bd8826d651eccd1a4740b70625afa2b7e7123d191 - md5: af0cbf037dd614c34399b3b3e568c557 + size: 902645 + timestamp: 1753948599139 +- conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda + sha256: 5dc4f07b2d6270ac0c874caec53c6984caaaa84bc0d3eb593b0edf3dc8492efa + md5: ccb20d946040f86f0c05b644d5eadeca depends: - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing purls: [] - size: 291889 - timestamp: 1732349796504 -- conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 - md5: 234a5554c53625688d51062645337328 + size: 1288499 + timestamp: 1753948889360 +- conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda + sha256: 0f5f61cab229b6043541c13538d75ce11bd96fb2db76f94ecf81997b1fde6408 + md5: 4e02a49aaa9d5190cb630fa43528fbe6 depends: - - libgcc 14.2.0 h77fa898_1 + - __glibc >=2.17,<3.0.a0 + - libgcc 15.1.0 h767d61c_5 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 3893695 - timestamp: 1729027746910 -- conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 - md5: 8371ac6457591af2cf6159439c1fd051 + size: 3896432 + timestamp: 1757042571458 +- conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_5.conda + sha256: 7b8cabbf0ab4fe3581ca28fe8ca319f964078578a51dd2ca3f703c1d21ba23ff + md5: 8bba50c7f4679f08c861b597ad2bda6b depends: - - libstdcxx 14.2.0 hc0a3c3a_1 + - libstdcxx 15.1.0 h8f9b012_5 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 54105 - timestamp: 1729027780628 -- conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - sha256: ebb395232973c18745b86c9a399a4725b2c39293c9a91b8e59251be013db42f0 - md5: dcb95c0a98ba9ff737f7ae482aef7833 + size: 29233 + timestamp: 1757042603319 +- conda: https://prefix.dev/conda-forge/linux-64/libsystemd0-257.7-h4e0b6ca_0.conda + sha256: e26b22c0ae40fb6ad4356104d5fa4ec33fe8dd8a10e6aef36a9ab0c6a6f47275 + md5: 1e12c8aa74fa4c3166a9bdc135bc4abf depends: - __glibc >=2.17,<3.0.a0 - - libevent >=2.1.12,<2.1.13.0a0 + - libcap >=2.75,<2.76.0a0 - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 425773 - timestamp: 1727205853307 -- conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - sha256: 7a6c7d5f58cbbc2ccd6493b4b821639fdb0701b9b04c737a949e8cb6adf1c9ad - md5: 7ce2bd2f650f8c31ad7ba4c7bfea61b7 - depends: - - __osx >=11.0 - - libcxx >=17 - - libevent >=2.1.12,<2.1.13.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: Apache-2.0 - license_family: APACHE + - libgcrypt-lib >=1.11.1,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: LGPL-2.1-or-later purls: [] - size: 324342 - timestamp: 1727206096912 -- conda: https://prefix.dev/conda-forge/win-64/libthrift-0.21.0-hbe90ef8_0.conda - sha256: 81ca4873ba09055c307f8777fb7d967b5c26291f38095785ae52caed75946488 - md5: 7699570e1f97de7001a7107aabf2d677 + size: 487969 + timestamp: 1750949895969 +- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cpu_mkl_h783a78b_102.conda + sha256: f9ab49bbde46c8b18e43049dc4fc320c215ebb7b2f26075ea12858fea052c0b3 + md5: 4005aeeaa8c615e624d4d0a5637f82ed depends: - - libevent >=2.1.12,<2.1.13.0a0 + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: APACHE + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - sleef >=3.8,<4.0a0 + constrains: + - pytorch-cpu 2.7.1 + - pytorch-gpu <0.0a0 + - pytorch 2.7.1 cpu_mkl_*_102 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 633857 - timestamp: 1727206429954 -- conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - sha256: b224e16b88d76ea95e4af56e2bc638c603bd26a770b98d117d04541d3aafa002 - md5: 0ea6510969e1296cc19966fad481f6de + size: 55587811 + timestamp: 1752204737378 +- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.7.1-cuda129_mkl_h16584c3_302.conda + sha256: 23034f5b3cb1eaa53ec40b5fe2a5fb137f1c0aefebbf1c663069b9f11a22971d + md5: 6a1cfee690fcdfd0038bc9763d851b82 depends: - __glibc >=2.17,<3.0.a0 - - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.23,<1.24.0a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-cupti >=12.9.79,<13.0a0 + - cuda-nvrtc >=12.9.86,<13.0a0 + - cuda-nvtx >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - cudnn >=9.10.1.4,<10.0a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.9.1.4,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.4.1.4,<12.0a0 + - libcufile >=1.14.1.1,<2.0a0 + - libcurand >=10.3.10.19,<11.0a0 + - libcusolver >=11.7.5.82,<12.0a0 + - libcusparse >=12.5.10.65,<13.0a0 - libgcc >=13 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 - libstdcxx >=13 - - libwebp-base >=1.4.0,<2.0a0 + - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: HPND + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.27.6.1,<3.0a0 + - sleef >=3.8,<4.0a0 + constrains: + - pytorch 2.7.1 cuda129_mkl_*_302 + - pytorch-cpu <0.0a0 + - pytorch-gpu 2.7.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 428173 - timestamp: 1734398813264 -- conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae - md5: a5d084a957563e614ec0c0196d890654 + size: 873838622 + timestamp: 1752489955770 +- conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_h42ab995_102.conda + sha256: f162d76ab13536f428d5bfa4bec817a4274e12ee0c0eec64ed6fdac917a41dd9 + md5: 8f7f6aff39ebcb7383a74ec195b27b3b depends: - - __osx >=11.0 - - lerc >=4.0.0,<5.0a0 + - __osx >=10.15 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libwebp-base >=1.4.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: HPND - purls: [] - size: 370600 - timestamp: 1734398863052 -- conda: https://prefix.dev/conda-forge/win-64/libtiff-4.7.0-h797046b_3.conda - sha256: c363a8baba4ce12b8f01f0ab74fe8b0dc83facd89c6604f4a191084923682768 - md5: defed79ff7a9164ad40320e3f116a138 - depends: - - lerc >=4.0.0,<5.0a0 - - libdeflate >=1.23,<1.24.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.6,<1.6.0a0 - license: HPND + - llvm-openmp >=18.1.8 + - mkl >=2023.2.0,<2024.0a0 + - numpy >=1.23,<3 + - python_abi 3.13.* *_cp313 + - sleef >=3.8,<4.0a0 + constrains: + - pytorch 2.7.1 cpu_mkl_*_102 + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 978878 - timestamp: 1734399004259 -- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda - sha256: 021dd776fc6482b31bcc27330d262f9a7df54bc3d199e9af2dfcc513d0320d2c - md5: 01be7598624eb315ee63c807dfe3f242 + size: 48245903 + timestamp: 1752207340170 +- conda: https://prefix.dev/conda-forge/osx-64/libtorch-2.7.1-cpu_mkl_hc5f6e96_102.conda + sha256: 609f609fa0e9a05eb5a1d0191bf5d6d129e46a4bd930c722461de02225926bfe + md5: ae5571fe2da26ac0aee050865eab15d0 depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 + - __osx >=10.15 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libblas * *mkl - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libstdcxx >=13 - - libuv >=1.49.2,<2.0a0 - - mkl >=2024.2.2,<2025.0a0 - - sleef >=3.7,<4.0a0 + - libcxx >=18 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - mkl >=2023.2.0,<2024.0a0 + - numpy >=1.21,<3 + - python_abi 3.10.* *_cp310 + - sleef >=3.8,<4.0a0 constrains: - - pytorch-cpu ==2.5.1 - - pytorch-gpu ==99999999 - - pytorch 2.5.1 cpu_mkl_*_109 + - pytorch-cpu 2.7.1 + - pytorch-gpu <0.0a0 + - pytorch 2.7.1 cpu_mkl_*_102 license: BSD-3-Clause license_family: BSD purls: [] - size: 53428361 - timestamp: 1736828519709 -- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda - sha256: bf5e9ce558b516988a41e1fbc73b368ef03b6f89a6b34edbde3203e131fcd455 - md5: ad9069009d26de3551e1053fa77a6355 + size: 48101075 + timestamp: 1752205916899 +- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_ha33cc54_2.conda + sha256: 61f3d544eea48860cdecfbf7d4e6bd2dbca7c5c4086d598b2d954de33a563e52 + md5: 930a67d77c4c9480c48da855157cd434 depends: - __osx >=11.0 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250127.1,<20250128.0a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libuv >=1.49.2,<2.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 - llvm-openmp >=18.1.8 - - numpy >=1.19,<3 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - sleef >=3.7,<4.0a0 + - numpy >=1.23,<3 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - sleef >=3.8,<4.0a0 constrains: - - pytorch-cpu ==2.5.1 - - pytorch 2.5.1 cpu_generic_*_9 + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 + - pytorch 2.7.1 cpu_generic_*_2 - openblas * openmp_* - - pytorch-gpu ==99999999 license: BSD-3-Clause license_family: BSD purls: [] - size: 28341435 - timestamp: 1736896460239 -- conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - sha256: 9794e6388e780c3310d46f773bbc924d4053375c3fcdb07a704b57f4616db928 - md5: 1e936bd23d737aac62a18e9a1e7f8b18 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 81500 - timestamp: 1732868419835 -- conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - sha256: ea88f06e97ef8fa2490f7594f8885bb542577226edf8abba3144302d951a53c2 - md5: f777470d31c78cd0abe1903a2fda436f + size: 29575043 + timestamp: 1752205428630 +- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.7.1-cpu_generic_haa461e3_2.conda + sha256: e0fc64b1b6fa2bc20ff8fc08d0904e0abce136cc5c2bf56de6041d24e83a5e84 + md5: 917335bd30a38715f4ae05037aa62f55 depends: - __osx >=11.0 - license: MIT - license_family: MIT + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - numpy >=1.21,<3 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + - sleef >=3.8,<4.0a0 + constrains: + - pytorch-gpu <0.0a0 + - openblas * openmp_* + - pytorch 2.7.1 cpu_generic_*_2 + - pytorch-cpu 2.7.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 83000 - timestamp: 1732868631531 -- conda: https://prefix.dev/conda-forge/win-64/libutf8proc-2.9.0-h2466b09_1.conda - sha256: 19386d93341d8fa3800033a7555ab00b9fef1db1dbd0a50b6e547b532860b603 - md5: 6f35a14d54f6fe4d013005cf56031842 + size: 29599452 + timestamp: 1752205365040 +- conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cpu_mkl_hf058426_104.conda + sha256: fffc73e4b79a477db2aeb9253990e4950ecf30da506a59041d2dce6b4536c6ba + md5: 73b4fd4f4ea909ce193a5fb26604ee82 depends: + - intel-openmp <2025 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - sleef >=3.8,<4.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - pytorch-gpu <0.0a0 + - pytorch 2.7.1 cpu_mkl_*_104 + - pytorch-cpu 2.7.1 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 84392 - timestamp: 1732868780863 -- conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 - md5: 40b61aab5c7ba9ff276c41cfffe6b80b + size: 34268457 + timestamp: 1753844952876 +- conda: https://prefix.dev/conda-forge/win-64/libtorch-2.7.1-cuda128_mkl_h2cc4d28_304.conda + sha256: 596d2916fa1726615ce635c65e66c174159de4a4d51a1c6b33b921359f24d1fd + md5: f9e395fe319820807d92e38828debdd3 depends: - - libgcc-ng >=12 + - cuda-cudart >=12.8.90,<13.0a0 + - cuda-cupti >=12.8.90,<13.0a0 + - cuda-nvrtc >=12.8.93,<13.0a0 + - cuda-version >=12.8,<13 + - cudnn >=9.10.1.4,<10.0a0 + - intel-openmp <2025 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.8.4.1,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.3.3.83,<12.0a0 + - libcurand >=10.3.9.90,<11.0a0 + - libcusolver >=11.7.3.90,<12.0a0 + - libcusparse >=12.5.8.93,<13.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - sleef >=3.8,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - pytorch 2.7.1 cuda128_mkl_*_304 + - pytorch-gpu 2.7.1 + - pytorch-cpu <0.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 33601 - timestamp: 1680112270483 -- conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 + size: 542628997 + timestamp: 1753859535009 +- conda: https://prefix.dev/conda-forge/linux-64/libudev1-257.7-hbe16f8c_0.conda + sha256: 3fca2655f4cf2ce6b618a2b52e3dce92f27f429732b88080567d5bbeea404c82 + md5: 5a23e52bd654a5297bd3e247eebab5a3 depends: - __glibc >=2.17,<3.0.a0 + - libcap >=2.75,<2.76.0a0 - libgcc >=13 - license: MIT - license_family: MIT + license: LGPL-2.1-or-later purls: [] - size: 884647 - timestamp: 1729322566955 -- conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 143533 + timestamp: 1750949902296 +- conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda + sha256: 776e28735cee84b97e4d05dd5d67b95221a3e2c09b8b13e3d6dbe6494337d527 + md5: af930c65e9a79a3423d6d36e265cef65 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + purls: [] + size: 37087 + timestamp: 1757334557450 +- conda: https://prefix.dev/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b + md5: 0f03292cc56bf91a077a134ea8747118 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: MIT license_family: MIT purls: [] - size: 410500 - timestamp: 1729322654121 -- conda: https://prefix.dev/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf - md5: 63f790534398730f59e1b899c3644d4a + size: 895108 + timestamp: 1753948278280 +- conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda + sha256: d90dd0eee6f195a5bd14edab4c5b33be3635b674b0b6c010fb942b956aa2254c + md5: fbfc6cf607ae1e1e498734e256561dc3 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - libwebp 1.5.0 - license: BSD-3-Clause - license_family: BSD + - __osx >=10.13 + license: MIT + license_family: MIT purls: [] - size: 429973 - timestamp: 1734777489810 -- conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a - md5: 569466afeb84f90d5bb88c11cc23d746 + size: 422612 + timestamp: 1753948458902 +- conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 + md5: c0d87c3c8e075daf1daf6c31b53e8083 depends: - __osx >=11.0 - constrains: - - libwebp 1.5.0 - license: BSD-3-Clause - license_family: BSD + license: MIT + license_family: MIT purls: [] - size: 290013 - timestamp: 1734777593617 -- conda: https://prefix.dev/conda-forge/win-64/libwebp-base-1.5.0-h3b0e114_0.conda - sha256: 1d75274614e83a5750b8b94f7bad2fc0564c2312ff407e697d99152ed095576f - md5: 33f7313967072c6e6d8f865f5493c7ae + size: 421195 + timestamp: 1753948426421 +- conda: https://prefix.dev/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + sha256: f03dc82e6fb1725788e73ae97f0cd3d820d5af0d351a274104a0767035444c59 + md5: 31e1545994c48efc3e6ea32ca02a8724 depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - libwebp 1.5.0 - license: BSD-3-Clause - license_family: BSD + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT purls: [] - size: 273661 - timestamp: 1734777665516 -- conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_8.conda - sha256: 6d5e158813ab8d553fbb0fedd0abe7bf92970b0be3a9ddf12da0f6cbad78f506 - md5: 03cccbba200ee0523bde1f3dad60b1f3 + size: 297087 + timestamp: 1753948490874 +- conda: https://prefix.dev/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_9.conda + sha256: 373f2973b8a358528b22be5e8d84322c165b4c5577d24d94fd67ad1bb0a0f261 + md5: 08bfa5da6e242025304b206d152479ef depends: - ucrt constrains: @@ -6933,103 +8988,183 @@ packages: - msys2-conda-epoch <0.0a0 license: MIT AND BSD-3-Clause-Clear purls: [] - size: 35433 - timestamp: 1724681489463 -- conda: https://prefix.dev/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa - md5: 92ed62436b625154323d40d5f2f11dd7 + size: 35794 + timestamp: 1737099561703 +- conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h031cc0b_0.conda + sha256: 7f1b564426d068acc81ed8d952df01ae20a6c9b2afdacf84304e6c87f6433593 + md5: 25253fca703a3ff89e117b9e74ebbbc7 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.14.6 hf2a90c1_0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - icu <0.0a0 license: MIT license_family: MIT purls: [] - size: 395888 - timestamp: 1727278577118 -- conda: https://prefix.dev/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 - md5: af523aae2eca6dfa1c8eec693f5b9a79 + size: 47472 + timestamp: 1757361123591 +- conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda + sha256: e93a8a52243805c39d793567bffbf29bd7690f212ccb6442276d231f535746c1 + md5: 02bfa78f26c105d0e5f36cd58dfcc397 depends: - - __osx >=11.0 - - pthread-stubs - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.14.6 ha9997c6_0 + - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT purls: [] - size: 323658 - timestamp: 1727278733917 -- conda: https://prefix.dev/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 - md5: a69bbf778a462da324489976c84cfc8c + size: 47655 + timestamp: 1757360772873 +- conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h23bb396_0.conda + sha256: d341a989da7875feedf4e2b3f493c84d6ab5ba1e24c5afdb13cbfcc61e5df060 + md5: ac4f36eb87b8b253a7fe6ea4b437a430 depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - pthread-stubs + - __osx >=10.13 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.14.6 h0ad03eb_0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - icu <0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41412 + timestamp: 1757361244632 +- conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h7b7ecba_0.conda + sha256: 922b8e02bae5136fdb677f9fd95d5e859fe9fa684552eb48090fb66e5005169e + md5: 967e0cea7f746f4c64534e6701f38356 + depends: + - __osx >=10.13 + - icu >=75.1,<76.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.14.6 ha1d9b0f_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41833 + timestamp: 1757361155935 +- conda: https://prefix.dev/conda-forge/win-64/libxml2-2.14.6-h5d26750_0.conda + sha256: 8cf8581b49e7e4cbcc1a8ea7630e8a3e8142592cddf6d02816f389745a509e38 + md5: 9ea58187996cf5470a721023e7d71904 + depends: + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.14.6 h692994f_0 + - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - icu <0.0a0 license: MIT license_family: MIT purls: [] - size: 1208687 - timestamp: 1727279378819 -- conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc + size: 44691 + timestamp: 1757361232566 +- conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-ha9997c6_0.conda + sha256: e2770e2f47bfad34c65dbe8ca6c3ac791dbb76ca737cb1329c8e3295b36b0449 + md5: c48cf6fa3408900fe428ee768338d5d2 depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 568900 + timestamp: 1757360765745 +- conda: https://prefix.dev/conda-forge/linux-64/libxml2-16-2.14.6-hf2a90c1_0.conda + sha256: 4d961afd631b5de612f575f9d1b3c4974ad230567329251841ac0ea855b42526 + md5: 91e13768de0edd87a35cd1b4ba10447e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.14.6 + - icu <0.0a0 + license: MIT + license_family: MIT purls: [] - size: 100393 - timestamp: 1702724383534 -- conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda - sha256: 306e18aa647d8208ad2cd0e62d84933222b2fbe93d2d53cd5283d2256b1d54de - md5: f5b05674697ae7d2c5932766695945e1 + size: 565189 + timestamp: 1757361108132 +- conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-h0ad03eb_0.conda + sha256: b8a2e90f975becfdf347187fd7896e45104ef933f30681096136f4dbdd378dde + md5: 70398b4454cf9136630fd289ef1e103c depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 + - __osx >=10.13 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 constrains: + - libxml2 2.14.6 - icu <0.0a0 license: MIT license_family: MIT purls: [] - size: 689993 - timestamp: 1733443678322 -- conda: https://prefix.dev/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - sha256: d7af3f25a4cece170502acd38f2dafbea4521f373f46dcb28a37fbe6ac2da544 - md5: 3dc3cff0eca1640a6acbbfab2f78139e + size: 497838 + timestamp: 1757361221745 +- conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-ha1d9b0f_0.conda + sha256: 5ad3197f67daf53ef6515e790a70f5a9e02a32385cdd75f74d083136533e457d + md5: a0e5f85b7a960a451de68603317963a4 depends: - - __osx >=11.0 + - __osx >=10.13 - icu >=75.1,<76.0a0 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.14.6 license: MIT license_family: MIT purls: [] - size: 582898 - timestamp: 1733443841584 -- conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda - sha256: 084dd4dde342f13c43ee418d153ac5b2610f95be029073a15fa9dda22b130d06 - md5: 77eaa84f90fc90643c5a0be0aa9bdd1b + size: 498847 + timestamp: 1757361134244 +- conda: https://prefix.dev/conda-forge/win-64/libxml2-16-2.14.6-h692994f_0.conda + sha256: 76e7d9248ffcc4c43e3cc1268b275a8044893577974b7de5037020d761ac3c59 + md5: 00cb21bb9f8aeea7006851ac9e0ec9e7 depends: - - libiconv >=1.17,<2.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - icu <0.0a0 + - libxml2 2.14.6 license: MIT license_family: MIT purls: [] - size: 1612294 - timestamp: 1733443909984 + size: 525005 + timestamp: 1757361198773 - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -7043,6 +9178,18 @@ packages: purls: [] size: 60963 timestamp: 1727963148474 +- conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09 + md5: 003a54a4e32b02f7355b50a837e699da + depends: + - __osx >=10.13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 57133 + timestamp: 1727963183990 - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b md5: 369964e85dc26bfe78f41399b366c435 @@ -7069,38 +9216,67 @@ packages: purls: [] size: 55476 timestamp: 1727963768015 -- conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-19.1.6-h024ca30_0.conda - sha256: 9e385c2a8169d951cf153221fb7fbb3dc8f1e5ac77371edee7329f8721dbe1ae - md5: 96e42ccbd3c067c1713ff5f2d2169247 +- conda: https://prefix.dev/conda-forge/linux-64/llvm-openmp-21.1.0-h4922eb0_0.conda + sha256: eb42c041e2913e4a8da3e248e4e690b5500c9b9a7533b4f99e959a22064ac599 + md5: d9965f88b86534360e8fce160efb67f1 depends: - __glibc >=2.17,<3.0.a0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 21.1.0|21.1.0.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 3231740 + timestamp: 1756673029051 +- conda: https://prefix.dev/conda-forge/osx-64/llvm-openmp-21.1.0-hf4e0ed4_0.conda + sha256: 78336131a08990390003ef05d14ecb49f3a47e4dac60b1bcebeccd87fa402925 + md5: 5acc6c266fd33166fa3b33e48665ae0d + depends: + - __osx >=10.13 + constrains: + - openmp 21.1.0|21.1.0.* + - intel-openmp <0.0a0 license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 3201572 - timestamp: 1734520399290 -- conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c + size: 311174 + timestamp: 1756673275570 +- conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-21.1.0-hbb9b287_0.conda + sha256: c6750073a128376a14bedacfa90caab4c17025c9687fcf6f96e863b28d543af4 + md5: e57d95fec6eaa747e583323cba6cfe5c depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - intel-openmp <0.0a0 + - openmp 21.1.0|21.1.0.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 281251 - timestamp: 1734520462311 -- conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.43.0-py310h1a6248f_1.conda - sha256: 071ce1a0fed522a19990b1cb49cba01d5b03f0e851a1ea0c364622267e32bca1 - md5: 8153f0ba820cca5bae3101d1bc178d95 + size: 286039 + timestamp: 1756673290280 +- conda: https://prefix.dev/conda-forge/win-64/llvm-openmp-20.1.8-hfa2b4ca_2.conda + sha256: 8970b7f9057a1c2c18bfd743c6f5ce73b86197d7724423de4fa3d03911d5874b + md5: 2dc2edf349464c8b83a576175fc2ad42 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - intel-openmp <0.0a0 + - openmp 20.1.8|20.1.8.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 344490 + timestamp: 1756145011384 +- conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py310h0070a79_2.conda + sha256: 940bd7c22fffa353d81e18733edccb2c8ad521e23d0664903d74fea5770699db + md5: 4e6c6bd57677c4500f95fb7b0aebaeb5 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libllvm14 >=14.0.6,<14.1.0a0 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -7108,99 +9284,129 @@ packages: license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping - size: 3379851 - timestamp: 1725305141536 -- conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.43.0-py310h9fcfb1b_1.conda - sha256: e14de4383b9b7ddbe80c0033d74583d57f90817f0916ed10d4daa7cc0b07500f - md5: 68a060bfb18c7de4537dfb79cb2a90a7 + size: 29982450 + timestamp: 1756303853510 +- conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda + sha256: 04d493d696a4d5dfef213b28b8f88c37e5ba90e24c8a913d9fbc5c02ea0637d1 + md5: dd0d7947635c0c524608eab7db55dcc9 depends: - - __osx >=11.0 - - libcxx >=17 - - libllvm14 >=14.0.6,<14.1.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 - libzlib >=1.3.1,<2.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping - size: 305736 - timestamp: 1725305540839 -- conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.43.0-py310h0288bfe_1.conda - sha256: 3eed3f0b475d698ff947b8d97b4d8e73fd047ee80b416f5c6c052d74afd25971 - md5: f8adf34c61cc1e8f532f7d7f5c04c34f - depends: + size: 30035217 + timestamp: 1756303805237 +- conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py310h06366c5_2.conda + sha256: 51f221061ef14811bf847895e863455bc6322e9172cd9ab5d6f349365ac356ab + md5: b1aebb976e47903b4e519e0ef3164fbc + depends: + - __osx >=10.13 + - libcxx >=19 - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - vs2015_runtime license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/llvmlite?source=hash-mapping - size: 17050042 - timestamp: 1725305419951 -- conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 - sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 - md5: 91e27ef3d05cc772ce627e51cff111c4 - depends: - - python >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* + size: 20296651 + timestamp: 1756303933672 +- conda: https://prefix.dev/conda-forge/osx-64/llvmlite-0.44.0-py313h270e054_2.conda + sha256: c33c1c48fe06dd5c9eb0e13b7bdfee6457586377d604724eecea85384e276d52 + md5: d0e1617bb62f82db19d7d91d935fec7e + depends: + - __osx >=10.13 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/locket?source=hash-mapping - size: 8250 - timestamp: 1650660473123 -- conda: https://prefix.dev/conda-forge/linux-64/lz4-4.3.3-py310h80b8a69_2.conda - sha256: 7a1807e906846b633e0e2aeba720edf4f98df8d6bb886ddcc091fa0e3a622139 - md5: 2b8aa03bc9deca99d7e5d26ce27bb93d + - pkg:pypi/llvmlite?source=hash-mapping + size: 20369521 + timestamp: 1756303962090 +- conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py310h5fad91f_2.conda + sha256: 0184714eb7aba35e6e3560182ebda280f09d821d4de96a139b475bd2a3371579 + md5: 8f7f7796969f9450bacddf5a28c516d2 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - lz4-c >=1.10.0,<1.11.0a0 + - __osx >=11.0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - license: BSD-3-Clause + license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/lz4?source=hash-mapping - size: 37364 - timestamp: 1733474410247 -- conda: https://prefix.dev/conda-forge/osx-arm64/lz4-4.3.3-py310hedecf87_2.conda - sha256: 821f9c9c433c208b02ba74c13c29bbe6905424df4d0719fda21cda7772a63f3a - md5: 20b4807d8bc4dede3533bb43f340d46e + - pkg:pypi/llvmlite?source=hash-mapping + size: 18827479 + timestamp: 1756304203833 +- conda: https://prefix.dev/conda-forge/osx-arm64/llvmlite-0.44.0-py313h9cecdfe_2.conda + sha256: b39ae218601a144d46fdb204082bf51022ac1d82dd2d85d7e301b67a3b3d7bac + md5: 80f05f56235a0566043ff99cade90e9e depends: - __osx >=11.0 - - lz4-c >=1.10.0,<1.11.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - license: BSD-3-Clause + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/lz4?source=hash-mapping - size: 102597 - timestamp: 1733474460262 -- conda: https://prefix.dev/conda-forge/win-64/lz4-4.3.3-py310hd8baafb_2.conda - sha256: 778a895ab9909274dc57b7bc16cbf8f1e3980bccb7bb0111f16e3aec6b1c39d8 - md5: 3546f20f09fb9d3f5eaf764f87fb79f0 + - pkg:pypi/llvmlite?source=hash-mapping + size: 18910470 + timestamp: 1756304067106 +- conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py310hab3ae16_2.conda + sha256: a9a0c4e651ed55af97eb9106c8a3affe121da306648fa82b12901e95b54c2559 + md5: 297a927d0dd82b25e3df2cfb79e4b109 depends: - - lz4-c >=1.10.0,<1.11.0a0 + - libzlib >=1.3.1,<2.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 18041836 + timestamp: 1756304242969 +- conda: https://prefix.dev/conda-forge/win-64/llvmlite-0.44.0-py313hc403fe3_2.conda + sha256: 858ed800a10acad21e9c78c437cdde468e82e7f777302fbfb18acd58d79a9b7c + md5: cd74b3d6627a626e258189b1bdeaaa0a + depends: + - libzlib >=1.3.1,<2.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/llvmlite?source=hash-mapping + size: 18120933 + timestamp: 1756304055430 +- conda: https://prefix.dev/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 + sha256: 9afe0b5cfa418e8bdb30d8917c5a6cec10372b037924916f1f85b9f4899a67a6 + md5: 91e27ef3d05cc772ce627e51cff111c4 + depends: + - python >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* + license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/lz4?source=hash-mapping - size: 39891 - timestamp: 1733474751459 + - pkg:pypi/locket?source=hash-mapping + size: 8250 + timestamp: 1650660473123 - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -7213,29 +9419,6 @@ packages: purls: [] size: 167055 timestamp: 1733741040117 -- conda: https://prefix.dev/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 - md5: 01511afc6cc1909c5303cf31be17b44f - depends: - - __osx >=11.0 - - libcxx >=18 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 148824 - timestamp: 1733741047892 -- conda: https://prefix.dev/conda-forge/win-64/lz4-c-1.10.0-h2466b09_1.conda - sha256: 632cf3bdaf7a7aeb846de310b6044d90917728c73c77f138f08aa9438fc4d6b5 - md5: 0b69331897a92fac3d8923549d48d092 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 139891 - timestamp: 1733741168264 - conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a md5: fee3164ac23dfca50cfcc8b85ddefb81 @@ -7280,6 +9463,36 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 24856 timestamp: 1733219782830 +- conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py310h8e2f543_1.conda + sha256: c3f9a8738211c82e831117f2c5161dc940295aa251ec0f7ed466bced6f861360 + md5: 946e287b30b11071874906e8b87b437c + depends: + - __osx >=10.13 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 22219 + timestamp: 1733219861095 +- conda: https://prefix.dev/conda-forge/osx-64/markupsafe-3.0.2-py313h717bdf5_1.conda + sha256: 297242943522a907c270bc2f191d16142707d970541b9a093640801b767d7aa7 + md5: a6fbde71416d6eb9898fcabf505a85c5 + depends: + - __osx >=10.13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 24363 + timestamp: 1733219815199 - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda sha256: d907e2b7264ae060c0b79ad4accd7b79a59d43ca75c3ba107e534cd0d58115b5 md5: f6483697076f2711e6a54031a54314b6 @@ -7369,18 +9582,18 @@ packages: - pkg:pypi/mccabe?source=hash-mapping size: 12934 timestamp: 1733216573915 -- conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449 - md5: af2060041d4f3250a7eb6ab3ec0e549b +- conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + sha256: 123cc004e2946879708cdb6a9eff24acbbb054990d6131bb94bca7a374ebebfc + md5: 1997a083ef0b4c9331f9191564be275e depends: - - markdown-it-py >=1.0.0,<4.0.0 - - python >=3.9 + - markdown-it-py >=2.0.0,<5.0.0 + - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/mdit-py-plugins?source=hash-mapping - size: 42180 - timestamp: 1733854816517 + size: 43805 + timestamp: 1754946862113 - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -7392,60 +9605,141 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - sha256: 77906b0acead8f86b489da46f53916e624897338770dbf70b04b8f673c9273c1 - md5: 1459379c79dda834673426504d52b319 +- conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + sha256: 1e59d0dc811f150d39c2ff2da930d69dcb91cb05966b7df5b7d85133006668ed + md5: e4ab075598123e783b788b995afbdad0 depends: - _openmp_mutex * *_llvm - _openmp_mutex >=4.5 - - llvm-openmp >=19.1.2 + - llvm-openmp >=20.1.8 - tbb 2021.* license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] - size: 124718448 - timestamp: 1730231808335 -- conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - sha256: 20e52b0389586d0b914a49cd286c5ccc9c47949bed60ca6df004d1d295f2edbd - md5: 302dff2807f2927b3e9e0d19d60121de + size: 124988693 + timestamp: 1753975818422 +- conda: https://prefix.dev/conda-forge/osx-64/mkl-2023.2.0-h694c41f_50502.conda + sha256: 1841842ed23ddd61fd46b2282294b1b9ef332f39229645e1331739ee8c2a6136 + md5: 0bdfc939c8542e0bc6041cbd9a900219 + depends: + - _openmp_mutex * *_kmp_* + - _openmp_mutex >=4.5 + - tbb 2021.* + license: LicenseRef-ProprietaryIntel + license_family: Proprietary + purls: [] + size: 119058457 + timestamp: 1757091004348 +- conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_15.conda + sha256: 592e17e20bb43c3e30b58bb43c9345490a442bff1c6a6236cbf3c39678f915af + md5: 5d760433dc75df74e8f9ede69d11f9ec depends: - intel-openmp 2024.* - tbb 2021.* license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] - size: 103106385 - timestamp: 1730232843711 -- conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda - sha256: 80bb8601139177f4dab0d830993de9769bc6f1db13d275e5dbcf5d6568b6e337 - md5: 080f68e04d194abdba4a0a6a5178bf61 + size: 102928701 + timestamp: 1753396273118 +- conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h57928b3_16.conda + sha256: ce841e7c3898764154a9293c0f92283c1eb28cdacf7a164c94b632a6af675d91 + md5: 5cddc979c74b90cf5e5cda4f97d5d8bb + depends: + - llvm-openmp >=20.1.8 + - tbb 2021.* + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 103088799 + timestamp: 1753975600547 +- conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h0158d43_1.conda + sha256: f4824c1f7f7b6c1311f015004ad5b14ff74d687fad1563adcd8e86279904b26b + md5: e08de3754f2fea5b1ae3d187fe15d271 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.21,<3 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + license: MPL-2.0 AND Apache-2.0 + purls: + - pkg:pypi/ml-dtypes?source=hash-mapping + size: 296079 + timestamp: 1756742276843 +- conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py313h08cd8bf_1.conda + sha256: 8c69ea0b0a7ac92b20db9f184a31dca3df6edfbfb4f90524e0161b40834162a4 + md5: 1a3358c00ba415f530d034e1da03cfb3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MPL-2.0 AND Apache-2.0 + purls: + - pkg:pypi/ml-dtypes?source=hash-mapping + size: 293961 + timestamp: 1756742332928 +- conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py310he8aef2f_1.conda + sha256: 898dbf078c53769a8a6eb7c648a6766365d119ecc18236e66ea8973c8a3e7b54 + md5: e3989434f961acf21c35838ed873e533 + depends: + - __osx >=10.13 + - libcxx >=19 + - numpy >=1.21,<3 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: MPL-2.0 AND Apache-2.0 purls: - pkg:pypi/ml-dtypes?source=hash-mapping - size: 283388 - timestamp: 1736538961486 -- conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda - sha256: a75c01da122fc1043e32adba9094922afc5f758ddaea47f5e56e0c111123294b - md5: 23c80623fc06fa0fa60237b14674cc69 + size: 229391 + timestamp: 1756742395420 +- conda: https://prefix.dev/conda-forge/osx-64/ml_dtypes-0.5.1-py313h366a99e_1.conda + sha256: c6f6ba239baa1a39d680c284bb7bd8815005d472a50acae47ef5b742f0773c88 + md5: 41bccb9fbc18d20ebd5f421809c635a0 + depends: + - __osx >=10.13 + - libcxx >=19 + - numpy >=1.23,<3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MPL-2.0 AND Apache-2.0 + purls: + - pkg:pypi/ml-dtypes?source=hash-mapping + size: 227288 + timestamp: 1756742481309 +- conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h03dc5a2_1.conda + sha256: 5c14533faf1d72da725036143d1510e495f6698a9f4c2a0386b59fab3a2d7f6b + md5: 7a4277db412d645d13cdf0952b6af39e depends: - __osx >=11.0 - - libcxx >=18 - - numpy >=1.19,<3 + - libcxx >=19 + - numpy >=1.21,<3 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: MPL-2.0 AND Apache-2.0 purls: - pkg:pypi/ml-dtypes?source=hash-mapping - size: 202079 - timestamp: 1736539243508 + size: 204146 + timestamp: 1756742542224 +- conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py313hd1f53c0_1.conda + sha256: 89107f593e8966c9ccc57c0a9865b29277baa84b84f4dbd48b8dc2fa14e6773a + md5: 08f78180360648c9d06e856c1bc2474b + depends: + - __osx >=11.0 + - libcxx >=19 + - numpy >=1.23,<3 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MPL-2.0 AND Apache-2.0 + purls: + - pkg:pypi/ml-dtypes?source=hash-mapping + size: 205125 + timestamp: 1756742819060 - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 md5: aa14b9a5196a6d8dd364164b7ce56acf @@ -7459,6 +9753,18 @@ packages: purls: [] size: 116777 timestamp: 1725629179524 +- conda: https://prefix.dev/conda-forge/osx-64/mpc-1.3.1-h9d8efa1_1.conda + sha256: dcf91571da6c2f0db96d43a1b639047def05a0e1b6436d42c9129ab14af47b10 + md5: 0520855aaae268ea413d6bc913f1384c + depends: + - __osx >=10.13 + - gmp >=6.3.0,<7.0a0 + - mpfr >=4.2.1,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 107774 + timestamp: 1725629348601 - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda sha256: 2700899ad03302a1751dbf2bca135407e470dd83ac897ab91dd8675d4300f158 md5: a5635df796b71f6ca400fc7026f50701 @@ -7483,6 +9789,17 @@ packages: purls: [] size: 634751 timestamp: 1725746740014 +- conda: https://prefix.dev/conda-forge/osx-64/mpfr-4.2.1-haed47dc_3.conda + sha256: dddb6721dff05b8dfb654c532725330231fcb81ff1e27d885ee0cdcc9fccf1c4 + md5: d511e58aaaabfc23136880d9956fa7a6 + depends: + - __osx >=10.13 + - gmp >=6.3.0,<7.0a0 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 373396 + timestamp: 1725746891597 - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda sha256: 4463e4e2aba7668e37a1b8532859191b4477a6f3602a5d6b4d64ad4c4baaeac5 md5: 4e4ea852d54cc2b869842de5044662fb @@ -7505,65 +9822,92 @@ packages: - pkg:pypi/mpmath?source=hash-mapping size: 439705 timestamp: 1733302781386 -- conda: https://prefix.dev/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda - sha256: 73ca5f0c7d0727a57dcc3c402823ce3aa159ca075210be83078fcc485971e259 - md5: 6b586fb03d84e5bfbb1a8a3d9e2c9b60 +- conda: https://prefix.dev/conda-forge/linux-64/mypy-1.17.1-py313h07c4f96_1.conda + sha256: 088e81f6a8c591a62cfe0e12a519270f6f6d57f7db0506f7db4fafb4d5ee775c + md5: afdc470e9e001e81056bcdbb4b713393 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: Apache + - libgcc >=14 + - mypy_extensions >=1.0.0 + - pathspec >=0.9.0 + - psutil >=4.0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing_extensions >=4.6.0 + license: MIT + license_family: MIT purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 98083 - timestamp: 1725975111763 -- conda: https://prefix.dev/conda-forge/osx-arm64/msgpack-python-1.1.0-py310h7306fd8_0.conda - sha256: 4736de9b2a239b202749881c8fa690dc5c882198cc2a2a8460567f0b9994e98e - md5: 85b4e3f64bf1fdc6f7d210a7c34037f9 + - pkg:pypi/mypy?source=hash-mapping + size: 17377731 + timestamp: 1756323329632 +- conda: https://prefix.dev/conda-forge/osx-64/mypy-1.17.1-py313h585f44e_1.conda + sha256: c542e599c13f14483dcc8a5b047234ed5a8857b749ef5c64b4d112932c1bb45b + md5: 937695599b12743fbb7d3c05dc6e2e31 + depends: + - __osx >=10.13 + - mypy_extensions >=1.0.0 + - pathspec >=0.9.0 + - psutil >=4.0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing_extensions >=4.6.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping + size: 11260508 + timestamp: 1756323441543 +- conda: https://prefix.dev/conda-forge/osx-arm64/mypy-1.17.1-py313hcdf3177_1.conda + sha256: b251e5d93aa0a7e6ad5e31f8d995917be22a2415ce948ef8fdafef140b7cab28 + md5: ac213ad2563d52bec17c24dbc6519373 depends: - __osx >=11.0 - - libcxx >=17 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: Apache + - mypy_extensions >=1.0.0 + - pathspec >=0.9.0 + - psutil >=4.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - typing_extensions >=4.6.0 + license: MIT + license_family: MIT purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 84604 - timestamp: 1725975212736 -- conda: https://prefix.dev/conda-forge/win-64/msgpack-python-1.1.0-py310hc19bc0b_0.conda - sha256: db5c3d5e2d28ba0e4e1633f6d52079f0e397bdb60a6f58a2fa942e88071182d2 - md5: 2cfcbd596afd76879de4824c2c24f4a2 + - pkg:pypi/mypy?source=hash-mapping + size: 10504305 + timestamp: 1756323087978 +- conda: https://prefix.dev/conda-forge/win-64/mypy-1.17.1-py313h5ea7bf4_1.conda + sha256: 0f5743cac27674a36e20dbd5da0008a914d872772e1075edc47d62834e09f7c8 + md5: cc747cc234985a1d09aaf58446188037 depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 + - mypy_extensions >=1.0.0 + - pathspec >=0.9.0 + - psutil >=4.0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing_extensions >=4.6.0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 82057 - timestamp: 1725975615063 -- conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - sha256: 1895f47b7d68581a6facde5cb13ab8c2764c2e53a76bd746f8f98910dc4e08fe - md5: 29097e7ea634a45cc5386b95cac6568f + - pkg:pypi/mypy?source=hash-mapping + size: 8501703 + timestamp: 1756322862005 +- conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 + md5: e9c622e0d00fa24a6292279af3ab6d06 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/mypy-extensions?source=hash-mapping - size: 10854 - timestamp: 1733230986902 -- conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - sha256: 9d93483bf59b4d550577b40e2bc3f39e81fdcb34533f03a6da05b0adad34526e - md5: fbc398f13e5f5a90f9065eaa5d91a28f + size: 11766 + timestamp: 1745776666688 +- conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.1-pyhd8ed1ab_0.conda + sha256: f035d0ea623f63247f0f944eb080eaa2a45fb5b7fda8947f4ac94d381ef3bf33 + md5: b528795158847039003033ee0db20e9b depends: - docutils >=0.19,<0.22 - jinja2 @@ -7576,27 +9920,49 @@ packages: license_family: MIT purls: - pkg:pypi/myst-parser?source=hash-mapping - size: 72901 - timestamp: 1734472043484 -- conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 - md5: 04b34b9a40cdc48cfdab261ab176ff74 + size: 73074 + timestamp: 1739381945342 +- conda: https://prefix.dev/conda-forge/linux-64/nccl-2.27.7.1-h49b9d9a_2.conda + sha256: e0acd3a0489132c0dbabf03aaea0426c20e7d48c4237f7fc75e332de9a506dd7 + md5: fcb8fe3af416ef1fc394f194b3f322cb + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<13.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 213739107 + timestamp: 1755801648089 +- conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 license: X11 AND BSD-3-Clause purls: [] - size: 894452 - timestamp: 1736683239706 -- conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 - md5: f6f7c5b7d0983be186c46c4f6f8f9af8 + size: 891641 + timestamp: 1738195959188 +- conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda + sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9 + md5: ced34dd9929f491ca6dab6a2927aff25 + depends: + - __osx >=10.13 + license: X11 AND BSD-3-Clause + purls: [] + size: 822259 + timestamp: 1738196181298 +- conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae depends: - __osx >=11.0 license: X11 AND BSD-3-Clause purls: [] - size: 796754 - timestamp: 1736683572099 + size: 797030 + timestamp: 1738196177597 - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 md5: fd40bf7f7f4bc4b647dc8512053d9873 @@ -7610,65 +9976,85 @@ packages: - pandas >=2.0 license: BSD-3-Clause license_family: BSD - purls: [] + purls: + - pkg:pypi/networkx?source=hash-mapping size: 1265008 timestamp: 1731521053408 -- conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - sha256: 3636eec0e60466a00069b47ce94b6d88b01419b6577d8e393da44bb5bc8d3468 - md5: 7ba3f09fceae6a120d664217e58fe686 +- conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda + sha256: 02019191a2597865940394ff42418b37bc585a03a1c643d7cea9981774de2128 + md5: 16bff3d37a4f99e3aa089c36c2b8d650 depends: - - python >=3.9 - - setuptools + - python >=3.11 + - python + constrains: + - numpy >=1.25 + - scipy >=1.11.2 + - matplotlib >=3.8 + - pandas >=2.0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/nodeenv?source=hash-mapping - size: 34574 - timestamp: 1734112236147 -- conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.12.0-hf235a45_0.conda - sha256: 1a519b80bc3d5afddeccb593711df2e60ac48ecf3e903f7bdc279f64f7210fc4 - md5: 30458a23bf5568d2bc0e1fed6a4e2b12 + - pkg:pypi/networkx?source=hash-mapping + size: 1564462 + timestamp: 1749078300258 +- conda: https://prefix.dev/conda-forge/linux-64/nodejs-24.4.1-heeeca48_0.conda + sha256: 1239ba36ea69eefcc55f107fe186810b59488923544667175f6976fa4903c8c9 + md5: d629b201c3fbc0c203ca0ad7b03f22ce depends: + - libgcc >=14 - __glibc >=2.28,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libuv >=1.51.0,<2.0a0 - icu >=75.1,<76.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libuv >=1.49.2,<2.0a0 + - openssl >=3.5.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 25669735 + timestamp: 1752839464718 +- conda: https://prefix.dev/conda-forge/osx-64/nodejs-24.4.1-h2e7699b_0.conda + sha256: 1c9571726b5b5e85acfba50dda7ae9b22d2b29e590159a581bafde5bf2e04621 + md5: 9993063cfe84cf1fa928c7d021bd01a0 + depends: + - __osx >=10.15 + - libcxx >=19 + - openssl >=3.5.1,<4.0a0 + - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zlib + - icu >=75.1,<76.0a0 license: MIT license_family: MIT purls: [] - size: 21796933 - timestamp: 1734113054756 -- conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.12.0-h02a13b7_0.conda - sha256: 0d6f31cf19a3671aa7a6473392447801b4231ec832c8526b9a975b5c01930343 - md5: 293e451c0590d9029036f58aa109bc5d + size: 18918546 + timestamp: 1752839437994 +- conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-24.4.1-hab9d20b_0.conda + sha256: c79d2c81f80a9adedc77362f2e8b10879ed0f9806deb6ba2464c1287a05f0b9b + md5: 463a537de602f8558604f27395b323d0 depends: + - libcxx >=19 - __osx >=11.0 + - openssl >=3.5.1,<4.0a0 + - libuv >=1.51.0,<2.0a0 - icu >=75.1,<76.0a0 - - libcxx >=18 - - libuv >=1.49.2,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zlib license: MIT license_family: MIT purls: [] - size: 15429539 - timestamp: 1734125056499 -- conda: https://prefix.dev/conda-forge/win-64/nodejs-22.12.0-hfeaa22a_0.conda - sha256: 43d728b5d56ffeea5e95308218d7045acabcd318ced6ad4f2e89f295666aadda - md5: 4e1fa4ec4147ec961f75a3b6f7a558af + size: 17949155 + timestamp: 1752839389217 +- conda: https://prefix.dev/conda-forge/win-64/nodejs-24.4.1-he453025_0.conda + sha256: 1bb0d9e370bb0ffa2071ccfdd0ef3cb90bd183b07c67b646d1aa5c743004d233 + md5: cde0d5793a73ab343b5764fa6c002771 license: MIT license_family: MIT purls: [] - size: 26256775 - timestamp: 1734108943224 -- conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - sha256: 6c36ec2f56105bd6bfe572b8ce7b6b4eb770a2c3db3655d99ead99c5a8b1a5d7 - md5: 17efc155ae707cdc9fe2970ebd74ee01 + size: 29967122 + timestamp: 1752839409586 +- conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.18.0-pyhd8ed1ab_0.conda + sha256: d3e3ce1945e1656959f2fb471a953b796783f2adc64d1f09aebddbc9d4171c25 + md5: dc6cbe92066444d24ebac0c4d2a1d755 depends: - nodejs - python >=3.9 @@ -7676,8 +10062,8 @@ packages: license_family: MIT purls: - pkg:pypi/nodejs-wheel-binaries?source=hash-mapping - size: 11810 - timestamp: 1736400170073 + size: 12388 + timestamp: 1754049967477 - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b md5: 9a66894dfd07c4510beb6b3f9672ccc0 @@ -7688,86 +10074,236 @@ packages: purls: [] size: 3843 timestamp: 1582593857545 -- conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - sha256: c76c5baa087c2be3374bdb5eee37caf0c70f390c02a48aeb5e4337b600e5e319 - md5: 73e2e2c0ffad216572ce01952ff0099c +- conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py310h8648a56_1.conda + sha256: f0dbc2d41eb824b5844c0c4669a5a53b9150d6456a08586cc89d6a1365968e5b + md5: 2afbd07f918c7e8695390bf9bf686127 depends: + - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - llvmlite >=0.43.0,<0.44.0a0 - - numpy >=1.19,<3 - - numpy >=1.22.3,<2.1 + - libgcc >=13 + - libstdcxx >=13 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 constrains: - cuda-version >=11.2 - libopenblas !=0.3.6 - scipy >=1.0 + - cuda-python >=11.6 + - tbb >=2021.6.0 + - cudatoolkit >=11.2 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 4458840 + timestamp: 1749491464792 +- conda: https://prefix.dev/conda-forge/linux-64/numba-0.61.2-py313h50b8c88_1.conda + sha256: e588053a9d8e73fd68a0cdc00b9893800258f376175ed91a05de162a235099f9 + md5: 53c79b7cdee329ed4c77cafe27600cdb + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=13 + - libstdcxx >=13 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - cuda-version >=11.2 + - scipy >=1.0 - tbb >=2021.6.0 - cuda-python >=11.6 - cudatoolkit >=11.2 + - libopenblas !=0.3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 5864595 + timestamp: 1749491444304 +- conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py310hf491a08_1.conda + sha256: 405a8d18423b88f867dfd6e2d3002987fa92c2ab09eabfe9572d4cdd4f2af386 + md5: 3cf2452d3f15fe9678d295a8caeeded9 + depends: + - __osx >=10.13 + - libcxx >=18 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.6 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - scipy >=1.0 + - cuda-python >=11.6 + - cudatoolkit >=11.2 + - tbb >=2021.6.0 + - cuda-version >=11.2 + - libopenblas !=0.3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 4454414 + timestamp: 1749491559843 +- conda: https://prefix.dev/conda-forge/osx-64/numba-0.61.2-py313h1997fa5_1.conda + sha256: dff2f79d11dfa45fbaec3bb251aa8db0683de3baeeeeb51367dbbadbcb628e57 + md5: 65b3f71087b10e9150a9951cfbf708ca + depends: + - __osx >=10.13 + - libcxx >=18 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.6 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - cudatoolkit >=11.2 + - libopenblas !=0.3.6 + - scipy >=1.0 + - cuda-version >=11.2 + - tbb >=2021.6.0 + - cuda-python >=11.6 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/numba?source=hash-mapping - size: 4376821 - timestamp: 1718888164099 -- conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda - sha256: e2f17dfeaa7723df84b744108c3cf17fb68d12dff46d91612612a1a820ca6910 - md5: 830470caad249f1877e622820dca4e2a + size: 5859194 + timestamp: 1749491756251 +- conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py310hd3faf9e_1.conda + sha256: 325861c6b73eb15055181a6dcacbc2d119b3ea6d5b270c2736d6a8d10b9daa5d + md5: 25eef44932bf432d6d9bd7c36bd34d7d depends: - __osx >=11.0 - - libcxx >=16 - - llvm-openmp >=16.0.6 - - llvm-openmp >=18.1.7 - - llvmlite >=0.43.0,<0.44.0a0 - - numpy >=1.19,<3 - - numpy >=1.22.3,<2.1 + - libcxx >=18 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.6 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 constrains: + - cuda-version >=11.2 + - scipy >=1.0 + - libopenblas >=0.3.18,!=0.3.20 + - tbb >=2021.6.0 - cuda-python >=11.6 + - cudatoolkit >=11.2 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 4466638 + timestamp: 1749491696619 +- conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.61.2-py313h2c0ffef_1.conda + sha256: 0b016b7ba300d2dc6e4368ba3bacfb669314ba62ac3b4af085e8a7f89b0a8d66 + md5: 1cfd5dddb323637cbe0c5d3dc7d435bd + depends: + - __osx >=11.0 + - libcxx >=18 + - llvm-openmp >=18.1.8 + - llvm-openmp >=20.1.6 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: - scipy >=1.0 - tbb >=2021.6.0 - cuda-version >=11.2 + - libopenblas >=0.3.18,!=0.3.20 + - cuda-python >=11.6 - cudatoolkit >=11.2 - - libopenblas >=0.3.18, !=0.3.20 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/numba?source=hash-mapping - size: 4357036 - timestamp: 1718888347041 -- conda: https://prefix.dev/conda-forge/win-64/numba-0.60.0-py310h7793332_0.conda - sha256: 65cbc4fd3e29bb98f68fc694640546f37929c4766def46796579d7488ef9b714 - md5: 7bf58dbea05720f25c5b1fe99cac026c + size: 5861355 + timestamp: 1749491613900 +- conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py310h9216ec7_1.conda + sha256: 767dc18efd6b9064fbe91ea64730a8c5d3a5139b17c02a22471a6c01f212f0ec + md5: ccdce0c10400c754201874c3b1c17870 depends: - - llvmlite >=0.43.0,<0.44.0a0 - - numpy >=1.19,<3 - - numpy >=1.22.3,<2.1 + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 constrains: - - cudatoolkit >=11.2 + - cuda-version >=11.2 - cuda-python >=11.6 + - cudatoolkit >=11.2 - scipy >=1.0 + - tbb >=2021.6.0 + - libopenblas !=0.3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/numba?source=hash-mapping + size: 4455002 + timestamp: 1749491788514 +- conda: https://prefix.dev/conda-forge/win-64/numba-0.61.2-py313h96c6e06_1.conda + sha256: 46a95d1ab0b78c86c55bbae391b3eb93c02d74a4d90560e0689bf21df30bfa7a + md5: 1d18197b42fb5e2b27d3add6b12636ee + depends: + - llvmlite >=0.44.0,<0.45.0a0 + - numpy >=1.21,<3 + - numpy >=1.24,<2.3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: - cuda-version >=11.2 + - cuda-python >=11.6 + - scipy >=1.0 - libopenblas !=0.3.6 + - cudatoolkit >=11.2 - tbb >=2021.6.0 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/numba?source=hash-mapping - size: 4370592 - timestamp: 1718888808848 -- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda - sha256: e62a7ea73120834e711becbd5c844ac5aba5b5a3a689a5335a1a0221214c43f2 - md5: 57358466a280269a77f9539010a9d888 + size: 5853293 + timestamp: 1749491863717 +- conda: https://prefix.dev/conda-forge/linux-64/numpy-1.22.0-py310h454958d_1.tar.bz2 + sha256: 8f5a9c1feed1d6062a6d731a62e9fadc52e801789125e8d1a2cea6966aedd411 + md5: 607c66f0cce2986515a8fe9e136b2b57 + depends: + - libblas >=3.8.0,<4.0a0 + - libcblas >=3.8.0,<4.0a0 + - libgcc-ng >=9.4.0 + - liblapack >=3.8.0,<4.0a0 + - libstdcxx-ng >=9.4.0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 20333181 + timestamp: 1642632736818 +- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda + sha256: 0ba94a61f91d67413e60fa8daa85627a8f299b5054b0eff8f93d26da83ec755e + md5: b0cea2c364bf65cd19e023040eeab05d depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -7783,11 +10319,11 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7767225 - timestamp: 1732314820024 -- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py310h5851e9f_0.conda - sha256: 40d29714ef11d22f5c452ff856e03f47d9824c1ee1bf19f46c4a473dcd1b7cd8 - md5: d38cb65becc66134ed42a02e6155e8e0 + size: 7893263 + timestamp: 1747545075833 +- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.6-py313h17eae1a_0.conda + sha256: 7da9ebd80a7311e0482c4c6393be0eddf0012b3846df528e375037409b3d2b3d + md5: 7a2d2f9adecd86ed5c29c2115354f615 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -7795,6 +10331,66 @@ packages: - libgcc >=13 - liblapack >=3.9.0,<4.0a0 - libstdcxx >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8517250 + timestamp: 1747545080496 +- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_2.conda + sha256: dc99944cc1ab9b1939fc94ca0ad3e7629ff4b8fd371a5c94a153e6a66af5aa0d + md5: 67d27f74a90f5f0336035203f91a0abc + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8890327 + timestamp: 1756343073222 +- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.3.2-py313hfc84e54_2.conda + sha256: 48060a9826e1466675f7f022f437badb8f1ea216c1f48acfa5d7697e17ff2aba + md5: 1bf8cf9c409715b43470ed5d827e4e2a + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313t + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8936779 + timestamp: 1756343074266 +- conda: https://prefix.dev/conda-forge/osx-64/numpy-1.22.0-py310hfbbbacf_1.tar.bz2 + sha256: 314f87226d04969a8cf6444a547b8437c5a45869acedb0d9adca9d18b0b0db80 + md5: 6c533068089d17205d21055ed717831e + depends: + - libblas >=3.8.0,<4.0a0 + - libcblas >=3.8.0,<4.0a0 + - libcxx >=11.1.0 + - liblapack >=3.8.0,<4.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 constrains: @@ -7803,18 +10399,36 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7912254 - timestamp: 1734904849824 -- conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - sha256: 53c5baea29d111126b6dbe969ac1c36d481740f0f91babe6cfd121b8d9d8e67f - md5: bacc73d89e22828efedf31fdc4b54b4e + size: 6861771 + timestamp: 1642633197594 +- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py310h07c5b4d_0.conda + sha256: f1851c5726ff1a4de246e385ba442d749a68ef39316c834933ee9b980dbe62df + md5: d79253493dcc76b95221588b98e1eb3c depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=10.13 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6988856 + timestamp: 1747545137089 +- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py313hc518a0f_0.conda + sha256: a7994c4968d9cbb12752663e57f600379775b1f032776829068380db9874e449 + md5: 7b80c7ace05b1b9d7ec6f55130776988 + depends: + - __osx >=10.13 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=13 - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 constrains: @@ -7823,16 +10437,53 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 8478406 - timestamp: 1734904713763 -- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.0.2-py310h530be0a_1.conda - sha256: 54fcdfc53cfc55538dc4c3e8f47af421e697a4ce66ef051c98f50413137a6689 - md5: 0200a832a125f14d5a20cc0512ebc575 + size: 7596354 + timestamp: 1747545051328 +- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313h6157c7f_2.conda + sha256: 0acfc9d69a0a67c84b3eeab1e1f87c0fa39f06f809aa335b3147b2fda138afb4 + md5: ddd9ef05c608889df1c5fb5bdfda4172 depends: - - __osx >=11.0 + - python + - libcxx >=19 + - __osx >=10.13 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313t + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8115107 + timestamp: 1756343065 +- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313hdb1a8e5_2.conda + sha256: 0979cd27685e5c8767547e7dbc7ec5015b8080d85d4f43dd4318d9beb99fd98f + md5: 87843ce61a6baf2cb0d7fad97433f704 + depends: + - python + - libcxx >=19 + - __osx >=10.13 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libcxx >=18 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 8032409 + timestamp: 1756343064663 +- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-1.22.0-py310h567df17_1.tar.bz2 + sha256: 985e83cdda1fb1d0c3ff813381c258818696985d10fd4ccab2b719ea8fdc8652 + md5: 6ecd7326570ae2fb65fa4d8427f64213 + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=11.1.0 - liblapack >=3.9.0,<4.0a0 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython @@ -7843,11 +10494,11 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 5754771 - timestamp: 1732314704107 -- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py310ha1ddda0_0.conda - sha256: 256d88d6620977edcda48b617217257e42ceb9b72d3a55297d1c92e455fe0ccb - md5: ba32b5714d7cac97145b2d015d30c9b8 + size: 6291591 + timestamp: 1642632976128 +- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py310h4d83441_0.conda + sha256: 87704bcd5f4a4f88eaf2a97f07e9825803b58a8003a209b91e89669317523faf + md5: f4bd8ac423d04b3c444b96f2463d3519 depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -7863,11 +10514,11 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 5929029 - timestamp: 1734904776467 -- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - sha256: c6dafb68d407bd4f34a8e178fe37be0c0c6533e6408a066d2cfcdccd6eb63402 - md5: 186189cd83b1b95e73a805a268bc7a98 + size: 5841650 + timestamp: 1747545043441 +- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.6-py313h41a2e72_0.conda + sha256: 2206aa59ee700f00896604178864ebe54ab8e87e479a1707def23636a6a62797 + md5: 6a5bd221d600de2bf1b408678dab01b7 depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -7883,11 +10534,70 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6513050 - timestamp: 1734904817005 -- conda: https://prefix.dev/conda-forge/win-64/numpy-2.0.2-py310h1ec8c79_1.conda - sha256: 2537e8dadd1656d49f55b7f2422bef745a60a308fcf879f2d74dc8338aecb4bb - md5: 4f2239328935b02e9024e25dc21840c3 + size: 6532195 + timestamp: 1747545087365 +- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313h674b998_2.conda + sha256: f3603c74f79a9f8a67eb8f4ce4b678036ca3de6dd329657ae19a298cd956f66e + md5: 9c44ae43d006497eef4ba440820f9997 + depends: + - python + - __osx >=11.0 + - libcxx >=19 + - python 3.13.* *_cp313 + - python_abi 3.13.* *_cp313 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6748521 + timestamp: 1756343067600 +- conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.3.2-py313hc192f47_2.conda + sha256: d2e6b26e2cb2ca26ff8b2c627f8b17ae7079ea50832c917102ce9b2a8f37baa9 + md5: 9fbdd55e1fa0c2faedd9620e060fc781 + depends: + - python + - python 3.13.* *_cp313t + - libcxx >=19 + - __osx >=11.0 + - python_abi 3.13.* *_cp313t + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6818650 + timestamp: 1756343069476 +- conda: https://prefix.dev/conda-forge/win-64/numpy-1.22.0-py310hcae7c84_1.tar.bz2 + sha256: c327b5bcc96e9f06147c03eecba689eb3cfe2478d8e68f17b471b273ee60cf45 + md5: 07f52c684a2387799426a532170152b6 + depends: + - libblas >=3.8.0,<4.0a0 + - libcblas >=3.8.0,<4.0a0 + - liblapack >=3.8.0,<4.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6171270 + timestamp: 1642633334774 +- conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py310h4987827_0.conda + sha256: 6f628e51763b86a535a723664e3aa1e38cb7147a2697f80b75c1980c1ed52f3e + md5: d2596785ac2cf5bab04e2ee9e5d04041 depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -7903,17 +10613,17 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6372921 - timestamp: 1732315310731 -- conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py310hb9d903e_0.conda - sha256: 942ec24291d65e00e718765016b1f6b6be9bc5f09137dc14c21e047b94a09d30 - md5: 25361f25ec68789cea29b14b412970e8 + size: 6596153 + timestamp: 1747545352390 +- conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.6-py313hefb8edb_0.conda + sha256: ee193d2cfbf6bc06fb99312ee2555c40b68402cae44cf101f452acb2f1490f98 + md5: ae9a9741b830bbb42f22f80ef4e6a074 depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 @@ -7923,132 +10633,115 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6420026 - timestamp: 1734905273023 -- conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - sha256: a49b54335d97b674bc09dacce0b232cf748e730500dcc45172f8dd9db3c0fb99 - md5: 80b2f22cec897016e76261aea177fde8 + size: 7097859 + timestamp: 1747545350386 +- conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hce7ae62_2.conda + sha256: 6c10cd2ef2ced4c9c4e2582648505248bb14d8dfa509d1610845fafa877cfa23 + md5: fd183febc421360098ad1052f2239c6b depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - libblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 7460843 + timestamp: 1756343087901 +- conda: https://prefix.dev/conda-forge/win-64/numpy-2.3.2-py313hfb2b801_2.conda + sha256: 726e9d5ae2615f857f92fbbbdbb8942800aa6597e015954a20acd74fac6323ce + md5: 190c9bfc402099ce200e3c913f715a3c + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313t + - libblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7147174 - timestamp: 1734905243335 -- conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - sha256: d836860163b027622cb59b96b92824dd75196a37d599e8ae69733b31769989a9 - md5: 5af206d64d18d6c8dfb3122b4d9e643b + size: 7619726 + timestamp: 1756343089747 +- conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.9.0-pyhe01879c_1.conda + sha256: 9e1f3dda737ac9aeec3c245c5d856d0268c4f64a5293c094298d74bb55e2b165 + md5: 66f9ba52d846feffa1c5d62522324b4f depends: - python >=3.9 - sphinx >=6 - - tabulate >=0.8.10 - tomli >=1.1.0 + - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpydoc?source=hash-mapping - size: 58041 - timestamp: 1733650959971 -- conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 - md5: 9e5816bc95d285c115a3ebc2f8563564 + size: 60220 + timestamp: 1750861325361 +- conda: https://prefix.dev/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + sha256: c9f54d4e8212f313be7b02eb962d0cb13a8dae015683a403d3accd4add3e520e + md5: ffffb341206dd0dab0c36053c048d621 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libpng >=1.6.44,<1.7.0a0 - - libstdcxx >=13 - - libtiff >=4.7.0,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 342988 - timestamp: 1733816638720 -- conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - sha256: 1d59bc72ca7faac06d349c1a280f5cfb8a57ee5896f1e24225a997189d7418c7 - md5: 4b71d78648dbcf68ce8bf22bb07ff838 - depends: - - __osx >=11.0 - - libcxx >=18 - - libpng >=1.6.44,<1.7.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 319362 - timestamp: 1733816781741 -- conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda - sha256: 410175815df192f57a07c29a6b3fdd4231937173face9e63f0830c1234272ce3 - md5: fc050366dd0b8313eb797ed1ffef3a29 - depends: - - libpng >=1.6.44,<1.7.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache purls: [] - size: 240148 - timestamp: 1733817010335 -- conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - sha256: f62f6bca4a33ca5109b6d571b052a394d836956d21b25b7ffd03376abf7a481f - md5: 4ce6875f75469b2757a65e10a5d05e31 + size: 3128847 + timestamp: 1754465526100 +- conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda + sha256: 8be57a11019666aa481122c54e29afd604405b481330f37f918e9fbcd145ef89 + md5: 22f5d63e672b7ba467969e9f8b740ecd depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=10.13 - ca-certificates - - libgcc >=13 license: Apache-2.0 license_family: Apache purls: [] - size: 2937158 - timestamp: 1736086387286 -- conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 - md5: 22f971393637480bda8c679f374d8861 + size: 2743708 + timestamp: 1754466962243 +- conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + sha256: f6d1c87dbcf7b39fad24347570166dade1c533ae2d53c60a70fa4dc874ef0056 + md5: bcb0d87dfbc199d0a461d2c7ca30b3d8 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 2936415 - timestamp: 1736086108693 -- conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - sha256: 519a06eaab7c878fbebb8cab98ea4a4465eafb1e9ed8c6ce67226068a80a92f0 - md5: fb45308ba8bfe1abf1f4a27bad24a743 + size: 3074848 + timestamp: 1754465710470 +- conda: https://prefix.dev/conda-forge/win-64/openssl-3.5.2-h725018a_0.conda + sha256: 2413f3b4606018aea23acfa2af3c4c46af786739ab4020422e9f0c2aec75321b + md5: 150d3920b420a27c0848acca158f94dc depends: - ca-certificates - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: Apache purls: [] - size: 8462960 - timestamp: 1736088436984 -- conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - sha256: 8db3d841c72f184de69e1237b900a2d79c742e30e8378973814543bf987b6bc6 - md5: b94f689d8b1ce7dd212946e0331037ad - depends: - - opt_einsum >=3.4.0,<3.4.1.0a0 - license: MIT - license_family: MIT - purls: [] - size: 6558 - timestamp: 1733688054327 + size: 9275175 + timestamp: 1754467904482 - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda sha256: af71aabb2bfa4b2c89b7b06403e5cec23b418452cae9f9772bd7ac3f9ea1ff44 md5: 52919815cd35c4e1a0298af658ccda04 @@ -8060,141 +10753,156 @@ packages: - pkg:pypi/opt-einsum?source=hash-mapping size: 62479 timestamp: 1733688053334 -- conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda - sha256: dff5cc8023905782c86b3459055f26d4b97890e403b0698477c9fed15d8669cc - md5: 4f6f9f3f80354ad185e276c120eac3f0 +- conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py310h03d9f68_1.conda + sha256: 517b48558d6df513328adcdb19e2203a8f2897d9dbb003d08763d14d6c169c45 + md5: ca5a8a9701dcd6bd0414b6476b6bfda7 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - zstd >=1.5.6,<1.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - typing-extensions >=4.6 license: Apache-2.0 license_family: Apache - purls: [] - size: 1188881 - timestamp: 1735630209320 -- conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda - sha256: cca330695f3bdb8c0e46350c29cd4af3345865544e36f1d7c9ba9190ad22f5f4 - md5: 24b1897c0d24afbb70704ba998793b78 + purls: + - pkg:pypi/optree?source=hash-mapping + size: 409056 + timestamp: 1756812316553 +- conda: https://prefix.dev/conda-forge/linux-64/optree-0.17.0-py313h7037e92_1.conda + sha256: 92118c50c57d288febc75ba8dd92faba93fef965f46dafdd3ba730a8d9d50013 + md5: a0fde45d3a2fec3c020c0c11f553febc depends: - - __osx >=11.0 - - libcxx >=18 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - zstd >=1.5.6,<1.6.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing-extensions >=4.6 license: Apache-2.0 license_family: Apache - purls: [] - size: 438520 - timestamp: 1735630624140 -- conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda - sha256: 35522ebcdd10f9d8600cbffa99efd59053bf2148965cfbb4575680e61c1d41dd - md5: c8abacd8bdb242c9ba9c9a6c7ec09b01 + purls: + - pkg:pypi/optree?source=hash-mapping + size: 457272 + timestamp: 1756812331726 +- conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py310h50c4e7d_1.conda + sha256: 56790109af7db7a1e9f25a00ecf99f09fdcddf86aa9d91fe1da4685d69a35a6d + md5: 1d12ac106a84e969680a28cbb81fb930 depends: - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.6,<1.6.0a0 + - __osx >=10.13 + - libcxx >=19 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - typing-extensions >=4.6 license: Apache-2.0 license_family: Apache - purls: [] - size: 902551 - timestamp: 1735630416110 -- conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 - md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa + purls: + - pkg:pypi/optree?source=hash-mapping + size: 383374 + timestamp: 1756812394150 +- conda: https://prefix.dev/conda-forge/osx-64/optree-0.17.0-py313hc551f4f_1.conda + sha256: aaa4bdb0fe35741bed081933767aac6c583312b9f852fb7bbb291a866e5b1366 + md5: 5a0c3cd49267066b40828a75563eb930 depends: - - python >=3.8 + - __osx >=10.13 + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing-extensions >=4.6 license: Apache-2.0 - license_family: APACHE + license_family: Apache purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60164 - timestamp: 1733203368787 -- conda: https://prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda - sha256: d772223fd1ca882717ec6db55a13a6be9439c64ca3532231855ce7834599b8a5 - md5: e67778e1cac3bca3b3300f6164f7ffb9 + - pkg:pypi/optree?source=hash-mapping + size: 422098 + timestamp: 1756812346861 +- conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py310hc9b05e5_1.conda + sha256: 6bb8f0b331adbd98bfc1894252817c260e1dbb65e8736d63ac4d0ce439ba42b9 + md5: 88b88b0da3e33670ba62739723798e42 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - - numpy >=1.19,<3 - - numpy >=1.22.4 + - __osx >=11.0 + - libcxx >=19 - python >=3.10,<3.11.0a0 - - python-dateutil >=2.8.1 - - python-tzdata >=2022a + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - - pytz >=2020.1,<2024.2 - license: BSD-3-Clause - license_family: BSD + - typing-extensions >=4.6 + license: Apache-2.0 + license_family: Apache purls: - - pkg:pypi/pandas?source=hash-mapping - size: 13014228 - timestamp: 1726878893275 -- conda: https://prefix.dev/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - sha256: f4e4c0016c56089d22850e16c44c7e912d6368fd43374a92d8de6a1da9a85b47 - md5: 7bc53f11058c93444968c99f1600f73c + - pkg:pypi/optree?source=hash-mapping + size: 363671 + timestamp: 1756812418005 +- conda: https://prefix.dev/conda-forge/osx-arm64/optree-0.17.0-py313hc50a443_1.conda + sha256: 61bd8b511935f48f12092fdc447687cf6e73e4f2a6ed0d27df35c955fad17c2f + md5: 06220c4c3759581133cf996a2374f37f depends: - __osx >=11.0 - - libcxx >=17 - - numpy >=1.19,<3 - - numpy >=1.22.4 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python-dateutil >=2.8.1 - - python-tzdata >=2022a - - python_abi 3.10.* *_cp310 - - pytz >=2020.1,<2024.2 - license: BSD-3-Clause - license_family: BSD + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - typing-extensions >=4.6 + license: Apache-2.0 + license_family: Apache purls: - - pkg:pypi/pandas?source=hash-mapping - size: 12024352 - timestamp: 1726878958127 -- conda: https://prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda - sha256: 1fa40b4a351f1eb7a878d1f25f6bec71664699cd4a39c8ed5e2221f53ecca0c4 - md5: 565b3f19282642a23e5ff9bbfb01569c + - pkg:pypi/optree?source=hash-mapping + size: 400616 + timestamp: 1756812405675 +- conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py310he9f1925_1.conda + sha256: 5b6ec61831a872a399ee392018b2deefd9d5b6e9d09e123550ea8404ea1e3260 + md5: 33b619ad703547e5e781855315fca8dc depends: - - numpy >=1.19,<3 - - numpy >=1.22.4 - python >=3.10,<3.11.0a0 - - python-dateutil >=2.8.1 - - python-tzdata >=2022a - python_abi 3.10.* *_cp310 - - pytz >=2020.1,<2024.2 + - typing-extensions >=4.6 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache purls: - - pkg:pypi/pandas?source=hash-mapping - size: 11810567 - timestamp: 1726879420659 -- conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc - md5: 5c092057b6badd30f75b06244ecd01c9 + - pkg:pypi/optree?source=hash-mapping + size: 333334 + timestamp: 1756812706247 +- conda: https://prefix.dev/conda-forge/win-64/optree-0.17.0-py313hf069bd2_1.conda + sha256: 6652cd9230704d4ec141a81fdcbe99ce83507b749a8295749f92b775d6de5021 + md5: 1f0087cf1add74991edc14c2000e73bd depends: - - python >=3.9 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - typing-extensions >=4.6 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree?source=hash-mapping + size: 365478 + timestamp: 1756812318314 +- conda: https://prefix.dev/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda + sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 + md5: 58335b26c38bf4a20f399384c33cbcf9 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 62477 + timestamp: 1745345660407 +- conda: https://prefix.dev/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda + sha256: 30de7b4d15fbe53ffe052feccde31223a236dae0495bab54ab2479de30b2990f + md5: a110716cdb11cf51482ff4000dc253d7 + depends: + - python >=3.10 + - python license: MIT license_family: MIT purls: - pkg:pypi/parso?source=hash-mapping - size: 75295 - timestamp: 1733271352153 + size: 81562 + timestamp: 1755974222274 - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c md5: 0badf9c54e24cecfb0ad2f99d680c163 @@ -8208,6 +10916,17 @@ packages: - pkg:pypi/partd?source=hash-mapping size: 20884 timestamp: 1715026639309 +- conda: https://prefix.dev/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee + md5: 617f15191456cc6a13db418a275435e5 + depends: + - python >=3.9 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41075 + timestamp: 1733233471940 - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a md5: d0d408b1f18883a944376da5cf8101ea @@ -8230,201 +10949,99 @@ packages: - pkg:pypi/pickleshare?source=hash-mapping size: 11748 timestamp: 1733327448200 -- conda: https://prefix.dev/conda-forge/linux-64/pillow-11.1.0-py310h7e6dc6c_0.conda - sha256: e11d694b7c12b6a76624e8c3e48892924668a97ec26f353ce37b0648bd12ad87 - md5: 14d300b9e1504748e70cc6499a7b4d25 - depends: - - __glibc >=2.17,<3.0.a0 - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libgcc >=13 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tk >=8.6.13,<8.7.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 42419230 - timestamp: 1735929858736 -- conda: https://prefix.dev/conda-forge/osx-arm64/pillow-11.1.0-py310h61efb56_0.conda - sha256: 7eb1bf423326ae0d372504cab421994f248e882daab6750ed5ea5df4fbb9858f - md5: 72579fcac27a82e99c2c115c6718dd06 - depends: - - __osx >=11.0 - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - tk >=8.6.13,<8.7.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 41772845 - timestamp: 1735929952853 -- conda: https://prefix.dev/conda-forge/win-64/pillow-11.1.0-py310h9595edc_0.conda - sha256: a4cf9c10ecdc2ad2bbedce6eb76ba7d193e8be66f4424cfbbabfe53668b0d8bb - md5: 67a38507ac20bd85226fe6dd7ed87462 - depends: - - freetype >=2.12.1,<3.0a0 - - lcms2 >=2.16,<3.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openjpeg >=2.5.3,<3.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - tk >=8.6.13,<8.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: HPND - purls: - - pkg:pypi/pillow?source=hash-mapping - size: 41777634 - timestamp: 1735930357220 -- conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 - md5: 577852c7e53901ddccc7e6a9959ddebe +- conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda + sha256: dfe0fa6e351d2b0cef95ac1a1533d4f960d3992f9e0f82aeb5ec3623a699896b + md5: cc9d9a3929503785403dbfad9f707145 depends: - - python >=3.9 + - python >=3.10 + - python license: MIT license_family: MIT purls: - - pkg:pypi/platformdirs?source=hash-mapping - size: 20448 - timestamp: 1733232756001 -- conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 - md5: e9dcbce5f45f9ee500e728ae58b605b6 + - pkg:pypi/platformdirs?source=compressed-mapping + size: 23653 + timestamp: 1756227402815 +- conda: https://prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda + sha256: a8eb555eef5063bbb7ba06a379fa7ea714f57d9741fe0efdb9442dbbc2cccbcc + md5: 7da7ccd349dbf6487a7778579d2bb971 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pluggy?source=hash-mapping - size: 23595 - timestamp: 1733222855563 -- conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_1.conda - sha256: 3cfe4c777f1bb3f869cefd732357c7c657df7f0bba5c11cd64ced21e0b0a2b5b - md5: d0ea6ed474bf7f6db88fc85e6dc809b1 - depends: - - cfgv >=2.0.0 - - identify >=1.0.0 - - nodeenv >=0.11.1 - - python >=3.9 - - pyyaml >=5.1 - - virtualenv >=20.10.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pre-commit?source=hash-mapping - size: 193591 - timestamp: 1734267205422 -- conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda - sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc - md5: 368d4aa48358439e07a97ae237491785 + size: 24246 + timestamp: 1747339794916 +- conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae + md5: edb16f14d920fb3faf17f5ce582942d6 depends: - - python >=3.9 + - python >=3.10 - wcwidth constrains: - - prompt_toolkit 3.0.48 + - prompt_toolkit 3.0.52 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/prompt-toolkit?source=hash-mapping - size: 269848 - timestamp: 1733302634979 -- conda: https://prefix.dev/conda-forge/linux-64/psutil-6.1.1-py310ha75aee5_0.conda - sha256: a643a57e5338fb3a154c5d57fdc72d80170cf7868f20acbbeedde014195f0d92 - md5: 00838ea1d4e87b1e6e2552bba98cc899 + size: 273927 + timestamp: 1756321848365 +- conda: https://prefix.dev/conda-forge/linux-64/psutil-7.0.0-py313h07c4f96_1.conda + sha256: 9182273778a10b2a82343c5c1c8b57f4551dd07d9a639585d468f4a7fe5ff1e8 + md5: 5a7c24c9dc49128731ae565cf598cde4 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/psutil?source=hash-mapping - size: 368620 - timestamp: 1735327493685 -- conda: https://prefix.dev/conda-forge/osx-arm64/psutil-6.1.1-py310h078409c_0.conda - sha256: a8a418b53bfe69a31def05121555934901d3c805c91cef0badc8de4a493f89dd - md5: e10b828242dd64d38a8970c112093bbb + size: 474571 + timestamp: 1755851494108 +- conda: https://prefix.dev/conda-forge/osx-64/psutil-7.0.0-py313h585f44e_1.conda + sha256: df943fa46f030b043ca28bd939d7e4110273aa41197080a598da467cbd300c6b + md5: a1457ea8cfd6104cea63410320772abc depends: - - __osx >=11.0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - __osx >=10.13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/psutil?source=hash-mapping - size: 376278 - timestamp: 1735327563376 -- conda: https://prefix.dev/conda-forge/win-64/psutil-6.1.1-py310ha8f682b_0.conda - sha256: 88ed52584b3d838ec10c10ad445823bb9b52a0002071e79c9bb63433ff934026 - md5: e7da623f94edbf9c66f816bee03432a2 + size: 480270 + timestamp: 1755851507696 +- conda: https://prefix.dev/conda-forge/osx-arm64/psutil-7.0.0-py313hcdf3177_1.conda + sha256: 4964c94067fdf290d4790095ead992b2a3afb438bff8bd9b51c444d97fb63914 + md5: 1ce8cf644e210b54665d8e46850d7567 depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/psutil?source=hash-mapping - size: 386297 - timestamp: 1735327974109 -- conda: https://prefix.dev/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 - md5: b3c17d95b5a10c6e64a21fa17573e70e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 8252 - timestamp: 1726802366959 -- conda: https://prefix.dev/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 - md5: 415816daf82e0b23a736a069a75e9da7 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 8381 - timestamp: 1726802424786 -- conda: https://prefix.dev/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b - md5: 3c8f2573569bb816483e5cf57efbbe29 + size: 484934 + timestamp: 1755851718841 +- conda: https://prefix.dev/conda-forge/win-64/psutil-7.0.0-py313h5ea7bf4_1.conda + sha256: 9e63542ffd8ac4104cff34e722019fc3eb6eef274c77740eef1d73056c56cade + md5: 00c2580acce9c51004818c6981c586d9 depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 9389 - timestamp: 1726802555076 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 490305 + timestamp: 1755851561624 - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 md5: 7d9daffbb8d8e0af0f769dbbcd173a54 @@ -8446,114 +11063,51 @@ packages: - pkg:pypi/pure-eval?source=hash-mapping size: 16668 timestamp: 1733569518868 -- conda: https://prefix.dev/conda-forge/linux-64/pyarrow-18.1.0-py310hff52083_0.conda - sha256: 2cc58382b4f03b7b13cde2478f274393679a90b2b9ae53ede5e1d8d6fca8b725 - md5: b1bf2dce4ffc87e1d551d725e8f57e07 - depends: - - libarrow-acero 18.1.0.* - - libarrow-dataset 18.1.0.* - - libarrow-substrait 18.1.0.* - - libparquet 18.1.0.* - - pyarrow-core 18.1.0 *_0_* - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25169 - timestamp: 1732610724262 -- conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-18.1.0-py310hb6292c7_0.conda - sha256: 5b7af521c075b706c9ec4df7f68e368daa015b4e0790c8b1deddca3ffaed5475 - md5: 753691b585ec3e968cc803aa599e204c - depends: - - libarrow-acero 18.1.0.* - - libarrow-dataset 18.1.0.* - - libarrow-substrait 18.1.0.* - - libparquet 18.1.0.* - - pyarrow-core 18.1.0 *_0_* - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25411 - timestamp: 1732611138365 -- conda: https://prefix.dev/conda-forge/win-64/pyarrow-18.1.0-py310h5588dad_0.conda - sha256: 3ac8f4f39ee66a4c478e3d8f622c026075dd093c8d3576e34ad2f0d0f3bde2e4 - md5: 0a9a667f2223be8615637cc24d0049d8 - depends: - - libarrow-acero 18.1.0.* - - libarrow-dataset 18.1.0.* - - libarrow-substrait 18.1.0.* - - libparquet 18.1.0.* - - pyarrow-core 18.1.0 *_0_* - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 25680 - timestamp: 1732652490895 -- conda: https://prefix.dev/conda-forge/linux-64/pyarrow-core-18.1.0-py310hac404ae_0_cpu.conda - sha256: 48981393e1b392ecdad11a5f17a8a1e0325a53c1007a3e37d5ad85db0a354678 - md5: 9a961ac46dd84a82ab3f3fa31833f062 +- conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda + sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be + md5: 70ece62498c769280f791e836ac53fff depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0.* *cpu - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 + - python >=3.8 + - pybind11-global ==3.0.1 *_0 + - python constrains: - - numpy >=1.21,<3 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 4544985 - timestamp: 1732610569678 -- conda: https://prefix.dev/conda-forge/osx-arm64/pyarrow-core-18.1.0-py310hc17921c_0_cpu.conda - sha256: 6ad8406767ea99b8540577587a22855ddc1c98940b10c5b209d7f2959a88b91d - md5: 71e33ee4b08ae1087a039e116e158fb6 + - pkg:pypi/pybind11?source=hash-mapping + size: 232875 + timestamp: 1755953378112 +- conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + sha256: fff9c4f726644a1889a4b631aca547d8f302c72109d75518ae32997a3d54f23a + md5: 58564979e28f8b18955ec56c4dc6b252 depends: - - __osx >=11.0 - - libarrow 18.1.0.* *cpu - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - python >=3.8 + - __win + - python constrains: - - numpy >=1.21,<3 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 3881631 - timestamp: 1732611103866 -- conda: https://prefix.dev/conda-forge/win-64/pyarrow-core-18.1.0-py310h399dd74_0_cpu.conda - sha256: 4e2c58e5123c3c63e32710ed8809347866d9f8e90b76427ccfa8c92cae673bdb - md5: 45d9ee9d0b92d4fbbbfe7db44d84d2fe + - pkg:pypi/pybind11-global?source=hash-mapping + size: 227797 + timestamp: 1755953378113 +- conda: https://prefix.dev/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + sha256: f11a5903879fe3a24e0d28329cb2b1945127e85a4cdb444b45545cf079f99e2d + md5: fe10b422ce8b5af5dab3740e4084c3f9 depends: - - libarrow 18.1.0.* *cpu - - libzlib >=1.3.1,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - python >=3.8 + - __unix + - python constrains: - - apache-arrow-proc =*=cpu - - numpy >=1.21,<3 - license: Apache-2.0 - license_family: APACHE + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 3425932 - timestamp: 1732651827572 + - pkg:pypi/pybind11-global?source=hash-mapping + size: 228871 + timestamp: 1755953338243 - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 md5: 12c566707c80111f9799308d9e265aef @@ -8562,40 +11116,42 @@ packages: - python license: BSD-3-Clause license_family: BSD - purls: [] + purls: + - pkg:pypi/pycparser?source=hash-mapping size: 110100 timestamp: 1733195786147 -- conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b - md5: 232fb4577b6687b2d503ef8e254270c9 +- conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a + md5: 6b6ece66ebcae2d5f326c77ef2c5a066 depends: - python >=3.9 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/pygments?source=hash-mapping - size: 888600 - timestamp: 1736243563082 -- conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda - sha256: a8192c823bfb6cdc57d2e12a8748ac1acb588c960c53e71c763f6359c5602e46 - md5: 5842a1fa3b9b4f9fe7069b9ca5ed068d + size: 889287 + timestamp: 1750615908735 +- conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.8-pyhe01879c_0.conda + sha256: 5b19f8113694ff4e4f0d0870cf38357d9e84330ff6c2516127a65764289b6743 + md5: f5ba3b2c52e855b67fc0abedcebc9675 depends: - astroid >=3.3.8,<3.4.0-dev0 - colorama >=0.4.5 - - dill >=0.3.7 - - isort >=4.2.5,<6,!=5.13.0 + - isort >=4.2.5,<7,!=5.13.0 - mccabe >=0.6,<0.8 - platformdirs >=2.2.0 - python >=3.9 - tomli >=1.1.0 - tomlkit >=0.10.1 - typing_extensions >=3.10.0 + - dill >=0.3.7 + - python license: GPL-2.0-or-later license_family: GPL purls: - pkg:pypi/pylint?source=hash-mapping - size: 353049 - timestamp: 1735081352860 + size: 381472 + timestamp: 1754751762506 - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -8621,57 +11177,71 @@ packages: - pkg:pypi/pysocks?source=hash-mapping size: 21085 timestamp: 1733217331982 -- conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 - md5: 799ed216dc6af62520f32aa39bc1c2bb - depends: - - colorama - - exceptiongroup >=1.0.0rc8 - - iniconfig - - packaging - - pluggy <2,>=1.5 - - python >=3.9 +- conda: https://prefix.dev/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda + sha256: 41053d9893e379a3133bb9b557b98a3d2142fca474fb6b964ba5d97515f78e2d + md5: 1f987505580cb972cf28dc5f74a0f81b + depends: + - colorama >=0.4 + - exceptiongroup >=1 + - iniconfig >=1 + - packaging >=20 + - pluggy >=1.5,<2 + - pygments >=2.7.2 + - python >=3.10 - tomli >=1 constrains: - pytest-faulthandler >=2 license: MIT license_family: MIT purls: - - pkg:pypi/pytest?source=hash-mapping - size: 259195 - timestamp: 1733217599806 -- conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - sha256: 09acac1974e10a639415be4be326dd21fa6d66ca51a01fb71532263fba6dccf6 - md5: 79963c319d1be62c8fd3e34555816e01 + - pkg:pypi/pytest?source=compressed-mapping + size: 276734 + timestamp: 1757011891753 +- conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.3.0-pyhd8ed1ab_0.conda + sha256: 5ba3e0955e473234fcc38cb4f0d893135710ec85ccb1dffdd73d9b213e99e8fb + md5: 50d191b852fccb4bf9ab7b59b030c99d depends: - coverage >=7.5 - - pytest >=4.6 - - python >=3.9 + - pluggy >=1.2 + - pytest >=6.2.5 + - python >=3.10 - toml license: MIT license_family: MIT purls: - pkg:pypi/pytest-cov?source=hash-mapping - size: 26256 - timestamp: 1733223113491 -- conda: https://prefix.dev/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda - build_number: 1 - sha256: 3f90a2d5062a73cd2dd8a0027718aee1db93f7975b9cfe529e2c9aeec2db262e - md5: b887811a901b3aa622a92caf03bc8917 + size: 28806 + timestamp: 1757200686993 +- conda: https://prefix.dev/conda-forge/noarch/pytest-run-parallel-0.6.1-pyhd8ed1ab_0.conda + sha256: ad3bcc53283512c34933012243756668b5631ef371468090121ec2fef8029261 + md5: 4bc53a42b6c9f9f9e89b478d05091743 + depends: + - pytest >=6.2.0 + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest-run-parallel?source=hash-mapping + size: 20705 + timestamp: 1755134346338 +- conda: https://prefix.dev/conda-forge/linux-64/python-3.10.18-hd6af730_0_cpython.conda + sha256: 4111e5504fa4f4fb431d3a73fa606daccaf23a5a1da0f17a30db70ffad9336a7 + md5: 4ea0c77cdcb0b81813a0436b162d7316 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.0,<3.0a0 - libffi >=3.4,<4.0a0 - libgcc >=13 - - liblzma >=5.6.3,<6.0a0 + - liblzma >=5.8.1,<6.0a0 - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.47.0,<4.0a0 + - libsqlite >=3.50.0,<4.0a0 - libuuid >=2.38.1,<3.0a0 - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -8679,47 +11249,76 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 25199631 - timestamp: 1733409331823 -- conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - build_number: 105 - sha256: d3eb7d0820cf0189103bba1e60e242ffc15fd2f727640ac3a10394b27adf3cca - md5: 34945787453ee52a8f8271c1d19af1e8 + size: 25042108 + timestamp: 1749049293621 +- conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h2b335a9_100_cp313.conda + build_number: 100 + sha256: 16cc30a5854f31ca6c3688337d34e37a79cdc518a06375fe3482ea8e2d6b34c8 + md5: 724dcf9960e933838247971da07fe5cf depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.6.4,<3.0a0 - - libffi >=3.4,<4.0a0 - - libgcc >=13 - - liblzma >=5.6.3,<6.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.47.2,<4.0a0 + - libsqlite >=3.50.4,<4.0a0 - libuuid >=2.38.1,<3.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.2,<4.0a0 - python_abi 3.13.* *_cp313 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata license: Python-2.0 purls: [] - size: 33169840 - timestamp: 1736763984540 -- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.16-h870587a_1_cpython.conda - build_number: 1 - sha256: cd617b15712c4f9316b22c75459311ed106ccb0659c0bf36e281a9162b4e2d95 - md5: 11ce777f54d8a4b821d7f5f159eda36c + size: 33583088 + timestamp: 1756911465277 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://prefix.dev/conda-forge/linux-64/python-3.13.7-h73bbd72_0_cp313t.conda + sha256: fccda25ea6cf08eed1d5d0e8125c27289a3328269764750e90899a61246a7679 + md5: 8f83dc497a4afc0acee7095838d80506 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=14 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.2,<4.0a0 + - python_abi 3.13.* *_cp313t + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + track_features: + - py_freethreading + license: Python-2.0 + purls: [] + size: 42099631 + timestamp: 1756911847938 + python_site_packages_path: lib/python3.13t/site-packages +- conda: https://prefix.dev/conda-forge/osx-64/python-3.10.18-h93e8a92_0_cpython.conda + sha256: 6a8d4122fa7406d31919eee6cf8e0185f4fb13596af8fdb7c7ac46d397b02de8 + md5: 00299cefe3c38a8e200db754c4f025c4 + depends: + - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.0,<3.0a0 - libffi >=3.4,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libsqlite >=3.47.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libsqlite >=3.50.0,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -8727,42 +11326,139 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 12372048 - timestamp: 1733408850559 -- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - build_number: 105 - sha256: 7d27cc8ef214abbdf7dd8a5d473e744f4bd9beb7293214a73c58e4895c2830b8 - md5: 11d916b508764b7d881dd5c75d222d6e + size: 12921103 + timestamp: 1749048830353 +- conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-h5eba815_100_cp313.conda + build_number: 100 + sha256: 581e4db7462c383fbb64d295a99a3db73217f8c24781cbe7ab583ff9d0305968 + md5: 1759e1c9591755521bd50489756a599d + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.2,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 12575616 + timestamp: 1756911460182 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://prefix.dev/conda-forge/osx-64/python-3.13.7-hea0e654_0_cp313t.conda + sha256: c9a33fe35f4c116742c50cccf2728b13d3035cd8ed22c6b3773c446477b4c0be + md5: f4a43cd315cec2c19bdf551ed98fe735 + depends: + - __osx >=10.13 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.2,<4.0a0 + - python_abi 3.13.* *_cp313t + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + track_features: + - py_freethreading + license: Python-2.0 + purls: [] + size: 15898915 + timestamp: 1756911161943 + python_site_packages_path: lib/python3.13t/site-packages +- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.18-h6cefb37_0_cpython.conda + sha256: a9b9a74a98348019b28be674cc64c23d28297f3d0d9ebe079e81521b5ab5d853 + md5: 2732121b53b3651565a84137c795605d depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.4,<3.0a0 + - libexpat >=2.7.0,<3.0a0 - libffi >=3.4,<4.0a0 - - liblzma >=5.6.3,<6.0a0 + - liblzma >=5.8.1,<6.0a0 + - libsqlite >=3.50.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.0,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.10.* *_cp310 + license: Python-2.0 + purls: [] + size: 12385306 + timestamp: 1749048585934 +- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h4a30792_0_cp313t.conda + sha256: 74e127b7f4c2cca45c71e2083cb443d52819d90a7544ae34df281635ffd1ed9f + md5: 4fc50b6ca972ef20583745e550746cef + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.2,<4.0a0 + - python_abi 3.13.* *_cp313t + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + track_features: + - py_freethreading + license: Python-2.0 + purls: [] + size: 14642273 + timestamp: 1756910522819 + python_site_packages_path: lib/python3.13t/site-packages +- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.7-h5c937ed_100_cp313.conda + build_number: 100 + sha256: b9776cc330fa4836171a42e0e9d9d3da145d7702ba6ef9fad45e94f0f016eaef + md5: 445d057271904b0e21e14b1fa1d07ba5 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.47.2,<4.0a0 + - libsqlite >=3.50.4,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.2,<4.0a0 - python_abi 3.13.* *_cp313 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata license: Python-2.0 purls: [] - size: 12919840 - timestamp: 1736761931666 -- conda: https://prefix.dev/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda - build_number: 1 - sha256: 3392db6a7a90864d3fd1ce281859a49e27ee68121b63eece2ae6f1dbb2a8aaf1 - md5: 5c292a7bd9c32a256ba7939b3e6dee03 + size: 11926240 + timestamp: 1756909724811 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://prefix.dev/conda-forge/win-64/python-3.10.18-h8c5b53a_0_cpython.conda + sha256: 548f9e542e72925d595c66191ffd17056f7c0029b7181e2d99dbef47e4f3f646 + md5: f1775dab55c8a073ebd024bfb2f689c1 depends: - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.0,<3.0a0 - libffi >=3.4,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libsqlite >=3.47.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libsqlite >=3.50.0,<4.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.0,<4.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 @@ -8772,220 +11468,708 @@ packages: - python_abi 3.10.* *_cp310 license: Python-2.0 purls: [] - size: 16061214 - timestamp: 1733408154785 -- conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - build_number: 105 - sha256: de3bb832ff3982c993c6af15e6c45bb647159f25329caceed6f73fd4769c7628 - md5: 3ddb0531ecfb2e7274d471203e053d78 + size: 15832933 + timestamp: 1749048670944 +- conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-h326d9c1_0_cp313t.conda + sha256: e50d87f061b1063e44ee0e97d234431a71615a8040bd3a58b5140d7a04a4fd89 + md5: 807fc0ddcf51cc323f7e3ba59307de44 depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.4,<3.0a0 - - libffi >=3.4,<4.0a0 - - liblzma >=5.6.3,<6.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.2,<4.0a0 + - python_abi 3.13.* *_cp313t + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + track_features: + - py_freethreading + license: Python-2.0 + purls: [] + size: 16508214 + timestamp: 1756909259685 + python_site_packages_path: Lib/site-packages +- conda: https://prefix.dev/conda-forge/win-64/python-3.13.7-hdf00ec1_100_cp313.conda + build_number: 100 + sha256: b86b5b3a960de2fff0bb7e0932b50846b22b75659576a257b1872177aab444cd + md5: 7cd6ebd1a32d4a5d99f8f8300c2029d5 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.1,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.47.2,<4.0a0 + - libsqlite >=3.50.4,<4.0a0 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 + - openssl >=3.5.2,<4.0a0 - python_abi 3.13.* *_cp313 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: Python-2.0 purls: [] - size: 16778758 - timestamp: 1736761341620 -- conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 - md5: 5ba79d7c71f03c678c8ead841f347d6e + size: 16386672 + timestamp: 1756909324921 + python_site_packages_path: Lib/site-packages +- conda: https://prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8 + md5: 23029aae904a2ba587daba708208012f depends: - python >=3.9 - - six >=1.5 - license: Apache-2.0 - license_family: APACHE + - python + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/python-dateutil?source=hash-mapping - size: 222505 - timestamp: 1733215763718 -- conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - sha256: 57c9a02ec25926fb48edca59b9ede107823e5d5c473b94a0e05cc0b9a193a642 - md5: c0def296b2f6d2dd7b030c2a7f66bb1f + - pkg:pypi/fastjsonschema?source=hash-mapping + size: 244628 + timestamp: 1755304154927 +- conda: https://prefix.dev/conda-forge/noarch/python-freethreading-3.13.7-h92d6c8b_0.conda + sha256: 160e09b1aed8de3a51cd92386a835fa16259f43a863f2af8730521b647711430 + md5: aad6dc60ba396c0a1cc2fab19e0affc7 depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/tzdata?source=hash-mapping - size: 142235 - timestamp: 1733235414217 -- conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - build_number: 5 - sha256: 074d2f0b31f0333b7e553042b17ea54714b74263f8adda9a68a4bd8c7e219971 - md5: 2921c34715e74b3587b4cff4d36844f9 + - cpython 3.13.7.* + - python_abi * *_cp313t + license: Python-2.0 + purls: [] + size: 47978 + timestamp: 1756909360514 +- conda: https://prefix.dev/conda-forge/noarch/python_abi-3.10-8_cp310.conda + build_number: 8 + sha256: 7ad76fa396e4bde336872350124c0819032a9e8a0a40590744ff9527b54351c1 + md5: 05e00f3b21e88bb3d658ac700b2ce58c constrains: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD purls: [] - size: 6227 - timestamp: 1723823165457 -- conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - build_number: 5 - sha256: 438225b241c5f9bddae6f0178a97f5870a89ecf927dfca54753e689907331442 - md5: 381bbd2a92c863f640a55b6ff3c35161 + size: 6999 + timestamp: 1752805924192 +- conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- conda: https://prefix.dev/conda-forge/noarch/python_abi-3.13-8_cp313t.conda + build_number: 8 + sha256: 592a3d800fb02331e6c54abd4acea354fce43b5c670da277a29cd57aaed9f2fd + md5: e1dd2408e4ff08393fbc3502fbe4316d + constrains: + - python 3.13.* *_cp313t + track_features: + - freethreading + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6968 + timestamp: 1752805914057 +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cpu_mkl_py310_hefd4a7a_102.conda + sha256: ef513ff834df7164b4d6deb8b7714fe973ab3cc42768167959bcf575320b2d08 + md5: a2862c269988e48fbcf48202041db92c + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libtorch 2.7.1 cpu_mkl_h783a78b_102 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - networkx + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu 2.7.1 + - pytorch-gpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 25385445 + timestamp: 1752208146061 +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cpu_mkl_py313_he78a34b_102.conda + sha256: cd72f5e1c3872b1ddc63766e8b9836c02c108b0ecef6beaa94be14f7e78d1e59 + md5: c825c225bb775b9bc2ba72d4d9f78820 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libtorch 2.7.1 cpu_mkl_h783a78b_102 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - networkx + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu 2.7.1 + - pytorch-gpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 29271785 + timestamp: 1752205686635 +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cuda129_mkl_py310_h43be9e4_302.conda + sha256: 2ee62a654bc0d57230f87e78f027c58a046eebbf3e39dc9e7142f199596232ad + md5: 1a65f4552cdba48219e229d4ce6f15ba + depends: + - __cuda + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-cupti >=12.9.79,<13.0a0 + - cuda-nvrtc >=12.9.86,<13.0a0 + - cuda-nvtx >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - cudnn >=9.10.1.4,<10.0a0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.9.1.4,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.4.1.4,<12.0a0 + - libcufile >=1.14.1.1,<2.0a0 + - libcurand >=10.3.10.19,<11.0a0 + - libcusolver >=11.7.5.82,<12.0a0 + - libcusparse >=12.5.10.65,<13.0a0 + - libgcc >=13 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libtorch 2.7.1 cuda129_mkl_h16584c3_302 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.27.6.1,<3.0a0 + - networkx + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - triton 3.3.1.* + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu <0.0a0 + - pytorch-gpu 2.7.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 25728994 + timestamp: 1752491824134 +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.7.1-cuda129_mkl_py313_h3949ff4_302.conda + sha256: 7439e678e7fdbe7b323d0f63e68b11bcba657262ff6b048f560be5f3771dce10 + md5: 1a6c7aafbec9e9758ed4f47590062a74 + depends: + - __cuda + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=12.9.79,<13.0a0 + - cuda-cupti >=12.9.79,<13.0a0 + - cuda-nvrtc >=12.9.86,<13.0a0 + - cuda-nvtx >=12.9.79,<13.0a0 + - cuda-version >=12.9,<13 + - cudnn >=9.10.1.4,<10.0a0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcublas >=12.9.1.4,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.4.1.4,<12.0a0 + - libcufile >=1.14.1.1,<2.0a0 + - libcurand >=10.3.10.19,<11.0a0 + - libcusolver >=11.7.5.82,<12.0a0 + - libcusparse >=12.5.10.65,<13.0a0 + - libgcc >=13 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libstdcxx >=13 + - libtorch 2.7.1 cuda129_mkl_h16584c3_302 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=20.1.7 + - mkl >=2024.2.2,<2025.0a0 + - nccl >=2.27.6.1,<3.0a0 + - networkx + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - triton 3.3.1.* + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu <0.0a0 + - pytorch-gpu 2.7.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 29623872 + timestamp: 1752494955379 +- conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py310_h0891237_102.conda + sha256: 5c455c8ae633d878677790653dfd60371b3d6aedcec2c5a1b17776850e80efe4 + md5: 37465bb19dcbc9fb89eeaa64bbba8b5d + depends: + - __osx >=10.15 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libtorch 2.7.1.* *_102 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - mkl >=2023.2.0,<2024.0a0 + - networkx + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + constrains: + - pytorch-cpu 2.7.1 + - pytorch-gpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 24468038 + timestamp: 1752206276645 +- conda: https://prefix.dev/conda-forge/osx-64/pytorch-2.7.1-cpu_mkl_py313_h2b2588c_102.conda + sha256: 88dfc9de253529396691cbcbf7393e9ec1b7f8d7aba5809e6c062bde7cda2f7b + md5: 13e9945d852eb84d5bf4c79e499bcbdc + depends: + - __osx >=10.15 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libtorch 2.7.1.* *_102 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - mkl >=2023.2.0,<2024.0a0 + - networkx + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 constrains: - - python 3.13.* *_cp313 + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 license: BSD-3-Clause license_family: BSD - purls: [] - size: 6217 - timestamp: 1723823393322 -- conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - build_number: 5 - sha256: 15a1e37da3e52c9250eac103858aad494ce23501d72fb78f5a2126046c9a9e2d - md5: e33836c9096802b29d28981765becbee + purls: + - pkg:pypi/torch?source=hash-mapping + size: 28599612 + timestamp: 1752207758498 +- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py310_h10231c0_2.conda + sha256: 92c3bb7482ad37537e6a6c024d3a72a959b7becfd8036815adde3575e3560ed9 + md5: 63f5652c4ade27ad1eb140ca4cad15d7 + depends: + - __osx >=11.0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libtorch 2.7.1.* *_2 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - networkx + - nomkl + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 constrains: - - python 3.10.* *_cpython + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 license: BSD-3-Clause license_family: BSD - purls: [] - size: 6324 - timestamp: 1723823147856 -- conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - build_number: 5 - sha256: 4437198eae80310f40b23ae2f8a9e0a7e5c2b9ae411a8621eb03d87273666199 - md5: b8e82d0a5c1664638f87f63cc5d241fb + purls: + - pkg:pypi/torch?source=hash-mapping + size: 24433015 + timestamp: 1752205925275 +- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.7.1-cpu_generic_py313_hfe15936_2.conda + sha256: c8740f64293b897a4e1296e8fe7ad3c1e8303af8f4b5dbb9163bd013e41a7b6b + md5: 70ca9ad2c28df733ce4d6ee8044cdafa + depends: + - __osx >=11.0 + - filelock + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libtorch 2.7.1.* *_2 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=18.1.8 + - networkx + - nomkl + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 constrains: - - python 3.13.* *_cp313 + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 license: BSD-3-Clause license_family: BSD - purls: [] - size: 6322 - timestamp: 1723823058879 -- conda: https://prefix.dev/conda-forge/win-64/python_abi-3.10-5_cp310.conda - build_number: 5 - sha256: 0671bea4d5c5b8618ee7e2b1117d5a90901348ac459db57b654007f1644fa087 - md5: 3c510f4c4383f5fbdb12fdd971b30d49 + purls: + - pkg:pypi/torch?source=hash-mapping + size: 28309984 + timestamp: 1752205828822 +- conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cpu_mkl_py310_h2841ce8_104.conda + sha256: f9d2ce93e9f42a54e519c42827e4f9fafa3207d1a9fc2ffbeacbd254261f6a20 + md5: 067caa78732eba258d853532b40c0537 + depends: + - filelock + - fsspec + - intel-openmp <2025 + - jinja2 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libtorch 2.7.1 cpu_mkl_hf058426_104 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - networkx + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - python 3.10.* *_cpython + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 license: BSD-3-Clause license_family: BSD - purls: [] - size: 6715 - timestamp: 1723823141288 -- conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - build_number: 5 - sha256: 0c12cc1b84962444002c699ed21e815fb9f686f950d734332a1b74d07db97756 - md5: 44b4fe6f22b57103afb2299935c8b68e + purls: + - pkg:pypi/torch?source=compressed-mapping + size: 23852603 + timestamp: 1753847873259 +- conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cpu_mkl_py313_h97e7b96_104.conda + sha256: 64fb56920b20f18ebf6187346ac414de0799f24e4fd91656712449c0506abb7e + md5: c02cfd2fd298286a7a5e4a1458919f00 + depends: + - filelock + - fsspec + - intel-openmp <2025 + - jinja2 + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl + - libcblas >=3.9.0,<4.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libtorch 2.7.1 cpu_mkl_hf058426_104 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 + - networkx + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - setuptools + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - python 3.13.* *_cp313 + - pytorch-gpu <0.0a0 + - pytorch-cpu 2.7.1 license: BSD-3-Clause license_family: BSD - purls: [] - size: 6716 - timestamp: 1723823166911 -- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda - sha256: c1fcbc00995e84ce54a48301b57c90101b99e6f230873765efdf70d8e52282db - md5: 7ae3aba3aed36993e7700b7c9e2b8cfb - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 + purls: + - pkg:pypi/torch?source=hash-mapping + size: 27772121 + timestamp: 1753850338767 +- conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cuda128_mkl_py310_h9d6390c_304.conda + sha256: 6a9299578e4f5bddeaa3eb705366766dd83c6c289757c57f467d09d40d64874d + md5: f7e026cabd642f3d3ab3decd7f498054 + depends: + - __cuda + - cuda-cudart >=12.8.90,<13.0a0 + - cuda-cupti >=12.8.90,<13.0a0 + - cuda-nvrtc >=12.8.93,<13.0a0 + - cuda-version >=12.8,<13 + - cudnn >=9.10.1.4,<10.0a0 - filelock - fsspec + - intel-openmp <2025 - jinja2 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250512.1,<20250513.0a0 - libblas * *mkl - libcblas >=3.9.0,<4.0a0 - - libgcc >=13 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libstdcxx >=13 - - libtorch 2.5.1.* - - libuv >=1.49.2,<2.0a0 + - libcublas >=12.8.4.1,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.3.3.83,<12.0a0 + - libcurand >=10.3.9.90,<11.0a0 + - libcusolver >=11.7.3.90,<12.0a0 + - libcusparse >=12.5.8.93,<13.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libtorch 2.7.1 cuda128_mkl_h2cc4d28_304 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 - mkl >=2024.2.2,<2025.0a0 - networkx - - numpy >=1.19,<3 + - numpy >=1.21,<3 + - optree >=0.13.0 + - pybind11 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - setuptools - - sleef >=3.7,<4.0a0 - - sympy >=1.13.1,!=1.13.2 - - typing_extensions + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - pytorch-cpu ==2.5.1 - - pytorch-gpu ==99999999 + - pytorch-gpu 2.7.1 + - pytorch-cpu <0.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 34033082 - timestamp: 1736831182336 -- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda - sha256: c2f85319da078b86e81523b6a92c5761342123ed5b7bf8828082e34eab59cbc4 - md5: 5472d797227aa217036da7ec899358c5 - depends: - - __osx >=11.0 + size: 23965729 + timestamp: 1753866674480 +- conda: https://prefix.dev/conda-forge/win-64/pytorch-2.7.1-cuda128_mkl_py313_h2397fbb_304.conda + sha256: feeadbca8de8192d02c0cac8026a3ac2c803fb35820a10842d9dbab34ff62e7d + md5: bcfed5ddff6319cf5240d16d8405247b + depends: + - __cuda + - cuda-cudart >=12.8.90,<13.0a0 + - cuda-cupti >=12.8.90,<13.0a0 + - cuda-nvrtc >=12.8.93,<13.0a0 + - cuda-version >=12.8,<13 + - cudnn >=9.10.1.4,<10.0a0 - filelock - fsspec + - intel-openmp <2025 - jinja2 - libabseil * cxx17* - - libabseil >=20240722.0,<20240723.0a0 + - libabseil >=20250512.1,<20250513.0a0 + - libblas * *mkl - libcblas >=3.9.0,<4.0a0 - - libcxx >=18 - - liblapack >=3.9.0,<4.0a0 - - libprotobuf >=5.28.3,<5.28.4.0a0 - - libtorch 2.5.1.* - - libuv >=1.49.2,<2.0a0 - - llvm-openmp >=18.1.8 + - libcublas >=12.8.4.1,<13.0a0 + - libcudss >=0.6.0.5,<0.6.1.0a0 + - libcufft >=11.3.3.83,<12.0a0 + - libcurand >=10.3.9.90,<11.0a0 + - libcusolver >=11.7.3.90,<12.0a0 + - libcusparse >=12.5.8.93,<13.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libtorch 2.7.1 cuda128_mkl_h2cc4d28_304 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - mkl >=2024.2.2,<2025.0a0 - networkx - - nomkl - - numpy >=1.19,<3 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 + - numpy >=1.23,<3 + - optree >=0.13.0 + - pybind11 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - setuptools - - sleef >=3.7,<4.0a0 - - sympy >=1.13.1,!=1.13.2 - - typing_extensions + - sleef >=3.8,<4.0a0 + - sympy >=1.13.3 + - typing_extensions >=4.10.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - pytorch-cpu ==2.5.1 - - pytorch-gpu ==99999999 + - pytorch-gpu 2.7.1 + - pytorch-cpu <0.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 22861302 - timestamp: 1736897435420 -- conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 - md5: 3eeeeb9e4827ace8c0c1419c85d590ad + size: 27849304 + timestamp: 1753863512585 +- conda: https://prefix.dev/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda + sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 + md5: bc8e3267d44011051f2eb14d22fb0960 depends: - - python >=3.7 + - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/pytz?source=hash-mapping - size: 188538 - timestamp: 1706886944988 -- conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - sha256: 0a7c706b2eb13f7da5692d9ddf1567209964875710b471de6f2743b33d1ba960 - md5: f26ec986456c30f6dff154b670ae140f + size: 189015 + timestamp: 1742920947249 +- conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda + sha256: 5fba7f5babcac872c72f6509c25331bcfac4f8f5031f0102530a41b41336fce6 + md5: fd343408e64cf1e273ab7c710da374db depends: - - python >=3.9 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT purls: - - pkg:pypi/pytz?source=hash-mapping - size: 185890 - timestamp: 1733215766006 -- conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - sha256: bf6002aef0fd9753fa6de54e82307b2d7e67a1d701dba018869471426078d5d1 - md5: 0d4c5c76ae5f5aac6f0be419963a19dd + - pkg:pypi/pyyaml?source=hash-mapping + size: 182769 + timestamp: 1737454971552 +- conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda + sha256: 6826217690cfe92d6d49cdeedb6d63ab32f51107105d6a459d30052a467037a0 + md5: 50992ba61a8a1f8c2d346168ae1c86df depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 205919 + timestamp: 1737454783637 +- conda: https://prefix.dev/conda-forge/noarch/pyyaml-6.0.2-pyhe1237c8_2.conda + sha256: e65194b89607feab1f5fce7a150246572f1c2145af125260eb87bacb5311f3f3 + md5: 97db1b8e8c2ca460dd37d7bf2fb0f174 + depends: + - python >=3.9.* + - yaml + track_features: + - pyyaml_no_compile + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 44603 + timestamp: 1737454840302 +- conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py310h8e2f543_2.conda + sha256: ee888a231818e98603439abcad0084ea7600399c4633d3d9415d42a5e7e3aee1 + md5: a421bbf2cdd0d7ec3357a01d2d48709e + depends: + - __osx >=10.13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - yaml >=0.2.5,<0.3.0a0 @@ -8993,26 +12177,25 @@ packages: license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 182609 - timestamp: 1725456280173 -- conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - sha256: 86ae34bf2bab82c0fff2e31a37318c8977297776436df780a83c6efa5f84749d - md5: 3789f360de131c345e96fbfc955ca80b + size: 168613 + timestamp: 1737454886846 +- conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda + sha256: 27501e9b3b5c6bfabb3068189fd40c650356a258e4a82b0cfe31c60f568dcb85 + md5: b7f2984724531d2233b77c89c54be594 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.13.0rc1,<3.14.0a0 + - __osx >=10.13 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 205855 - timestamp: 1725456273924 -- conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - sha256: 04b7adb2f79264b2556c79924a523f8c5b297dfaa40f01c8b112f06e388001da - md5: 4b086c01e4c1ae219d1e139893841ae7 + size: 196573 + timestamp: 1737455046063 +- conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310hc74094e_2.conda + sha256: 0c46719507e1664b1085f2142b8250250c6aae01ec367d18068688efeba445ec + md5: b8be3d77488c580d2fd81c9bb3cacdf1 depends: - __osx >=11.0 - python >=3.10,<3.11.0a0 @@ -9023,26 +12206,26 @@ packages: license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 162312 - timestamp: 1725456439220 -- conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - sha256: f9fbafcf30cfab591c67f7550c0fd58e2bff394b53864dcdc658f5abd27ce5d6 - md5: bf2ddf70a9ce8f899b1082d17cbb3d1d + size: 166853 + timestamp: 1737454973579 +- conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313ha9b7d5b_2.conda + sha256: 58c41b86ff2dabcf9ccd9010973b5763ec28b14030f9e1d9b371d22b538bce73 + md5: 03a7926e244802f570f25401c25c13bc depends: - __osx >=11.0 - - python >=3.13.0rc1,<3.14.0a0 - - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 187550 - timestamp: 1725456463634 -- conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - sha256: b30056440fdff1d52e96303f539ba3b4a33c19070993a75cc15c5414cb2a8b1d - md5: 308f62d05cbcbc633eeab4843def3b51 + size: 194243 + timestamp: 1737454911892 +- conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310h38315fa_2.conda + sha256: 49dd492bdf2c479118ca9d61a59ce259594853d367a1a0548926f41a6e734724 + md5: 9986c3731bb820db0830dd0825c26cf9 depends: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -9054,13 +12237,13 @@ packages: license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 156987 - timestamp: 1725456772886 -- conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - sha256: ffa21c4715aa139d20c96ae7274fbb7de12a546f3332eb8d07cc794741fcbde6 - md5: c1743e5c4c7402a14b515cf276778e59 + size: 157941 + timestamp: 1737455030235 +- conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda + sha256: 5b496c96e48f495de41525cb1b603d0147f2079f88a8cf061aaf9e17a2fe1992 + md5: d14f685b5d204b023c641b188a8d0d7c depends: - - python >=3.13.0rc1,<3.14.0a0 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - vc >=14.2,<15 @@ -9070,62 +12253,87 @@ packages: license_family: MIT purls: - pkg:pypi/pyyaml?source=hash-mapping - size: 181722 - timestamp: 1725456802746 -- conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - sha256: d213c44958d49ce7e0d4d5b81afec23640cce5016685dbb2d23571a99caa4474 - md5: e84ddf12bde691e8ec894b00ea829ddf + size: 182783 + timestamp: 1737455202579 +- conda: https://prefix.dev/conda-forge/linux-64/rdma-core-59.0-hecca717_0.conda + sha256: ce0e671ce8b6151b135eb6b5aea9caed4d4032a416f73a04a3fb29048fd772c3 + md5: d95e4c5679876a9d3f2211263f75dc9c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - libstdcxx >=14 + - libsystemd0 >=257.7 + - libudev1 >=257.7 + license: Linux-OpenIB + license_family: BSD + purls: [] + size: 1239342 + timestamp: 1756455670262 +- conda: https://prefix.dev/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + sha256: 7a0b82cb162229e905f500f18e32118ef581e1fd182036f3298510b8e8663134 + md5: 2b4249747a9091608dbff2bd22afde44 depends: - - libre2-11 2024.07.02 hbbce691_2 + - libre2-11 2025.06.26 hba17884_0 license: BSD-3-Clause license_family: BSD purls: [] - size: 26786 - timestamp: 1735541074034 -- conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - sha256: 4d3799c05f8f662922a0acd129d119774760a3281b883603678e128d1cb307fb - md5: 7a8b4ad8c58a3408ca89d78788c78178 + size: 27330 + timestamp: 1751053087063 +- conda: https://prefix.dev/conda-forge/osx-64/re2-2025.06.26-ha5e900a_0.conda + sha256: 362d3172f6074f37688a4aa6f5caa8b46ffb7552887d3dfe7eaef2039aca6441 + md5: 2dc6248cb8249c98bd88c51ff1c86e24 depends: - - libre2-11 2024.07.02 h07bc746_2 + - libre2-11 2025.06.26 hfc00f1c_0 license: BSD-3-Clause license_family: BSD purls: [] - size: 26861 - timestamp: 1735541088455 -- conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - sha256: fde3bbe0ade147bf735bf1bb5a15aa26d2cc197bfa026d2964012737f89ed351 - md5: 10980cbe103147435a40288db9f49847 + size: 27456 + timestamp: 1751053203733 +- conda: https://prefix.dev/conda-forge/osx-arm64/re2-2025.06.26-h6589ca4_0.conda + sha256: d7c4f0144530c829bc9c39d1e17f31242a15f4e91c9d7d0f8dda58ab245988bb + md5: d519f1f98599719494472639406faffb depends: - - libre2-11 2024.07.02 h4eb7d71_2 + - libre2-11 2025.06.26 hd41c47c_0 license: BSD-3-Clause license_family: BSD purls: [] - size: 214916 - timestamp: 1735541425594 -- conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 - md5: 47d31b792659ce70f470b5c82fdfb7a4 + size: 27423 + timestamp: 1751053372858 +- conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 depends: - - libgcc-ng >=12 - - ncurses >=6.3,<7.0a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 282480 + timestamp: 1740379431762 +- conda: https://prefix.dev/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda + sha256: 53017e80453c4c1d97aaf78369040418dea14cf8f46a2fa999f31bd70b36c877 + md5: 342570f8e02f2f022147a7f841475784 + depends: + - ncurses >=6.5,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 281456 - timestamp: 1679532220005 -- conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 - md5: 8cbb776a2f641b943d413b3e19df71f4 + size: 256712 + timestamp: 1740379577668 +- conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 + md5: 63ef3f6e6d6d5c589e64f11263dc5676 depends: - - ncurses >=6.3,<7.0a0 + - ncurses >=6.5,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 250351 - timestamp: 1679532511311 -- conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad - md5: a9b9368f3701a417eac9edbcae7cb737 + size: 252359 + timestamp: 1740379663071 +- conda: https://prefix.dev/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda + sha256: 8dc54e94721e9ab545d7234aa5192b74102263d3e704e6d0c8aa7008f2da2a7b + md5: db0c6b99149880c8ba515cf4abe93ee4 depends: - certifi >=2017.4.17 - charset-normalizer >=2,<4 @@ -9137,24 +12345,82 @@ packages: license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/requests?source=hash-mapping - size: 58723 - timestamp: 1733217126197 -- conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - sha256: f6d451821fddc26b93f45e9313e1ea15e09e5ef049d4e137413a5225d2a5dfba - md5: 999f3673f2a011f59287f2969e3749e4 + - pkg:pypi/requests?source=compressed-mapping + size: 59263 + timestamp: 1755614348400 +- conda: https://prefix.dev/conda-forge/noarch/roman-numerals-py-3.1.0-pyhd8ed1ab_0.conda + sha256: 0116a9ca9bf3487e18979b58b2f280116dba55cb53475af7a6d835f7aa133db8 + md5: 5f0f24f8032c2c1bb33f59b75974f5fc + depends: + - python >=3.9 + license: 0BSD OR CC0-1.0 + purls: + - pkg:pypi/roman-numerals-py?source=hash-mapping + size: 13348 + timestamp: 1740240332327 +- conda: https://prefix.dev/conda-forge/linux-64/ruff-0.12.12-h718f522_0.conda + noarch: python + sha256: 76861e67f7b57303ec61b2a1569e83a972b253bd5c094ce40dcc4761a70e223f + md5: ae6fcbf2a0632943781a2421a1e30a7d depends: + - python + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - openssl >=3.4.0,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 355142 - timestamp: 1734415467047 -- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda - sha256: 9941f3bc9af712e60ce7b3910f9da0298f6b6f4c0b4fbc85f43b3db6342e21e4 - md5: a24baa04ee53ee3078ac1856887c3dea + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping + size: 10836594 + timestamp: 1757055819993 +- conda: https://prefix.dev/conda-forge/osx-64/ruff-0.12.12-h3caf6b2_0.conda + noarch: python + sha256: 155f6005d4d2f3da87e2b6c8bb28b4d2805e5b4a0dd8f5dadd1868b9427f8ef1 + md5: f2673ee632d8c6cdbf568889e2f9011f + depends: + - python + - __osx >=10.13 + constrains: + - __osx >=10.13 + license: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 10814174 + timestamp: 1757056015393 +- conda: https://prefix.dev/conda-forge/osx-arm64/ruff-0.12.12-h2342e2b_0.conda + noarch: python + sha256: 657c8c3792e226b1760e73d5b966747da1b23408c2216eac4570a744bd1dae8d + md5: fdbbb2b472fda6644dc4b438c9ab093b + depends: + - python + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping + size: 10047948 + timestamp: 1757056150878 +- conda: https://prefix.dev/conda-forge/win-64/ruff-0.12.12-h429b229_0.conda + noarch: python + sha256: 6cfbe48566d7833ec41774789d1844552cfbce92552d9d2e84d81b231bc08714 + md5: ffcaaa7bbb2adadc11354e0ee3a6ffc6 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping + size: 11104575 + timestamp: 1757055826158 +- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.2-py310h1d65ade_0.conda + sha256: 4cb98641f870666d365594013701d5691205a0fe81ac3ba7778a23b1cc2caa8e + md5: 8c29cd33b64b2eb78597fa28b5595c8d depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -9173,182 +12439,229 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 18436262 - timestamp: 1736618466062 -- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda - sha256: 387cacd510792d7c7cf86b46374f2885b06f3b9505067cf9d9742a7034aa79bf - md5: 8e181e12d183fd4e44fc2f941cfe8f47 + size: 16417101 + timestamp: 1739791865060 +- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda + sha256: 75c751b8594b810d9c3735641aed6d6c13706e97e5c2ae0cdb49fa7d2da915dd + md5: 270039a4640693aab11ee3c05385f149 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 17210234 + timestamp: 1756530199043 +- conda: https://prefix.dev/conda-forge/osx-64/scipy-1.15.2-py310hef62574_0.conda + sha256: da86efbfa72e4eb3e4748e5471d04fdbe3f9887f367b6302c1dcdb155bbf712b + md5: e79860e43d87b020a0254f0b3f5017c5 + depends: + - __osx >=10.13 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - - libgfortran 5.* + - libgfortran >=5 - libgfortran5 >=13.2.0 - liblapack >=3.9.0,<4.0a0 - numpy <2.5 - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 14530851 - timestamp: 1736618488135 -- conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda - sha256: 3b2342ce7edd3b8391cf321da8cb2bc50ac7dca36b3444b91f82688f9d0671dc - md5: 2b18926b32f740cb76d7cdaf983c1e6f + size: 14682985 + timestamp: 1739792429025 +- conda: https://prefix.dev/conda-forge/osx-64/scipy-1.16.1-py313hf2e9e4d_1.conda + sha256: e01300ced35c3af0d037b787d8d6c2caabdadab4dda88ab833f2ebf2699b8d13 + md5: 0acfa7f16b706fed7238e5b67d4e5abf + depends: + - __osx >=10.13 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping + size: 15480872 + timestamp: 1756530133238 +- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.2-py310h32ab4ed_0.conda + sha256: f6ff2c1ba4775300199e8bc0331d2e2ccb5906f58f3835c5426ddc591c9ad7bf + md5: a389f540c808b22b3c696d7aea791a41 depends: + - __osx >=11.0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - libgfortran >=5 + - libgfortran5 >=13.2.0 - liblapack >=3.9.0,<4.0a0 - numpy <2.5 - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 16956039 - timestamp: 1736619650525 -- conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9 - md5: 8f28e299c11afdd79e0ec1e279dcdc52 + size: 13507343 + timestamp: 1739792089317 +- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda + sha256: 9d365a0ec5f3e710d13fb3497cc6549c0b3153b2fa1ac27476f32ada81c4deca + md5: cfa5f5e690bacf0b2aef1b0ba2c67391 depends: - - python >=3.9 - license: MIT - license_family: MIT + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + - libgfortran5 >=15.1.0 + - liblapack >=3.9.0,<4.0a0 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/setuptools?source=hash-mapping - size: 775598 - timestamp: 1736512753595 -- conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db - md5: a451d576819089b0d672f18768be0f65 + - pkg:pypi/scipy?source=hash-mapping + size: 13967703 + timestamp: 1756530201442 +- conda: https://prefix.dev/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda + sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 + md5: 4de79c071274a53dcaf2a8c749d1499e depends: - python >=3.9 license: MIT license_family: MIT purls: - - pkg:pypi/six?source=hash-mapping - size: 16385 - timestamp: 1733381032766 -- conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda - sha256: 38ad951d30052522693d21b247105744c7c6fb7cefcf41edca36f0688322e76d - md5: 4792f3259c6fdc0b730563a85b211dc0 + - pkg:pypi/setuptools?source=hash-mapping + size: 748788 + timestamp: 1748804951958 +- conda: https://prefix.dev/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + sha256: 57afc2ab5bdb24cf979964018dddbc5dfaee130b415e6863765e45aed2175ee4 + md5: e8a0b4f5e82ecacffaa5e805020473cb depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - - libgcc >=13 - - libstdcxx >=13 - license: BSL-1.0 - purls: [] - size: 1919287 - timestamp: 1731180933533 -- conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda - sha256: 244a788a52c611c91c6b2dc73fdbb4a486261d9d321123d76500a99322bae26a - md5: 00ecdc12398192a5a3a4aaf3d5d10a7c - depends: - - __osx >=11.0 - - libcxx >=18 - - llvm-openmp >=18.1.8 - license: BSL-1.0 - purls: [] - size: 582928 - timestamp: 1731181097813 -- conda: https://prefix.dev/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda - sha256: ec91e86eeb2c6bbf09d51351b851e945185d70661d2ada67204c9a6419d282d3 - md5: 3b3e64af585eadfb52bb90b553db5edf - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD + - libgcc >=14 + - libstdcxx >=14 + license: BSL-1.0 + purls: [] + size: 1951720 + timestamp: 1756274576844 +- conda: https://prefix.dev/conda-forge/osx-64/sleef-3.9.0-h289094c_0.conda + sha256: 7b6749d48be1cea8e4191141b35fe667f776e0b0972d7cf286b276c9bbb57d9d + md5: 97fc81ba1dc812fb37000fe39afa3bf8 + depends: + - __osx >=10.13 + - libcxx >=19 + - llvm-openmp >=19.1.7 + license: BSL-1.0 purls: [] - size: 42739 - timestamp: 1733501881851 -- conda: https://prefix.dev/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f - md5: ded86dee325290da2967a3fea3800eb5 + size: 1484394 + timestamp: 1756274644799 +- conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.9.0-hb028509_0.conda + sha256: 799d0578369e67b6d0d6ecdacada411c259629fc4a500b99703c5e85d0a68686 + md5: 68f833178f171cfffdd18854c0e9b7f9 depends: - __osx >=11.0 - - libcxx >=18 - license: BSD-3-Clause - license_family: BSD + - libcxx >=19 + - llvm-openmp >=19.1.7 + license: BSL-1.0 purls: [] - size: 35857 - timestamp: 1733502172664 -- conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - sha256: 29753b51803c0396c3cb56e4f11e68c968a2f43b71b648634bef1f9193f9e78b - md5: e32fb978aaea855ddce624eb8c8eb69a + size: 587027 + timestamp: 1756274982526 +- conda: https://prefix.dev/conda-forge/win-64/sleef-3.9.0-h67fd636_0.conda + sha256: 1ad2f42ff6c94256ab79ab1c5725d322a4e11737bd4dd91454feeff978f4cf38 + md5: b9b2c54ede806361393491042f0835aa depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSL-1.0 purls: [] - size: 59757 - timestamp: 1733502109991 -- conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 - md5: 4d22a9315e78c6827f806065957d566e + size: 2294375 + timestamp: 1756275262440 +- conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 + md5: 755cf22df8693aa0d1aec1c123fa5863 depends: - - python >=2 + - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/snowballstemmer?source=hash-mapping - size: 58824 - timestamp: 1637143137377 -- conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 - md5: 6d6552722448103793743dabfbda532d + size: 73009 + timestamp: 1747749529809 +- conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda + sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7 + md5: 0401a17ae845fa72c7210e206ec5647d depends: - - python >=2.7 + - python >=3.9 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/sortedcontainers?source=hash-mapping - size: 26314 - timestamp: 1621217159824 -- conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c - md5: 3f144b2c34f8cb5a9abd9ed23a39c561 + size: 28657 + timestamp: 1738440459037 +- conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda + sha256: c978576cf9366ba576349b93be1cfd9311c00537622a2f9e14ba2b90c97cae9c + md5: 18c019ccf43769d211f2cf78e9ad46c2 depends: - - python >=3.8 + - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/soupsieve?source=hash-mapping - size: 36754 - timestamp: 1693929424267 -- conda: https://prefix.dev/conda-forge/noarch/sparse-0.15.4-pyh267e887_1.conda - sha256: d6698bdf9411daf3f79f3745b687b18df47b5201e3d1e486fac62722cbe0bc32 - md5: 40d80cd9fa4cc759c6dba19ea96642db + - pkg:pypi/soupsieve?source=compressed-mapping + size: 37803 + timestamp: 1756330614547 +- conda: https://prefix.dev/conda-forge/noarch/sparse-0.17.0-pyhcf101f3_0.conda + sha256: 8406de1065e1d4ba206d611dae9a03de7f226f486ce9fb02ab0f29c3bd031a6a + md5: 1b59de14a7e5888f939611e1fe329e00 depends: - - python >=3.8 + - python >=3.10 - numpy >=1.17 - - scipy >=0.19 - numba >=0.49 - python license: BSD-3-Clause license_family: BSD - purls: [] - size: 98181 - timestamp: 1727687215683 -- conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - sha256: 3228eb332ce159f031d4b7d2e08117df973b0ba3ddcb8f5dbb7f429f71d27ea1 - md5: 1a3281a0dc355c02b5506d87db2d78ac + purls: + - pkg:pypi/sparse?source=hash-mapping + size: 121488 + timestamp: 1747799051402 +- conda: https://prefix.dev/conda-forge/noarch/sphinx-8.3.0-pyhd8ed1ab_0.conda + sha256: 03c4d8b4cf3c5418e15f30f45be52bcde7c7e05baeec7dec5aaf6e238a411481 + md5: 6ce9ddee4c0f68bda548303196f4cf4c depends: - alabaster >=0.7.14 - babel >=2.13 @@ -9358,8 +12671,9 @@ packages: - jinja2 >=3.1 - packaging >=23.0 - pygments >=2.17 - - python >=3.10 + - python >=3.11 - requests >=2.30.0 + - roman-numerals-py >=1.0.0 - snowballstemmer >=2.2 - sphinxcontrib-applehelp >=1.0.7 - sphinxcontrib-devhelp >=1.0.6 @@ -9367,37 +12681,36 @@ packages: - sphinxcontrib-jsmath >=1.0.1 - sphinxcontrib-qthelp >=1.0.6 - sphinxcontrib-serializinghtml >=1.1.9 - - tomli >=2.0 license: BSD-2-Clause license_family: BSD purls: - pkg:pypi/sphinx?source=hash-mapping - size: 1387076 - timestamp: 1733754175386 -- conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.0.0-pyhd8ed1ab_0.conda - sha256: aeb036de447e78f2c7d718822d99b7e285d4d96b191afd85aab8a39d5ec19a85 - md5: 243019ab35941dc825817a5ee4fd7ef4 + size: 1427513 + timestamp: 1756120552616 +- conda: https://prefix.dev/conda-forge/noarch/sphinx-autodoc-typehints-3.2.0-pyhd8ed1ab_0.conda + sha256: e9923b7d282ac8840ebe9e2665685a337698f4a93e6eb3c81dc18fe223c1bb57 + md5: 6162f3f1cf914d08b80db65ed2d51871 depends: - - python >=3.10 - - sphinx >=8.1.3 + - python >=3.11 + - sphinx >=8.2 license: MIT license_family: MIT purls: - pkg:pypi/sphinx-autodoc-typehints?source=hash-mapping - size: 23860 - timestamp: 1735917178684 -- conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda - sha256: 091293964075ed1905731d09ff2691e053cd9d5335d99501f05683da29de0ee7 - md5: 463d989a8f1506bcf51cc37d7beebdf1 + size: 24745 + timestamp: 1745624912567 +- conda: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_3.conda + sha256: 90d900d31afe0bd6f42cf1e529e23e6eac4284b48bc64e5e942f19f5bf8ef0f2 + md5: a090580065b21d9c56662ebe68f6e7a6 depends: - - python >=3.7 + - python >=3.9 - sphinx >=4.0 license: MIT license_family: MIT purls: - pkg:pypi/sphinx-basic-ng?source=hash-mapping - size: 20338 - timestamp: 1727436819491 + size: 20495 + timestamp: 1737748706101 - conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19 md5: bf22cb9c439572760316ce0748af3713 @@ -9495,93 +12808,108 @@ packages: - pkg:pypi/stack-data?source=hash-mapping size: 26988 timestamp: 1733569565672 -- conda: https://prefix.dev/conda-forge/noarch/sympy-1.13.3-pyh2585a3b_105.conda - sha256: 929d939c5a8bcdc10a17501890918da68cf14a5883b36fddf77b8f0fbf040be2 - md5: 254cd5083ffa04d96e3173397a3d30f4 +- conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda + sha256: 60f18c60f6518254f0d28e4892e94c851cdbd650f7bd49899a6169f76cf6796b + md5: d814547f1cbcb6f8397ca5686fee8175 depends: - - __unix - - cpython - - gmpy2 >=2.0.8 - mpmath >=0.19 - python >=3.9 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/sympy?source=hash-mapping - size: 4523617 - timestamp: 1736248315124 -- conda: https://prefix.dev/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda - sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a - md5: 959484a66b4b76befcddc4fa97c95567 + size: 4608875 + timestamp: 1745946180513 +- conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_105.conda + sha256: 09d3b6ac51d437bc996ad006d9f749ca5c645c1900a854a6c8f193cbd13f03a8 + md5: 8c09fac3785696e1c477156192d64b91 depends: + - __unix + - cpython + - gmpy2 >=2.0.8 + - mpmath >=0.19 - python >=3.9 - license: MIT - license_family: MIT + license: BSD-3-Clause + license_family: BSD purls: - - pkg:pypi/tabulate?source=hash-mapping - size: 37554 - timestamp: 1733589854804 -- conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda - sha256: 65463732129899770d54b1fbf30e1bb82fdebda9d7553caf08d23db4590cd691 - md5: ba7726b8df7b9d34ea80e82b097a4893 + - pkg:pypi/sympy?source=hash-mapping + size: 4616621 + timestamp: 1745946173026 +- conda: https://prefix.dev/conda-forge/linux-64/tbb-2021.13.0-hb60516a_3.conda + sha256: cf9101d1327de410a844f29463c486c47dfde506d0c0656d2716c03135666c3f + md5: aa15aae38fd752855ca03a68af7f40e2 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libhwloc >=2.11.2,<2.11.3.0a0 - - libstdcxx >=13 + - libgcc >=14 + - libhwloc >=2.12.1,<2.12.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 177271 + timestamp: 1755775913224 +- conda: https://prefix.dev/conda-forge/osx-64/tbb-2021.13.0-hc025b3e_3.conda + sha256: 1630e6eb707fd9a4d2f5a2be86201d6f06421b066678f74cedffbd77213e1ec2 + md5: d84bd3dece21dc81c494ce4096bd59b1 + depends: + - __osx >=10.13 + - libcxx >=19 + - libhwloc >=2.12.1,<2.12.2.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 175954 - timestamp: 1732982638805 -- conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - sha256: 03cc5442046485b03dd1120d0f49d35a7e522930a2ab82f275e938e17b07b302 - md5: 9190dd0a23d925f7602f9628b3aed511 + size: 159676 + timestamp: 1755776105967 +- conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h18a62a1_3.conda + sha256: 30e82640a1ad9d9b5bee006da7e847566086f8fdb63d15b918794a7ef2df862c + md5: 72226638648e494aaafde8155d50dab2 depends: - - libhwloc >=2.11.2,<2.11.3.0a0 + - libhwloc >=2.12.1,<2.12.2.0a0 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: APACHE purls: [] - size: 151460 - timestamp: 1732982860332 -- conda: https://prefix.dev/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda - sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a - md5: 60ce69f73f3e75b21f1c27b1b471320c + size: 150266 + timestamp: 1755776172092 +- conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 + md5: a0116df4f4ed05c303811a837d5b39d8 depends: - - python >=3.9 - license: BSD-2-Clause + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: TCL license_family: BSD - purls: - - pkg:pypi/tblib?source=hash-mapping - size: 17421 - timestamp: 1733842487151 -- conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e - md5: d453b98d9c83e71da0741bb0ff4d76bc + purls: [] + size: 3285204 + timestamp: 1748387766691 +- conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda + sha256: b24468006a96b71a5f4372205ea7ec4b399b0f2a543541e86f883de54cd623fc + md5: 9864891a6946c2fe037c02fca7392ab4 depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 license: TCL license_family: BSD purls: [] - size: 3318875 - timestamp: 1699202167581 -- conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 - md5: b50a57ba89c32b62428b71a875291c9b + size: 3259809 + timestamp: 1748387843735 +- conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e + md5: 7362396c170252e7b7b0c8fb37fe9c78 depends: - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 license: TCL license_family: BSD purls: [] - size: 3145523 - timestamp: 1699202432999 -- conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 - md5: fc048363eb8f03cd1737600a5d08aafe + size: 3125538 + timestamp: 1748388189063 +- conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h2c6b04d_2.conda + sha256: e3614b0eb4abcc70d98eae159db59d9b4059ed743ef402081151a948dce95896 + md5: ebd0e761de9aa879a51d22cc721bd095 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 @@ -9589,8 +12917,8 @@ packages: license: TCL license_family: BSD purls: [] - size: 3503410 - timestamp: 1699202577803 + size: 3466348 + timestamp: 1748388121356 - conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938 md5: b0dd904de08b7db706167240bf37b164 @@ -9602,28 +12930,29 @@ packages: - pkg:pypi/toml?source=hash-mapping size: 22132 timestamp: 1734091907682 -- conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e - md5: ac944244f1fed2eb49bae07193ae8215 +- conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda + sha256: 040a5a05c487647c089ad5e05ad5aff5942830db2a4e656f1e300d73436436f1 + md5: 30a0a26c8abccf4b7991d590fe17c699 depends: - python >=3.9 + - python license: MIT license_family: MIT purls: - - pkg:pypi/tomli?source=hash-mapping - size: 19167 - timestamp: 1733256819729 -- conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda - sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2 - md5: 1d9ab4fc875c52db83f9c9b40af4e2c8 + - pkg:pypi/tomli?source=compressed-mapping + size: 21238 + timestamp: 1753796677376 +- conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.3-pyha770c72_0.conda + sha256: f8d3b49c084831a20923f66826f30ecfc55a4cd951e544b7213c692887343222 + md5: 146402bf0f11cbeb8f781fa4309a95d3 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/tomlkit?source=hash-mapping - size: 37372 - timestamp: 1733230836889 + size: 38777 + timestamp: 1749127286558 - conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87 md5: 40d0ed782a8aaa16ef248e68c06c168d @@ -9635,49 +12964,6 @@ packages: - pkg:pypi/toolz?source=hash-mapping size: 52475 timestamp: 1733736126261 -- conda: https://prefix.dev/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda - sha256: 9c2b86d4e58c8b0e7d13a7f4c440f34e2201bae9cfc1d7e1d30a5bc7ffb1d4c8 - md5: 166d59aab40b9c607b4cc21c03924e9d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 650307 - timestamp: 1732616034421 -- conda: https://prefix.dev/conda-forge/osx-arm64/tornado-6.4.2-py310h078409c_0.conda - sha256: 1263e018a20c98c6ff10e830ea5f13855d33f87f751329f3f6d207b182871acc - md5: 21218c56939379bcfeddd26ea37d3fe7 - depends: - - __osx >=11.0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 652533 - timestamp: 1732616281463 -- conda: https://prefix.dev/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda - sha256: 2e5671d0db03961692b3390778ce6aba40702bd57584fa60badf4baa7614679b - md5: e6819d3a0cae0f1b1838875f858421d1 - depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 655262 - timestamp: 1732616377814 - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 md5: 019a7385be9af33791c989871317e1ed @@ -9689,95 +12975,145 @@ packages: - pkg:pypi/traitlets?source=hash-mapping size: 110051 timestamp: 1733367480074 -- conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - noarch: python - sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 - md5: b6a408c64b78ec7b779a3e5c7a902433 +- conda: https://prefix.dev/conda-forge/linux-64/triton-3.3.1-cuda129py310hc5d9a74_2.conda + sha256: 3cf8866c7f2a9bd3f39acfd76c77a88142be13bd24f7f0f5ef298e18d4891ad0 + md5: 63b23d57666798d74819562a59d83e19 + depends: + - python + - setuptools + - cuda-nvcc-tools + - cuda-cuobjdump + - cuda-cudart + - cuda-cupti + - cuda-version >=12.9,<13 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.10.* *_cp310 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - cuda-cupti >=12.9.79,<13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/triton?source=hash-mapping + size: 166282805 + timestamp: 1752734512027 +- conda: https://prefix.dev/conda-forge/linux-64/triton-3.3.1-cuda129py313h246eb7c_2.conda + sha256: f727077df9ee211d07261d477e5b5a9e27152fefbf9d8f7442387291fdbd3d4c + md5: ad9bc88c14e3bcca61edf02a4198ea5a + depends: + - python + - setuptools + - cuda-nvcc-tools + - cuda-cuobjdump + - cuda-cudart + - cuda-cupti + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<13 + - libstdcxx >=14 + - libgcc >=14 + - cuda-cupti >=12.9.79,<13.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/triton?source=hash-mapping + size: 166656378 + timestamp: 1752734683657 +- conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 depends: - - typing_extensions 4.12.2 pyha770c72_1 + - typing_extensions ==4.15.0 pyhcf101f3_0 license: PSF-2.0 license_family: PSF purls: [] - size: 10075 - timestamp: 1733188758872 -- conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 - md5: d17f13df8b65464ca316cbc000a3cb64 + size: 91383 + timestamp: 1756220668932 +- conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d depends: - - python >=3.9 + - python >=3.10 + - python license: PSF-2.0 license_family: PSF purls: - - pkg:pypi/typing-extensions?source=hash-mapping - size: 39637 - timestamp: 1733188758212 -- conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 - license: LicenseRef-Public-Domain - purls: [] - size: 122354 - timestamp: 1728047496079 -- conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 - md5: 6797b005cd0f439c4c5c9ac565783700 + - pkg:pypi/typing-extensions?source=compressed-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://prefix.dev/conda-forge/linux-64/typos-1.36.2-hdab8a38_0.conda + sha256: 2d419ca7b69d367d9659790ec1cb11453388eb07e1819a09610784d4207ce1e5 + md5: 0b1ad6cffee557addc49125d6a332cd5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 constrains: - - vs2015_runtime >=14.29.30037 - license: LicenseRef-MicrosoftWindowsSDK10 + - __glibc >=2.17 + license: MIT + license_family: MIT purls: [] - size: 559710 - timestamp: 1728377334097 -- conda: https://prefix.dev/conda-forge/linux-64/ukkonen-1.0.1-py313h33d0bda_5.conda - sha256: 4edcb6a933bb8c03099ab2136118d5e5c25285e3fd2b0ff0fa781916c53a1fb7 - md5: 5bcffe10a500755da4a71cc0fb62a420 + size: 3460248 + timestamp: 1757034234272 +- conda: https://prefix.dev/conda-forge/osx-64/typos-1.36.1-h121f529_0.conda + sha256: 9a23e9ccdc7478e956952c3349391597d20169e4ecc6065f89c6b6cdb964922e + md5: 1e5094f326b38c2145529f5e519e1792 depends: - - __glibc >=2.17,<3.0.a0 - - cffi - - libgcc >=13 - - libstdcxx >=13 - - python >=3.13.0rc1,<3.14.0a0 - - python_abi 3.13.* *_cp313 + - __osx >=10.13 + constrains: + - __osx >=10.13 license: MIT license_family: MIT - purls: - - pkg:pypi/ukkonen?source=hash-mapping - size: 13916 - timestamp: 1725784177558 -- conda: https://prefix.dev/conda-forge/osx-arm64/ukkonen-1.0.1-py313hf9c7212_5.conda - sha256: 482eac475928c031948790647ae10c2cb1d4a779c2e8f35f5fd1925561b13203 - md5: 8ddba23e26957f0afe5fc9236c73124a + purls: [] + size: 2773096 + timestamp: 1756963522153 +- conda: https://prefix.dev/conda-forge/osx-arm64/typos-1.36.2-hd1458d2_0.conda + sha256: 14f31abaa614cd77b66e02041aac05ac1a976eefb3b196cf1701d68dcfcbc218 + md5: affadc5cc6230e445d8fa1c5324c56e2 depends: - __osx >=11.0 - - cffi - - libcxx >=17 - - python >=3.13.0rc1,<3.14.0a0 - - python >=3.13.0rc1,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 + constrains: + - __osx >=11.0 license: MIT license_family: MIT - purls: - - pkg:pypi/ukkonen?source=hash-mapping - size: 13689 - timestamp: 1725784235751 -- conda: https://prefix.dev/conda-forge/win-64/ukkonen-1.0.1-py313h1ec8472_5.conda - sha256: 4f57f2eccd5584421f1b4d8c96c167c1008cba660d7fab5bdec1de212a0e0ff0 - md5: 97337494471e4265a203327f9a194234 + purls: [] + size: 2723600 + timestamp: 1757034677936 +- conda: https://prefix.dev/conda-forge/win-64/typos-1.36.2-h77a83cd_0.conda + sha256: 4ea4c4356442260b3256241db0eed816d9f40e5176fa6aad8e0568690f1f807c + md5: 2c830d0f7c376e7fbb65979e76f4e59b depends: - - cffi - - python >=3.13.0rc1,<3.14.0a0 - - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: MIT license_family: MIT - purls: - - pkg:pypi/ukkonen?source=hash-mapping - size: 17210 - timestamp: 1725784604368 -- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e - md5: 32674f8dbfb7b26410ed580dd3c10a29 + purls: [] + size: 2584195 + timestamp: 1757034572179 +- conda: https://prefix.dev/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: [] + size: 122968 + timestamp: 1742727099393 +- conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 + md5: 71b24316859acd00bdb8b38f5e2ce328 + constrains: + - vc14_runtime >=14.29.30037 + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 694692 + timestamp: 1756385147981 +- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda + sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8 + md5: 436c165519e140cb08d246a4472a9d6a depends: - brotli-python >=1.0.9 - h2 >=4,<5 @@ -9788,56 +13124,66 @@ packages: license_family: MIT purls: - pkg:pypi/urllib3?source=hash-mapping - size: 100102 - timestamp: 1734859520452 -- conda: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda - sha256: 986ddaf8feec2904eac9535a7ddb7acda1a1dfb9482088fdb8129f1595181663 - md5: 7c10ec3158d1eb4ddff7007c9101adb0 + size: 101735 + timestamp: 1750271478254 +- conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.24.1-pyhd8ed1ab_0.conda + sha256: d00daac3cae5ebbea552985af3e9deca73a8f6638ae4b739f13f52360e181e82 + md5: ddb271534ef5fdc3c2faa9776507a425 + depends: + - python >=3.9 + - python-fastjsonschema >=2.16.2,<=3 + license: BSD-3-Clause AND MIT AND MPL-2.0 + purls: + - pkg:pypi/validate-pyproject?source=hash-mapping + size: 49295 + timestamp: 1742602820328 +- conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_31.conda + sha256: cb357591d069a1e6cb74199a8a43a7e3611f72a6caed9faa49dbb3d7a0a98e0b + md5: 28f4ca1e0337d0f27afb8602663c5723 depends: - - vc14_runtime >=14.38.33135 + - vc14_runtime >=14.44.35208 track_features: - vc14 license: BSD-3-Clause license_family: BSD purls: [] - size: 17479 - timestamp: 1731710827215 -- conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda - sha256: c483b090c4251a260aba6ff3e83a307bcfb5fb24ad7ced872ab5d02971bd3a49 - md5: 32b37d0cfa80da34548501cdc913a832 + size: 18249 + timestamp: 1753739241465 +- conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_31.conda + sha256: af4b4b354b87a9a8d05b8064ff1ea0b47083274f7c30b4eb96bc2312c9b5f08f + md5: 603e41da40a765fd47995faa021da946 depends: - ucrt >=10.0.20348.0 + - vcomp14 14.44.35208 h818238b_31 constrains: - - vs2015_runtime 14.42.34433.* *_23 + - vs2015_runtime 14.44.35208.* *_31 license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] - size: 754247 - timestamp: 1731710681163 -- conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.1-pyhd8ed1ab_0.conda - sha256: c8bde4547ddbd21ea89e483a7c65d8a5e442c0db494b0b977e389b75b9d03d62 - md5: 680b1c287b10cefc8bda0530b217229f + size: 682424 + timestamp: 1753739239305 +- conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_31.conda + sha256: 67b317b64f47635415776718d25170a9a6f9a1218c0f5a6202bfd687e07b6ea4 + md5: a6b1d5c1fc3cb89f88f7179ee6a9afe3 depends: - - distlib >=0.3.7,<1 - - filelock >=3.12.2,<4 - - platformdirs >=3.9.1,<5 - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/virtualenv?source=hash-mapping - size: 3350367 - timestamp: 1735929107438 -- conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda - sha256: 568ce8151eaae256f1cef752fc78651ad7a86ff05153cc7a4740b52ae6536118 - md5: 5c176975ca2b8366abad3c97b3cd1e83 + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.44.35208.* *_31 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 113963 + timestamp: 1753739198723 +- conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_31.conda + sha256: 8b20152d00e1153ccb1ed377a160110482f286a6d85a82b57ffcd60517d523a7 + md5: d75abcfbc522ccd98082a8c603fce34c depends: - - vc14_runtime >=14.42.34433 + - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD purls: [] - size: 17572 - timestamp: 1731710685291 + size: 18249 + timestamp: 1753739241918 - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5 md5: b68980f2495d096e71c7fd9d7ccf63e6 @@ -9860,294 +13206,175 @@ packages: - pkg:pypi/win-inet-pton?source=hash-mapping size: 9555 timestamp: 1733130678956 -- conda: https://prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 - md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 +- conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a depends: + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT - license_family: MIT - purls: [] - size: 14780 - timestamp: 1734229004433 -- conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - sha256: f33e6f013fc36ebc200f09ddead83468544cb5c353a3b50499b07b8c34e28a8d - md5: 50901e0764b7701d8ed7343496f4f301 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 13593 - timestamp: 1734229104321 -- conda: https://prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-h0e40799_0.conda - sha256: 047836241b2712aab1e29474a6f728647bff3ab57de2806b0bb0a6cf9a2d2634 - md5: 2ffbfae4548098297c033228256eb96e - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 license: MIT license_family: MIT purls: [] - size: 108013 - timestamp: 1734229474049 -- conda: https://prefix.dev/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee - md5: 8035c64cb77ed555e3f150b7b3972480 + size: 85189 + timestamp: 1753484064210 +- conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda + sha256: a335161bfa57b64e6794c3c354e7d49449b28b8d8a7c4ed02bf04c3f009953f9 + md5: a645bb90997d3fc2aea0adf6517059bd depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - __osx >=10.13 license: MIT license_family: MIT purls: [] - size: 19901 - timestamp: 1727794976192 -- conda: https://prefix.dev/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 - md5: 77c447f48cab5d3a15ac224edb86a968 + size: 79419 + timestamp: 1753484072608 +- conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac + md5: 78a0fe9e9c50d2c381e8ee47e3ea437d depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 18487 - timestamp: 1727795205022 -- conda: https://prefix.dev/conda-forge/win-64/xorg-libxdmcp-1.1.5-h0e40799_0.conda - sha256: 9075f98dcaa8e9957e4a3d9d30db05c7578a536950a31c200854c5c34e1edb2c - md5: 8393c0f7e7870b4eb45553326f81f0ff + size: 83386 + timestamp: 1753484079473 +- conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309 + md5: 433699cba6602098ae8957a323da2664 depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 license: MIT license_family: MIT purls: [] - size: 69920 - timestamp: 1727795651979 -- conda: https://prefix.dev/conda-forge/noarch/xyzservices-2024.9.0-pyhd8ed1ab_1.conda - sha256: 5f8757092fc985d7586f2659505ec28757c05fd65d8d6ae549a5cec7e3376977 - md5: c79cea50b258f652010cb6c8d81591b5 - depends: - - python >=3.8 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/xyzservices?source=hash-mapping - size: 46860 - timestamp: 1733143536777 -- conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 - md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae - depends: - - libgcc-ng >=9.4.0 - license: MIT - license_family: MIT - purls: [] - size: 89141 - timestamp: 1641346969816 -- conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 - md5: 4bb3f014845110883a3c5ee811fd84b4 - license: MIT - license_family: MIT - purls: [] - size: 88016 - timestamp: 1641347076660 -- conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - sha256: 4e2246383003acbad9682c7c63178e2e715ad0eb84f03a8df1fbfba455dfedc5 - md5: adbfb9f45d1004a26763652246a33764 - depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - license: MIT - license_family: MIT - purls: [] - size: 63274 - timestamp: 1641347623319 -- conda: https://prefix.dev/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d - md5: e52c2ef711ccf31bb7f70ca87d144b9e - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/zict?source=hash-mapping - size: 36341 - timestamp: 1733261642963 -- conda: https://prefix.dev/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda - sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 - md5: 0c3cc595284c5e8f0f9900a9b228a332 + size: 63944 + timestamp: 1753484092156 +- conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda + sha256: 7560d21e1b021fd40b65bfb72f67945a3fcb83d78ad7ccf37b8b3165ec3b68ad + md5: df5e78d904988eb55042c0c97446079f depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/zipp?source=hash-mapping - size: 21809 - timestamp: 1732827613585 -- conda: https://prefix.dev/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab - md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib 1.3.1 hb9d3cd8_2 - license: Zlib - license_family: Other - purls: [] - size: 92286 - timestamp: 1727963153079 -- conda: https://prefix.dev/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 - md5: e3170d898ca6cb48f1bb567afb92f775 - depends: - - __osx >=11.0 - - libzlib 1.3.1 h8359307_2 - license: Zlib - license_family: Other - purls: [] - size: 77606 - timestamp: 1727963209370 -- conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - sha256: fcd784735205d6c5f19dcb339f92d2eede9bc42a01ec2c384381ee1b6089d4f6 - md5: f49de34fb99934bf49ab330b5caffd64 - depends: - - __glibc >=2.17,<3.0.a0 - - cffi >=1.11 - - libgcc >=13 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 408309 - timestamp: 1725305719512 -- conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda - sha256: ea82f2b8964150a3aa7373b4697e48e64f2200fe68ae554ee85c641c692d1c97 - md5: c178558ff516cd507763ffee230c20b2 + size: 22963 + timestamp: 1749421737203 +- conda: https://prefix.dev/conda-forge/linux-64/zstandard-0.24.0-py313h736c1ce_1.conda + sha256: 5a148ac6fc01e41e635e1e5ac4a0fb834e29599a737cd5dddec98ae393bf9efc + md5: 2ca7715c89929da3d648144f8b34cf99 depends: - __glibc >=2.17,<3.0.a0 - cffi >=1.11 - - libgcc >=13 - - python >=3.13.0rc1,<3.14.0a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zstd >=1.5.7,<1.5.8.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/zstandard?source=hash-mapping - size: 424424 - timestamp: 1725305749031 -- conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda - sha256: a90d06cbfa50fc9b3c37bd092d559452475f22425bacf28f04ecac2e8b1c389c - md5: 81b300570a423c9c9521b79f8f2ed1ba + size: 428554 + timestamp: 1756841112889 +- conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda + sha256: f674b7fcf016a63018cbe35b1e489d9ee66ec75ce26a118a3451584f496fc923 + md5: 5d19d0e2227af7e02e5475c76260ec18 depends: - - __osx >=11.0 + - __osx >=10.13 - cffi >=1.11 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - zstd >=1.5.7,<1.5.8.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause - license_family: BSD purls: - pkg:pypi/zstandard?source=hash-mapping - size: 320810 - timestamp: 1725305704555 -- conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.23.0-py313hf2da073_1.conda - sha256: 12b4e34acff24d291e2626c6610dfd819b8d99a461025ae59affcb6e84bc1d57 - md5: deebca66926691fadaaf16da05ecb5f9 + size: 419581 + timestamp: 1756841309712 +- conda: https://prefix.dev/conda-forge/osx-arm64/zstandard-0.24.0-py313hff09f02_1.conda + sha256: 5e5a6f0fb2d1c08a72918b5d2d97dff2692327b772f48445d27e440d1ef69a6a + md5: 43b6a7c0b0ae0baa7937a769b74ca2f6 depends: - __osx >=11.0 - cffi >=1.11 - - python >=3.13.0rc1,<3.14.0a0 - - python >=3.13.0rc1,<3.14.0a0 *_cp313 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zstd >=1.5.7,<1.5.8.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/zstandard?source=hash-mapping - size: 336496 - timestamp: 1725305912716 -- conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - sha256: 4e8aff4d0d42024e9f70783e51666186a681384d59fdd03fafda4b28f1fd540e - md5: 2a879227ccc1a10a2caddf12607ffaeb + size: 349620 + timestamp: 1756841373649 +- conda: https://prefix.dev/conda-forge/win-64/zstandard-0.24.0-py313hcdcf24b_1.conda + sha256: 4a2f488f8df9b19c14f7b66b55431146d18f8070bd722f1760713e28a0c3e9ec + md5: b35c9d56c92c2d3846908b87e4d40ede depends: - cffi >=1.11 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.5.8.0a0 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/zstandard?source=hash-mapping - size: 311278 - timestamp: 1725306039901 -- conda: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda - sha256: 1d2744ec0e91da267ce749e19142081472539cb140a7dad0646cd249246691fe - md5: 8e017aca933f4dd25491151edd3e7820 + size: 351525 + timestamp: 1756841550515 +- conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb + md5: 6432cb5d4ac0046c3ac0a8a0f95842f9 depends: - - cffi >=1.11 - - python >=3.13.0rc1,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.6,<1.5.7.0a0 - - zstd >=1.5.6,<1.6.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/zstandard?source=hash-mapping - size: 325703 - timestamp: 1725305947138 -- conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b - md5: 4d056880988120e29d75bfff282e0f45 + purls: [] + size: 567578 + timestamp: 1742433379869 +- conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + sha256: c171c43d0c47eed45085112cb00c8c7d4f0caa5a32d47f2daca727e45fb98dca + md5: cd60a4a5a8d6a476b30d8aa4bb49251a depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 554846 - timestamp: 1714722996770 -- conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 - md5: d96942c06c3e84bfcc5efb038724a7fd + size: 485754 + timestamp: 1742433356230 +- conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + sha256: 0d02046f57f7a1a3feae3e9d1aa2113788311f3cf37a3244c71e61a93177ba67 + md5: e6f69c7bcccdefa417f056fa593b40f0 depends: - __osx >=11.0 - - libzlib >=1.2.13,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 405089 - timestamp: 1714723101397 -- conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 - md5: 9a17230f95733c04dc40a2b1e5491d74 + size: 399979 + timestamp: 1742433432699 +- conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda + sha256: bc64864377d809b904e877a98d0584f43836c9f2ef27d3d2a1421fa6eae7ca04 + md5: 21f56217d6125fb30c3c3f10c786d751 depends: - - libzlib >=1.2.13,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD purls: [] - size: 349143 - timestamp: 1714723445995 + size: 354697 + timestamp: 1742433568506 diff --git a/pyproject.toml b/pyproject.toml index fee54b1a..0c43d5e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,124 +5,136 @@ build-backend = "hatchling.build" [project] name = "array-api-extra" authors = [ - { name = "Lucas Colley", email = "lucas.colley8@gmail.com" }, - # { name = "Open Source Contributors" }, # https://github.com/pypi/warehouse/issues/14813 + { name = "Lucas Colley", email = "lucas.colley8@gmail.com" }, + # { name = "Open Source Contributors" }, # https://github.com/pypi/warehouse/issues/14813 ] description = "Extra array functions built on top of the array API standard." readme = "README.md" license.file = "LICENSE" requires-python = ">=3.10" classifiers = [ - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Typing :: Typed", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: Free Threading :: 3 - Stable", + "Typing :: Typed", ] dynamic = ["version"] -dependencies = ["array-api-compat>=1.10.0,<2"] - -[project.optional-dependencies] -tests = [ - "pytest >=6", - "pytest-cov >=3", - "array-api-strict", - "numpy", -] -docs = [ - "sphinx>=7.0", - "myst_parser>=0.13", - "sphinx_copybutton", - "sphinx_autodoc_typehints", - "furo>=2023.08.17", -] +dependencies = ["array-api-compat>=1.12.0,<2"] [project.urls] Homepage = "https://github.com/data-apis/array-api-extra" "Bug Tracker" = "https://github.com/data-apis/array-api-extra/issues" Changelog = "https://github.com/data-apis/array-api-extra/releases" - # Hatch [tool.hatch] version.path = "src/array_api_extra/__init__.py" +[tool.hatch.build.targets.sdist] +exclude = ["codecov.yml", "pixi.lock", "RELEASING.md", "renovate.json"] -#Β Pixi +# Β Pixi [tool.pixi.project] channels = ["https://prefix.dev/conda-forge"] -platforms = ["linux-64", "osx-arm64", "win-64"] +platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] [tool.pixi.dependencies] -python = ">=3.10,<3.14" -array-api-compat = ">=1.10.0,<2" +array-api-compat = ">=1.12.0,<2" [tool.pixi.pypi-dependencies] array-api-extra = { path = ".", editable = true } [tool.pixi.feature.lint.dependencies] -pre-commit = "*" -pylint = "*" -basedmypy = "*" -basedpyright = "*" -numpydoc = ">=1.8.0,<2" +typing-extensions = ">=4.15.0" +pylint = ">=3.3.8" +mypy = ">=1.17.1" +basedpyright = ">=1.31.3" +numpydoc = ">=1.9.0,<2" # import dependencies for mypy: -array-api-strict = "*" -numpy = "*" -pytest = "*" +array-api-strict = ">=2.4.1,<2.5" +numpy = ">=2.1.3" +hypothesis = ">=6.138.3" +dask-core = ">=2025.7.0" # No distributed, tornado, etc. +dprint = ">=0.50.0,<0.51" +lefthook = ">=1.12.3,<2" +ruff = ">=0.12.11,<0.13" +typos = ">=1.36.0,<2" +actionlint = ">=1.7.7,<2" +blacken-docs = ">=1.19.1,<2" +pytest = ">=8.4.1,<9" +validate-pyproject = ">=0.24.1,<0.25" +# NOTE: don't add cupy, jax, pytorch, or sparse here, +# as they slow down mypy and are not portable across target OSs [tool.pixi.feature.lint.tasks] -pre-commit-install = "pre-commit install" -pre-commit = "pre-commit run --all-files" -mypy = "mypy" -pylint = { cmd = "pylint array_api_extra", cwd = "src" } -pyright = "basedpyright" -lint = { depends-on = ["pre-commit", "pylint", "mypy", "pyright"] } +lefthook = { cmd = "lefthook", description = "Run lefthook" } +hooks = { cmd = "lefthook install", description = "Install pre-commit hooks" } +pre-commit = { cmd = "lefthook run pre-commit", description = "Run pre-commit checks" } +pylint = { cmd = "pylint array_api_extra", cwd = "src", description = "Lint with pylint" } +mypy = { cmd = "mypy", description = "Type check with mypy" } +pyright = { cmd = "basedpyright", description = "Type check with basedpyright" } +ruff-check = { cmd = "ruff check --fix", description = "Lint with ruff" } +ruff-format = { cmd = "ruff format", description = "Format with ruff" } +dprint = { cmd = "dprint fmt", description = "Format with dprint" } +typos = { cmd = "typos --write-changes --force-exclude", description = "Fix typos" } +actionlint = { cmd = "actionlint", description = "Lint actions with actionlint" } +blacken-docs = { cmd = "blacken-docs", description = "Format Python markdown blocks with Black" } +validate-pyproject = { cmd = "validate-pyproject pyproject.toml", description = "Validate pyproject.toml" } +numpydoc = { cmd = "numpydoc lint", description = "Validate docstrings with numpydoc" } +lint = { cmd = "lefthook run pre-commit --all-files --force", description = "Run all linters" } [tool.pixi.feature.tests.dependencies] -pytest = ">=6" -pytest-cov = ">=3" -array-api-strict = "*" -numpy = "*" +pytest = ">=8.4.1" +pytest-cov = ">=6.2.1" +hypothesis = ">=6.138.3" +array-api-strict = ">=2.4.1,<2.5" +numpy = ">=1.22.0" [tool.pixi.feature.tests.tasks] -tests = "pytest -v" -tests-cov = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20" +tests = { cmd = "pytest -v", description = "Run tests" } +tests-cov = { cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20", description = "Run tests with coverage" } -clean-vendor-compat = "rm -rf vendor_tests/array_api_compat" -clean-vendor-extra = "rm -rf vendor_tests/array_api_extra" -copy-vendor-compat = { cmd = "cp -r $(python -c 'import site; print(site.getsitepackages()[0])')/array_api_compat vendor_tests/", depends-on = ["clean-vendor-compat"] } -copy-vendor-extra = { cmd = "cp -r src/array_api_extra vendor_tests/", depends-on = ["clean-vendor-extra"] } -tests-vendor = { cmd = "pytest -v vendor_tests", depends-on = ["copy-vendor-compat", "copy-vendor-extra"] } +clean-vendor-compat = { cmd = "rm -rf vendor_tests/array_api_compat", description = "Delete the existing vendored version of array-api-compat" } +clean-vendor-extra = { cmd = "rm -rf vendor_tests/array_api_extra", description = "Delete the existing vendored version of array-api-extra" } +copy-vendor-compat = { cmd = "cp -r $(python -c 'import site; print(site.getsitepackages()[0])')/array_api_compat vendor_tests/", depends-on = ["clean-vendor-compat"], description = "Vendor a clean copy of array-api-compat" } +copy-vendor-extra = { cmd = "cp -r src/array_api_extra vendor_tests/", depends-on = ["clean-vendor-extra"], description = "Vendor a clean copy of array-api-extra" } +tests-vendor = { cmd = "pytest -v vendor_tests", depends-on = ["copy-vendor-compat", "copy-vendor-extra"], description = "Check that array-api-extra and array-api-compat can be vendored together" } -tests-ci = { depends-on = ["tests-cov", "tests-vendor"] } -coverage = { cmd = "coverage html", depends-on = ["tests-cov"] } -open-coverage = { cmd = "open htmlcov/index.html", depends-on = ["coverage"] } +tests-ci = { depends-on = ["tests-cov", "tests-vendor"], description = "Run tests with coverage and vendor tests" } +coverage = { cmd = "coverage html", depends-on = ["tests-cov"], description = "Generate test coverage html report" } +open-coverage = { cmd = "open htmlcov/index.html", depends-on = ["coverage"], description = "Open test coverage report" } [tool.pixi.feature.docs.dependencies] -sphinx = ">=7.0" -furo = ">=2023.08.17" -myst-parser = ">=0.13" -sphinx-copybutton = "*" -sphinx-autodoc-typehints = "*" +sphinx = ">=7.4.7" +furo = ">=2024.8.6" +myst-parser = ">=4.0.1" +sphinx-copybutton = ">=0.5.2" +sphinx-autodoc-typehints = ">=1.25.3" +# Needed to import parsed modules with autodoc +dask-core = ">=2025.7.0" # No distributed, tornado, etc. +pytest = ">=8.4.1" +typing-extensions = ">=4.15.0" +numpy = ">=2.1.3" [tool.pixi.feature.docs.tasks] -docs = { cmd = "sphinx-build . build/", cwd = "docs" } -open-docs = { cmd = "open build/index.html", cwd = "docs", depends-on = ["docs"] } +docs = { cmd = "sphinx-build -E -W . build/", cwd = "docs", description = "Build docs" } +open-docs = { cmd = "open build/index.html", cwd = "docs", depends-on = ["docs"], description = "Open the generated docs" } [tool.pixi.feature.dev.dependencies] -ipython = "*" +ipython = ">=7.33.0" [tool.pixi.feature.dev.tasks] -ipython = { cmd = "ipython" } +ipython = { cmd = "ipython", description = "Launch ipython" } [tool.pixi.feature.py310.dependencies] python = "~=3.10.0" @@ -130,46 +142,95 @@ python = "~=3.10.0" [tool.pixi.feature.py313.dependencies] python = "~=3.13.0" +[tool.pixi.feature.numpy1.dependencies] +# Oldest NumPy version supported by scikit-learn. +# Note that this is older than what SPEC0 recommends. +numpy = "=1.22.0" + # Backends that can run on CPU-only hosts +# Note: JAX and PyTorch will install CPU variants. +[tool.pixi.feature.backends.dependencies] +pytorch = ">=2.7.1" +dask-core = ">=2025.7.0" # No distributed, tornado, etc. +sparse = ">=0.17.0" + [tool.pixi.feature.backends.target.linux-64.dependencies] -pytorch = "*" -dask = "*" -sparse = ">=0.15" -jax = "*" +# On CPU Python 3.10, use 0.6.2 +# On CPU Python >=3.11, use >=0.7.0 +# On GPU, use 0.6.0 (0.6.2 and 0.7.0 both segfault); see jaxlib pin below. +jax = ">=0.6.0" + +[tool.pixi.feature.backends.target.osx-64.dependencies] +jax = ">=0.6.0" [tool.pixi.feature.backends.target.osx-arm64.dependencies] -pytorch = "*" -dask = "*" -sparse = ">=0.15" -jax = "*" +jax = ">=0.6.0" [tool.pixi.feature.backends.target.win-64.dependencies] -# pytorch = "*" # Package unavailable on Windows -dask = "*" -sparse = ">=0.15" -# jax = "*" # Package unavailable on Windows +# jax = "*" # unavailable + +# Backends that require a GPU host and a CUDA driver. +# Note that JAX and PyTorch automatically prefer CUDA variants +# thanks to the `system-requirements` below, *if available*. +# We request them explicitly below to ensure that we don't +# quietly revert to CPU-only in the future, e.g. when CUDA 13 +# is released and CUDA 12 builds are dropped upstream. +[tool.pixi.feature.cuda-backends] +system-requirements = { cuda = "12" } -# Backends that require a GPU host and a CUDA driver [tool.pixi.feature.cuda-backends.target.linux-64.dependencies] -cupy = "*" +cupy = ">=13.6.0" +# JAX 0.6.2 and 0.7.0 segfault on CUDA +jaxlib = { version = ">=0.6.0,!=0.6.2,!=0.7.0", build = "cuda12*" } +pytorch = { version = ">=2.7.1", build = "cuda12*" } + +[tool.pixi.feature.cuda-backends.target.osx-64.dependencies] +# cupy = "*" # unavailable +# jaxlib = { version = "*", build = "cuda12*" } # unavailable +# pytorch = { version = "*", build = "cuda12*" } # unavailable [tool.pixi.feature.cuda-backends.target.osx-arm64.dependencies] -# cupy = "*" # Package unavailable on macOSX +# cupy = "*" # unavailable +# jaxlib = { version = "*", build = "cuda12*" } # unavailable +# pytorch = { version = "*", build = "cuda12*" } # unavailable [tool.pixi.feature.cuda-backends.target.win-64.dependencies] -cupy = "*" +cupy = ">=13.6.0" +# jaxlib = { version = "*", build = "cuda12*" } # unavailable +pytorch = { version = ">=2.7.1", build = "cuda12*" } + +[tool.pixi.feature.nogil.dependencies] +python-freethreading = "~=3.13.0" +pytest-run-parallel = ">=0.6.1" +numpy = ">=2.3.2" +# pytorch = "*" # Not available on Python 3.13t yet +dask-core = ">=2025.7.0" # No distributed, tornado, etc. +# sparse = "*" # numba not available on Python 3.13t yet +# jax = "*" # ml_dtypes not available on Python 3.13t yet [tool.pixi.environments] -default = { solve-group = "default" } -lint = { features = ["lint"], solve-group = "default" } -tests = { features = ["tests"], solve-group = "default" } -docs = { features = ["docs"], solve-group = "default" } -dev = { features = ["lint", "tests", "docs", "dev"], solve-group = "default" } -ci-py310 = ["py310", "tests"] -ci-py313 = ["py313", "tests"] -# CUDA not available on free github actions -ci-backends = ["py310", "tests", "backends"] -tests-backends = ["py310", "tests", "backends", "cuda-backends"] +default = { features = ["py313"], solve-group = "py313" } +lint = { features = ["py313", "lint"], solve-group = "py313" } +docs = { features = ["py313", "docs"], solve-group = "py313" } +tests = { features = ["py313", "tests"], solve-group = "py313" } +tests-py313 = { features = ["py313", "tests"], solve-group = "py313" } # alias of tests + +# Some backends may pin numpy; use separate solve-group +dev = { features = ["py313", "lint", "tests", "docs", "dev", "backends"], solve-group = "backends" } +tests-backends = { features = ["py313", "tests", "backends"], solve-group = "backends" } +# Note: Python 3.10 has already been dropped by some backends (like JAX), +# so this is testing older versions. +tests-backends-py310 = { features = ["py310", "tests", "backends"] } + +# CUDA not available on free github actions and on some developers' PCs +dev-cuda = { features = ["py313", "lint", "tests", "docs", "dev", "backends", "cuda-backends"], solve-group = "cuda" } +tests-cuda = { features = ["py313", "tests", "backends", "cuda-backends"], solve-group = "cuda" } +tests-cuda-py310 = { features = ["py310", "tests", "backends", "cuda-backends"] } + +# Ungrouped environments +tests-numpy1 = ["py310", "tests", "numpy1"] +tests-py310 = ["py310", "tests"] +tests-nogil = ["nogil", "tests"] # pytest @@ -177,25 +238,18 @@ tests-backends = ["py310", "tests", "backends", "cuda-backends"] minversion = "6.0" addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] xfail_strict = true -filterwarnings = [ - "error", - # TODO: when Python 3.10 is dropped, use `enum.member` in `_delegation.py` - "ignore:functools.partial will be a method descriptor:FutureWarning", -] +filterwarnings = ["error"] log_cli_level = "INFO" testpaths = ["tests"] -markers = ["skip_xp_backend(library, *, reason=None): Skip test for a specific backend"] +markers = [ + "skip_xp_backend(library, /, *, reason=None): Skip test for a specific backend", + "xfail_xp_backend(library, /, *, reason=None, strict=None): Xfail test for a specific backend", +] # Coverage [tool.coverage] run.source = ["array_api_extra"] -report.exclude_also = [ - '\.\.\.', - 'if typing.TYPE_CHECKING:', - 'if TYPE_CHECKING:', -] - # mypy @@ -205,18 +259,16 @@ python_version = "3.10" warn_unused_configs = true strict = true enable_error_code = ["ignore-without-code", "truthy-bool"] -disallow_untyped_defs = false -disallow_incomplete_defs = false -# data-apis/array-api#589 -disallow_any_expr = false -# false positives with input validation -disable_error_code = ["redundant-expr", "unreachable"] +disable_error_code = ["no-any-return"] [[tool.mypy.overrides]] -module = "array_api_extra.*" -disallow_untyped_defs = true -disallow_incomplete_defs = true +# slow or unavailable on Windows; do not add to the lint env +module = ["cupy.*", "jax.*", "sparse.*", "torch.*"] +ignore_missing_imports = true +[[tool.mypy.overrides]] +module = ["tests/*"] +disable_error_code = ["no-untyped-def"] # test(...) without -> None # pyright @@ -226,22 +278,30 @@ pythonVersion = "3.10" pythonPlatform = "All" typeCheckingMode = "all" -# data-apis/array-api#589 +# https://github.com/data-apis/array-api-typing reportAny = false reportExplicitAny = false -# data-apis/array-api-strict#6 +# no array-api-strict type stubs; pytest fixtures reportUnknownMemberType = false -# no array-api-compat type stubs +# no array-api-compat type stubs; pytest fixtures reportUnknownVariableType = false +# Redundant with mypy checks +reportMissingImports = false +reportMissingTypeStubs = false # false positives for input validation reportUnreachable = false +# ruff handles this +reportUnusedParameter = false +# cyclic imports inside function bodies +reportImportCycles = false +# PyRight can't trace types in lambdas +reportUnknownLambdaType = false executionEnvironments = [ - { root = "tests", reportPrivateUsage = false }, - { root = "src" }, + { root = "tests", reportPrivateUsage = false, reportUnknownArgumentType = false }, + { root = "src" }, ] - # Ruff [tool.ruff] @@ -249,79 +309,68 @@ target-version = "py310" [tool.ruff.lint] extend-select = [ - "B", # flake8-bugbear - "F", # Pyflakes - "I", # isort - "E", # Pycodestyle - "W", # Pycodestyle - "N", # pep8-naming - "ARG", # flake8-unused-arguments - "C4", # flake8-comprehensions - "EM", # flake8-errmsg - "ICN", # flake8-import-conventions - "ISC", # flake8-implicit-str-concat - "G", # flake8-logging-format - "PGH", # pygrep-hooks - "PIE", # flake8-pie - "PL", # pylint - "PT", # flake8-pytest-style - "PTH", # flake8-use-pathlib - "RET", # flake8-return - "RUF", # Ruff-specific - "SIM", # flake8-simplify - "T20", # flake8-print - "UP", # pyupgrade - "YTT", # flake8-2020 - "EXE", # flake8-executable - "NPY", # NumPy specific rules - "PD", # pandas-vet - "UP", # Pyupgrade + "B", # flake8-bugbear + "F", # Pyflakes + "I", # isort + "E", # Pycodestyle + "W", # Pycodestyle + "N", # pep8-naming + "ARG", # flake8-unused-arguments + "C4", # flake8-comprehensions + "EM", # flake8-errmsg + "ICN", # flake8-import-conventions + "ISC", # flake8-implicit-str-concat + "G", # flake8-logging-format + "PGH", # pygrep-hooks + "PIE", # flake8-pie + "PL", # pylint + "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib + "RET", # flake8-return + "RUF", # Ruff-specific + "SIM", # flake8-simplify + "T20", # flake8-print + "UP", # pyupgrade + "YTT", # flake8-2020 + "EXE", # flake8-executable + "NPY", # NumPy specific rules + "PD", # pandas-vet + "UP", # Pyupgrade ] ignore = [ - "PLR09", # Too many <...> - "PLR2004", # Magic value used in comparison - "ISC001", # Conflicts with formatter - "N801", # Class name should use CapWords convention - "N802", # Function name should be lowercase - "N806", # Variable in function should be lowercase + "PLR09", # Too many <...> + "PLR2004", # Magic value used in comparison + "ISC001", # Conflicts with formatter + "N801", # Class name should use CapWords convention + "N802", # Function name should be lowercase + "N806", # Variable in function should be lowercase + "PLC0415", # `import` should be at the top-level of a file ] -[tool.ruff.lint.per-file-ignores] -"tests/**" = ["T20"] - - # Pylint [tool.pylint] py-version = "3.10" -ignore-paths = [".*/_version.py"] reports.output-format = "colorized" -similarities.ignore-imports = "yes" messages_control.disable = [ - "design", - "fixme", - "line-too-long", - "missing-module-docstring", - "missing-function-docstring", - "too-many-lines", - "wrong-import-position", + "design", # ignore heavily opinionated design checks + "fixme", # Β allow FIXME comments + "line-too-long", # ruff handles this + "unused-argument", # ruff handles this + "missing-function-docstring", # numpydoc handles this + "import-error", # mypy handles this + "import-outside-toplevel", # optional dependencies ] - # numpydoc [tool.numpydoc_validation] checks = [ - "all", # report on all checks, except the below - "EX01", - "SA01", - "ES01", + "all", # report on all checks, except the below + "EX01", # most docstrings do not need an example + "SA01", # data-apis/array-api-extra#87 + "ES01", # most docstrings do not need an extended summary ] exclude = [ # don't report on objects that match any of these regex - '.*test_at.*', - '.*test_funcs.*', - '.*test_testing.*', - '.*test_utils.*', - '.*test_version.*', - '.*test_vendor.*', + '.*test_*', ] diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..fb933e86 --- /dev/null +++ b/renovate.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:recommended", "helpers:pinGitHubActionDigests", ":automergeMinor"], + "dependencyDashboardTitle": "META: Dependency Dashboard", + "commitMessagePrefix": "deps:", + "labels": ["dependencies"], + "rangeStrategy": "bump", + "constraints": { + "pixi": ">=v0.45.0" + }, + "minimumReleaseAge": "14 days", + "packageRules": [{ + "description": "Do not bump deps pinned with '~=' or '='.", + "matchManagers": ["pixi"], + "matchCurrentValue": "/^~?=/", + "enabled": false + }, { + "description": "Do not bump requires-python.", + "matchManagers": ["pep621"], + "matchPackageNames": ["python"], + "enabled": false + }, { + "description": "Schedule automerged GHA updates for the 15th of each month.", + "matchManagers": ["github-actions"], + "groupName": "gha", + "schedule": ["* * 15 * *"], + "automerge": true + }, { + "description": "Block PRs for updates blocked on dropping Python 3.10.", + "matchManagers": ["pixi"], + "matchUpdateTypes": ["major", "minor"], + "matchPackageNames": ["numpy", "jax", "jaxlib", "sphinx", "ipython", "sphinx-autodoc-typehints"], + "enabled": false + }, { + "description": "Group Dask packages.", + "matchPackageNames": ["dask", "dask-core"], + "groupName": "dask" + }, { + "description": "Group JAX packages.", + "matchPackageNames": ["jax", "jaxlib"], + "groupName": "jax" + }, { + "description": "Schedule hypothesis monthly as releases are frequent.", + "matchManagers": ["pixi"], + "matchPackageNames": ["hypothesis"], + "schedule": ["* * 10 * *"] + }] +} diff --git a/src/array_api_extra/__init__.py b/src/array_api_extra/__init__.py index ea660f1e..0b4bd5e2 100644 --- a/src/array_api_extra/__init__.py +++ b/src/array_api_extra/__init__.py @@ -1,30 +1,41 @@ """Extra array functions built on top of the array API standard.""" -from ._delegation import pad +from ._delegation import isclose, nan_to_num, one_hot, pad +from ._lib._at import at from ._lib._funcs import ( - at, + apply_where, atleast_nd, + broadcast_shapes, cov, create_diagonal, + default_dtype, expand_dims, kron, nunique, setdiff1d, sinc, ) +from ._lib._lazy import lazy_apply -__version__ = "0.6.0" +__version__ = "0.9.1.dev0" # pylint: disable=duplicate-code __all__ = [ "__version__", + "apply_where", "at", "atleast_nd", + "broadcast_shapes", "cov", "create_diagonal", + "default_dtype", "expand_dims", + "isclose", "kron", + "lazy_apply", + "nan_to_num", "nunique", + "one_hot", "pad", "setdiff1d", "sinc", diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index 4a1740e6..2c061e36 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -1,40 +1,280 @@ """Delegation to existing implementations for Public API Functions.""" +from collections.abc import Sequence from types import ModuleType from typing import Literal -from ._lib import Backend, _funcs -from ._lib._utils._compat import array_namespace -from ._lib._utils._typing import Array +from ._lib import _funcs +from ._lib._utils._compat import ( + array_namespace, + is_cupy_namespace, + is_dask_namespace, + is_jax_namespace, + is_numpy_namespace, + is_pydata_sparse_namespace, + is_torch_namespace, +) +from ._lib._utils._compat import device as get_device +from ._lib._utils._helpers import asarrays +from ._lib._utils._typing import Array, DType -__all__ = ["pad"] +__all__ = ["isclose", "nan_to_num", "one_hot", "pad"] -def _delegate(xp: ModuleType, *backends: Backend) -> bool: +def isclose( + a: Array | complex, + b: Array | complex, + *, + rtol: float = 1e-05, + atol: float = 1e-08, + equal_nan: bool = False, + xp: ModuleType | None = None, +) -> Array: """ - Check whether `xp` is one of the `backends` to delegate to. + Return a boolean array where two arrays are element-wise equal within a tolerance. + + The tolerance values are positive, typically very small numbers. The relative + difference ``(rtol * abs(b))`` and the absolute difference `atol` are added together + to compare against the absolute difference between `a` and `b`. + + NaNs are treated as equal if they are in the same place and if ``equal_nan=True``. + Infs are treated as equal if they are in the same place and of the same sign in both + arrays. Parameters ---------- - xp : array_namespace - Array namespace to check. - *backends : IsNamespace - Arbitrarily many backends (from the ``IsNamespace`` enum) to check. + a, b : Array | int | float | complex | bool + Input objects to compare. At least one must be an array. + rtol : array_like, optional + The relative tolerance parameter (see Notes). + atol : array_like, optional + The absolute tolerance parameter (see Notes). + equal_nan : bool, optional + Whether to compare NaN's as equal. If True, NaN's in `a` will be considered + equal to NaN's in `b` in the output array. + xp : array_namespace, optional + The standard-compatible namespace for `a` and `b`. Default: infer. Returns ------- - bool - ``True`` if `xp` matches one of the `backends`, ``False`` otherwise. + Array + A boolean array of shape broadcasted from `a` and `b`, containing ``True`` where + `a` is close to `b`, and ``False`` otherwise. + + Warnings + -------- + The default `atol` is not appropriate for comparing numbers with magnitudes much + smaller than one (see notes). + + See Also + -------- + math.isclose : Similar function in stdlib for Python scalars. + + Notes + ----- + For finite values, `isclose` uses the following equation to test whether two + floating point values are equivalent:: + + absolute(a - b) <= (atol + rtol * absolute(b)) + + Unlike the built-in `math.isclose`, + the above equation is not symmetric in `a` and `b`, + so that ``isclose(a, b)`` might be different from ``isclose(b, a)`` in some rare + cases. + + The default value of `atol` is not appropriate when the reference value `b` has + magnitude smaller than one. For example, it is unlikely that ``a = 1e-9`` and + ``b = 2e-9`` should be considered "close", yet ``isclose(1e-9, 2e-9)`` is ``True`` + with default settings. Be sure to select `atol` for the use case at hand, especially + for defining the threshold below which a non-zero value in `a` will be considered + "close" to a very small or zero value in `b`. + + The comparison of `a` and `b` uses standard broadcasting, which means that `a` and + `b` need not have the same shape in order for ``isclose(a, b)`` to evaluate to + ``True``. + + `isclose` is not defined for non-numeric data types. + ``bool`` is considered a numeric data-type for this purpose. """ - return any(backend.is_namespace(xp) for backend in backends) + xp = array_namespace(a, b) if xp is None else xp + + if ( + is_numpy_namespace(xp) + or is_cupy_namespace(xp) + or is_dask_namespace(xp) + or is_jax_namespace(xp) + ): + return xp.isclose(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan) + + if is_torch_namespace(xp): + a, b = asarrays(a, b, xp=xp) # Array API 2024.12 support + return xp.isclose(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan) + + return _funcs.isclose(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan, xp=xp) + + +def nan_to_num( + x: Array | float | complex, + /, + *, + fill_value: int | float = 0.0, + xp: ModuleType | None = None, +) -> Array: + """ + Replace NaN with zero and infinity with large finite numbers (default behaviour). + + If `x` is inexact, NaN is replaced by zero or by the user defined value in the + `fill_value` keyword, infinity is replaced by the largest finite floating + point value representable by ``x.dtype``, and -infinity is replaced by the + most negative finite floating point value representable by ``x.dtype``. + + For complex dtypes, the above is applied to each of the real and + imaginary components of `x` separately. + + Parameters + ---------- + x : array | float | complex + Input data. + fill_value : int | float, optional + Value to be used to fill NaN values. If no value is passed + then NaN values will be replaced with 0.0. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + array + `x`, with the non-finite values replaced. + + See Also + -------- + array_api.isnan : Shows which elements are Not a Number (NaN). + + Examples + -------- + >>> import array_api_extra as xpx + >>> import array_api_strict as xp + >>> xpx.nan_to_num(xp.inf) + 1.7976931348623157e+308 + >>> xpx.nan_to_num(-xp.inf) + -1.7976931348623157e+308 + >>> xpx.nan_to_num(xp.nan) + 0.0 + >>> x = xp.asarray([xp.inf, -xp.inf, xp.nan, -128, 128]) + >>> xpx.nan_to_num(x) + array([ 1.79769313e+308, -1.79769313e+308, 0.00000000e+000, # may vary + -1.28000000e+002, 1.28000000e+002]) + >>> y = xp.asarray([complex(xp.inf, xp.nan), xp.nan, complex(xp.nan, xp.inf)]) + array([ 1.79769313e+308, -1.79769313e+308, 0.00000000e+000, # may vary + -1.28000000e+002, 1.28000000e+002]) + >>> xpx.nan_to_num(y) + array([ 1.79769313e+308 +0.00000000e+000j, # may vary + 0.00000000e+000 +0.00000000e+000j, + 0.00000000e+000 +1.79769313e+308j]) + """ + if isinstance(fill_value, complex): + msg = "Complex fill values are not supported." + raise TypeError(msg) + + xp = array_namespace(x) if xp is None else xp + + # for scalars we want to output an array + y = xp.asarray(x) + + if ( + is_cupy_namespace(xp) + or is_jax_namespace(xp) + or is_numpy_namespace(xp) + or is_torch_namespace(xp) + ): + return xp.nan_to_num(y, nan=fill_value) + + return _funcs.nan_to_num(y, fill_value=fill_value, xp=xp) + + +def one_hot( + x: Array, + /, + num_classes: int, + *, + dtype: DType | None = None, + axis: int = -1, + xp: ModuleType | None = None, +) -> Array: + """ + One-hot encode the given indices. + + Each index in the input `x` is encoded as a vector of zeros of length `num_classes` + with the element at the given index set to one. + + Parameters + ---------- + x : array + An array with integral dtype whose values are between `0` and `num_classes - 1`. + num_classes : int + Number of classes in the one-hot dimension. + dtype : DType, optional + The dtype of the return value. Defaults to the default float dtype (usually + float64). + axis : int, optional + Position in the expanded axes where the new axis is placed. Default: -1. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + array + An array having the same shape as `x` except for a new axis at the position + given by `axis` having size `num_classes`. If `axis` is unspecified, it + defaults to -1, which appends a new axis. + + If ``x < 0`` or ``x >= num_classes``, then the result is undefined, may raise + an exception, or may even cause a bad state. `x` is not checked. + + Examples + -------- + >>> import array_api_extra as xpx + >>> import array_api_strict as xp + >>> xpx.one_hot(xp.asarray([1, 2, 0]), 3) + Array([[0., 1., 0.], + [0., 0., 1.], + [1., 0., 0.]], dtype=array_api_strict.float64) + """ + # Validate inputs. + if xp is None: + xp = array_namespace(x) + if not xp.isdtype(x.dtype, "integral"): + msg = "x must have an integral dtype." + raise TypeError(msg) + if dtype is None: + dtype = _funcs.default_dtype(xp, device=get_device(x)) + # Delegate where possible. + if is_jax_namespace(xp): + from jax.nn import one_hot as jax_one_hot + + return jax_one_hot(x, num_classes, dtype=dtype, axis=axis) + if is_torch_namespace(xp): + from torch.nn.functional import one_hot as torch_one_hot + + x = xp.astype(x, xp.int64) # PyTorch only supports int64 here. + try: + out = torch_one_hot(x, num_classes) + except RuntimeError as e: + raise IndexError from e + else: + out = _funcs.one_hot(x, num_classes, xp=xp) + out = xp.astype(out, dtype, copy=False) + if axis != -1: + out = xp.moveaxis(out, -1, axis) + return out def pad( x: Array, - pad_width: int | tuple[int, int] | list[tuple[int, int]], + pad_width: int | tuple[int, int] | Sequence[tuple[int, int]], mode: Literal["constant"] = "constant", *, - constant_values: bool | int | float | complex = 0, + constant_values: complex = 0, xp: ModuleType | None = None, ) -> Array: """ @@ -44,9 +284,9 @@ def pad( ---------- x : array Input array. - pad_width : int or tuple of ints or list of pairs of ints + pad_width : int or tuple of ints or sequence of pairs of ints Pad the input array with this many elements from each side. - If a list of tuples, ``[(before_0, after_0), ... (before_N, after_N)]``, + If a sequence of tuples, ``[(before_0, after_0), ... (before_N, after_N)]``, each pair applies to the corresponding axis of ``x``. A single tuple, ``(before, after)``, is equivalent to a list of ``x.ndim`` copies of this tuple. @@ -70,14 +310,19 @@ def pad( msg = "Only `'constant'` mode is currently supported" raise NotImplementedError(msg) + if ( + is_numpy_namespace(xp) + or is_cupy_namespace(xp) + or is_jax_namespace(xp) + or is_pydata_sparse_namespace(xp) + ): + return xp.pad(x, pad_width, mode, constant_values=constant_values) + # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 - if _delegate(xp, Backend.TORCH): + if is_torch_namespace(xp): pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] - if _delegate(xp, Backend.NUMPY, Backend.JAX_NUMPY, Backend.CUPY): - return xp.pad(x, pad_width, mode, constant_values=constant_values) - return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp) diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py index b83d7e8c..d7b32033 100644 --- a/src/array_api_extra/_lib/__init__.py +++ b/src/array_api_extra/_lib/__init__.py @@ -1,5 +1 @@ """Internals of array-api-extra.""" - -from ._backends import Backend - -__all__ = ["Backend"] diff --git a/src/array_api_extra/_lib/_at.py b/src/array_api_extra/_lib/_at.py new file mode 100644 index 00000000..fb2d6ab7 --- /dev/null +++ b/src/array_api_extra/_lib/_at.py @@ -0,0 +1,463 @@ +"""Update operations for read-only arrays.""" + +from __future__ import annotations + +import operator +from collections.abc import Callable +from enum import Enum +from types import ModuleType +from typing import TYPE_CHECKING, ClassVar, cast + +from ._utils import _compat +from ._utils._compat import ( + array_namespace, + is_dask_array, + is_jax_array, + is_torch_array, + is_writeable_array, +) +from ._utils._helpers import meta_namespace +from ._utils._typing import Array, SetIndex + +if TYPE_CHECKING: # pragma: no cover + # TODO import from typing (requires Python >=3.11) + from typing_extensions import Self + + +class _AtOp(Enum): + """Operations for use in `xpx.at`.""" + + SET = "set" + ADD = "add" + SUBTRACT = "subtract" + MULTIPLY = "multiply" + DIVIDE = "divide" + POWER = "power" + MIN = "min" + MAX = "max" + + # @override from Python 3.12 + def __str__(self) -> str: # pyright: ignore[reportImplicitOverride] + """ + Return string representation (useful for pytest logs). + + Returns + ------- + str + The operation's name. + """ + return self.value + + +class Undef(Enum): + """Sentinel for undefined values.""" + + UNDEF = 0 + + +_undef = Undef.UNDEF + + +class at: # pylint: disable=invalid-name # numpydoc ignore=PR02 + """ + Update operations for read-only arrays. + + This implements ``jax.numpy.ndarray.at`` for all writeable + backends (those that support ``__setitem__``) and routes + to the ``.at[]`` method for JAX arrays. + + Parameters + ---------- + x : array + Input array. + idx : index, optional + Only `array API standard compliant indices + `_ + are supported. + + You may use two alternate syntaxes:: + + >>> import array_api_extra as xpx + >>> xpx.at(x, idx).set(value) # or add(value), etc. + >>> xpx.at(x)[idx].set(value) + + copy : bool, optional + None (default) + The array parameter *may* be modified in place if it is + possible and beneficial for performance. + You should not reuse it after calling this function. + True + Ensure that the inputs are not modified. + False + Ensure that the update operation writes back to the input. + Raise ``ValueError`` if a copy cannot be avoided. + + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + Updated input array. + + Warnings + -------- + (a) When you omit the ``copy`` parameter, you should never reuse the parameter + array later on; ideally, you should reassign it immediately:: + + >>> import array_api_extra as xpx + >>> x = xpx.at(x, 0).set(2) + + The above best practice pattern ensures that the behaviour won't change depending + on whether ``x`` is writeable or not, as the original ``x`` object is dereferenced + as soon as ``xpx.at`` returns; this way there is no risk to accidentally update it + twice. + + On the reverse, the anti-pattern below must be avoided, as it will result in + different behaviour on read-only versus writeable arrays:: + + >>> x = xp.asarray([0, 0, 0]) + >>> y = xpx.at(x, 0).set(2) + >>> z = xpx.at(x, 1).set(3) + + In the above example, both calls to ``xpx.at`` update ``x`` in place *if possible*. + This causes the behaviour to diverge depending on whether ``x`` is writeable or not: + + - If ``x`` is writeable, then after the snippet above you'll have + ``x == y == z == [2, 3, 0]`` + - If ``x`` is read-only, then you'll end up with + ``x == [0, 0, 0]``, ``y == [2, 0, 0]`` and ``z == [0, 3, 0]``. + + The correct pattern to use if you want diverging outputs from the same input is + to enforce copies:: + + >>> x = xp.asarray([0, 0, 0]) + >>> y = xpx.at(x, 0).set(2, copy=True) # Never updates x + >>> z = xpx.at(x, 1).set(3) # May or may not update x in place + >>> del x # avoid accidental reuse of x as we don't know its state anymore + + (b) The array API standard does not support integer array indices. + The behaviour of update methods when the index is an array of integers is + undefined and will vary between backends; this is particularly true when the + index contains multiple occurrences of the same index, e.g.:: + + >>> import numpy as np + >>> import jax.numpy as jnp + >>> import array_api_extra as xpx + >>> xpx.at(np.asarray([123]), np.asarray([0, 0])).add(1) + array([124]) + >>> xpx.at(jnp.asarray([123]), jnp.asarray([0, 0])).add(1) + Array([125], dtype=int32) + + See Also + -------- + jax.numpy.ndarray.at : Equivalent array method in JAX. + + Notes + ----- + `sparse `_, as well as read-only arrays from libraries + not explicitly covered by ``array-api-compat``, are not supported by update + methods. + + Boolean masks are supported on Dask and jitted JAX arrays exclusively + when `idx` has the same shape as `x` and `y` is 0-dimensional. + Note that this support is not available in JAX's native + ``x.at[mask].set(y)``. + + This pattern:: + + >>> mask = m(x) + >>> x[mask] = f(x[mask]) + + Can't be replaced by `at`, as it won't work on Dask and JAX inside jax.jit:: + + >>> mask = m(x) + >>> x = xpx.at(x, mask).set(f(x[mask]) # Crash on Dask and jax.jit + + You should instead use:: + + >>> x = xp.where(m(x), f(x), x) + + Examples + -------- + Given either of these equivalent expressions:: + + >>> import array_api_extra as xpx + >>> x = xpx.at(x)[1].add(2) + >>> x = xpx.at(x, 1).add(2) + + If x is a JAX array, they are the same as:: + + >>> x = x.at[1].add(2) + + If x is a read-only NumPy array, they are the same as:: + + >>> x = x.copy() + >>> x[1] += 2 + + For other known backends, they are the same as:: + + >>> x[1] += 2 + """ + + _x: Array + _idx: SetIndex | Undef + __slots__: ClassVar[tuple[str, ...]] = ("_idx", "_x") + + def __init__( + self, x: Array, idx: SetIndex | Undef = _undef, / + ) -> None: # numpydoc ignore=GL08 + self._x = x + self._idx = idx + + def __getitem__(self, idx: SetIndex, /) -> Self: # numpydoc ignore=PR01,RT01 + """ + Allow for the alternate syntax ``at(x)[start:stop:step]``. + + It looks prettier than ``at(x, slice(start, stop, step))`` + and feels more intuitive coming from the JAX documentation. + """ + if self._idx is not _undef: + msg = "Index has already been set" + raise ValueError(msg) + return type(self)(self._x, idx) + + def _op( + self, + at_op: _AtOp, + in_place_op: Callable[[Array, Array | complex], Array] | None, + out_of_place_op: Callable[[Array, Array], Array] | None, + y: Array | complex, + /, + copy: bool | None, + xp: ModuleType | None, + ) -> Array: + """ + Implement all update operations. + + Parameters + ---------- + at_op : _AtOp + Method of JAX's Array.at[]. + in_place_op : Callable[[Array, Array | complex], Array] | None + In-place operation to apply on mutable backends:: + + x[idx] = in_place_op(x[idx], y) + + If None:: + + x[idx] = y + + out_of_place_op : Callable[[Array, Array], Array] | None + Out-of-place operation to apply when idx is a boolean mask and the backend + doesn't support in-place updates:: + + x = xp.where(idx, out_of_place_op(x, y), x) + + If None:: + + x = xp.where(idx, y, x) + + y : array or complex + Right-hand side of the operation. + copy : bool or None + Whether to copy the input array. See the class docstring for details. + xp : array_namespace, optional + The array namespace for the input array. Default: infer. + + Returns + ------- + Array + Updated `x`. + """ + from ._funcs import apply_where # pylint: disable=cyclic-import + + x, idx = self._x, self._idx + xp = array_namespace(x, y) if xp is None else xp + + if isinstance(idx, Undef): + msg = ( + "Index has not been set.\n" + "Usage: either\n" + " at(x, idx).set(value)\n" + "or\n" + " at(x)[idx].set(value)\n" + "(same for all other methods)." + ) + raise ValueError(msg) + + if copy not in (True, False, None): + msg = f"copy must be True, False, or None; got {copy!r}" + raise ValueError(msg) + + writeable = None if copy else is_writeable_array(x) + + # JAX inside jax.jit doesn't support in-place updates with boolean + # masks; Dask exclusively supports __setitem__ but not iops. + # We can handle the common special case of 0-dimensional y + # with where(idx, y, x) instead. + if ( + (is_dask_array(idx) or is_jax_array(idx)) + and idx.dtype == xp.bool + and idx.shape == x.shape + ): + y_xp = xp.asarray(y, dtype=x.dtype, device=_compat.device(x)) + if y_xp.ndim == 0: + if out_of_place_op: # add(), subtract(), ... + # suppress inf warnings on Dask + out = apply_where( + idx, (x, y_xp), out_of_place_op, fill_value=x, xp=xp + ) + # Undo int->float promotion on JAX after _AtOp.DIVIDE + out = xp.astype(out, x.dtype, copy=False) + else: # set() + out = xp.where(idx, y_xp, x) + + if copy is False: + x[()] = out + return x + return out + + # else: this will work on eager JAX and crash on jax.jit and Dask + + if copy or (copy is None and not writeable): + if is_jax_array(x): + # Use JAX's at[] + func = cast( + Callable[[Array | complex], Array], + getattr(x.at[idx], at_op.value), # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue,reportUnknownArgumentType] + ) + out = func(y) + # Undo int->float promotion on JAX after _AtOp.DIVIDE + return xp.astype(out, x.dtype, copy=False) + + # Emulate at[] behaviour for non-JAX arrays + # with a copy followed by an update + + x = xp.asarray(x, copy=True) + # A copy of a read-only numpy array is writeable + # Note: this assumes that a copy of a writeable array is writeable + assert not writeable + writeable = None + + if writeable is None: + writeable = is_writeable_array(x) + if not writeable: + # sparse crashes here + msg = f"Can't update read-only array {x}" + raise ValueError(msg) + + # Work around bug in PyTorch where __setitem__ doesn't + # always support mismatched dtypes + # https://github.com/pytorch/pytorch/issues/150017 + if is_torch_array(y): + y = xp.astype(y, x.dtype, copy=False) + + # Backends without boolean indexing (other than JAX) crash here + if in_place_op: # add(), subtract(), ... + x[idx] = in_place_op(x[idx], y) + else: # set() + x[idx] = y + return x + + def set( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] = y`` and return the update array.""" + return self._op(_AtOp.SET, None, None, y, copy=copy, xp=xp) + + def add( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] += y`` and return the updated array.""" + + # Note for this and all other methods based on _iop: + # operator.iadd and operator.add subtly differ in behaviour, as + # only iadd will trigger exceptions when y has an incompatible dtype. + return self._op(_AtOp.ADD, operator.iadd, operator.add, y, copy=copy, xp=xp) + + def subtract( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] -= y`` and return the updated array.""" + return self._op( + _AtOp.SUBTRACT, operator.isub, operator.sub, y, copy=copy, xp=xp + ) + + def multiply( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] *= y`` and return the updated array.""" + return self._op( + _AtOp.MULTIPLY, operator.imul, operator.mul, y, copy=copy, xp=xp + ) + + def divide( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] /= y`` and return the updated array.""" + return self._op( + _AtOp.DIVIDE, operator.itruediv, operator.truediv, y, copy=copy, xp=xp + ) + + def power( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] **= y`` and return the updated array.""" + return self._op(_AtOp.POWER, operator.ipow, operator.pow, y, copy=copy, xp=xp) + + def min( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] = minimum(x[idx], y)`` and return the updated array.""" + # On Dask, this function runs on the chunks, so we need to determine the + # namespace that Dask is wrapping. + # Note that da.minimum _incidentally_ works on NumPy, CuPy, and sparse + # thanks to all these meta-namespaces implementing the __array_ufunc__ + # interface, but there's no guarantee that it will work for other + # wrapped libraries in the future. + xp = array_namespace(self._x) if xp is None else xp + mxp = meta_namespace(self._x, xp=xp) + y = xp.asarray(y) + return self._op(_AtOp.MIN, mxp.minimum, mxp.minimum, y, copy=copy, xp=xp) + + def max( + self, + y: Array | complex, + /, + copy: bool | None = None, + xp: ModuleType | None = None, + ) -> Array: # numpydoc ignore=PR01,RT01 + """Apply ``x[idx] = maximum(x[idx], y)`` and return the updated array.""" + # See note on min() + xp = array_namespace(self._x) if xp is None else xp + mxp = meta_namespace(self._x, xp=xp) + y = xp.asarray(y) + return self._op(_AtOp.MAX, mxp.maximum, mxp.maximum, y, copy=copy, xp=xp) diff --git a/src/array_api_extra/_lib/_backends.py b/src/array_api_extra/_lib/_backends.py index ee2e051e..936f5dd0 100644 --- a/src/array_api_extra/_lib/_backends.py +++ b/src/array_api_extra/_lib/_backends.py @@ -1,51 +1,72 @@ -"""Backends with which array-api-extra interacts in delegation and testing.""" +"""Backends against which array-api-extra runs its tests.""" + +from __future__ import annotations -from collections.abc import Callable from enum import Enum -from types import ModuleType -from typing import cast +from typing import Any + +import numpy as np +import pytest -from ._utils import _compat +__all__ = ["NUMPY_VERSION", "Backend"] -__all__ = ["Backend"] +NUMPY_VERSION = tuple(int(v) for v in np.__version__.split(".")[:3]) # pyright: ignore[reportUnknownArgumentType] -class Backend(Enum): # numpydoc ignore=PR01,PR02 # type: ignore[no-subclass-any] +class Backend(Enum): # numpydoc ignore=PR02 """ All array library backends explicitly tested by array-api-extra. Parameters ---------- value : str - Name of the backend's module. - is_namespace : Callable[[ModuleType], bool] - Function to check whether an input module is the array namespace - corresponding to the backend. + Tag of the backend's module, in the format ``[:]``. """ - ARRAY_API_STRICT = "array_api_strict", _compat.is_array_api_strict_namespace - NUMPY = "numpy", _compat.is_numpy_namespace - NUMPY_READONLY = "numpy_readonly", _compat.is_numpy_namespace - CUPY = "cupy", _compat.is_cupy_namespace - TORCH = "torch", _compat.is_torch_namespace - DASK_ARRAY = "dask.array", _compat.is_dask_namespace - SPARSE = "sparse", _compat.is_pydata_sparse_namespace - JAX_NUMPY = "jax.numpy", _compat.is_jax_namespace - - def __new__( - cls, value: str, _is_namespace: Callable[[ModuleType], bool] - ): # numpydoc ignore=GL08 - obj = object.__new__(cls) - obj._value_ = value - return obj - - def __init__( - self, - value: str, # noqa: ARG002 # pylint: disable=unused-argument - is_namespace: Callable[[ModuleType], bool], - ): # numpydoc ignore=GL08 - self.is_namespace = is_namespace - - def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 - """Pretty-print parameterized test names.""" - return cast(str, self.value) + # Use : to prevent Enum from deduplicating items with the same value + ARRAY_API_STRICT = "array_api_strict" + ARRAY_API_STRICTEST = "array_api_strict:strictest" + NUMPY = "numpy" + NUMPY_READONLY = "numpy:readonly" + CUPY = "cupy" + TORCH = "torch" + TORCH_GPU = "torch:gpu" + DASK = "dask.array" + SPARSE = "sparse" + JAX = "jax.numpy" + JAX_GPU = "jax.numpy:gpu" + + @property + def modname(self) -> str: # numpydoc ignore=RT01 + """Module name to be imported.""" + return self.value.split(":")[0] + + def like(self, *others: Backend) -> bool: # numpydoc ignore=PR01,RT01 + """Check if this backend uses the same module as others.""" + return any(self.modname == other.modname for other in others) + + def pytest_param(self) -> Any: + """ + Backend as a pytest parameter + + Returns + ------- + pytest.mark.ParameterSet + """ + id_ = ( + self.name.lower().replace("_gpu", ":gpu").replace("_readonly", ":readonly") + ) + + marks = [] + if self.like(Backend.ARRAY_API_STRICT): + marks.append( + pytest.mark.skipif( + NUMPY_VERSION < (1, 26), + reason="array_api_strict is untested on NumPy <1.26", + ) + ) + if self.like(Backend.DASK, Backend.JAX): + # Monkey-patched by lazy_xp_function + marks.append(pytest.mark.thread_unsafe) + + return pytest.param(self, id=id_, marks=marks) # pyright: ignore[reportUnknownArgumentType] diff --git a/src/array_api_extra/_lib/_funcs.py b/src/array_api_extra/_lib/_funcs.py index 320e5455..cbcbe0ff 100644 --- a/src/array_api_extra/_lib/_funcs.py +++ b/src/array_api_extra/_lib/_funcs.py @@ -1,23 +1,27 @@ """Array-agnostic implementations for the public API.""" -# https://github.com/scikit-learn/scikit-learn/pull/27910#issuecomment-2568023972 -from __future__ import annotations - import math -import operator import warnings -from collections.abc import Callable -from enum import Enum -from types import ModuleType -from typing import ClassVar, cast +from collections.abc import Callable, Sequence +from types import ModuleType, NoneType +from typing import Literal, cast, overload +from ._at import at from ._utils import _compat, _helpers -from ._utils._compat import array_namespace, is_jax_array, is_writeable_array -from ._utils._typing import Array, Index +from ._utils._compat import array_namespace, is_dask_namespace, is_jax_array +from ._utils._helpers import ( + asarrays, + capabilities, + eager_shape, + meta_namespace, + ndindex, +) +from ._utils._typing import Array, Device, DType __all__ = [ - "at", + "apply_where", "atleast_nd", + "broadcast_shapes", "cov", "create_diagonal", "expand_dims", @@ -29,6 +33,148 @@ ] +@overload +def apply_where( # numpydoc ignore=GL08 + cond: Array, + args: Array | tuple[Array, ...], + f1: Callable[..., Array], + f2: Callable[..., Array], + /, + *, + xp: ModuleType | None = None, +) -> Array: ... + + +@overload +def apply_where( # numpydoc ignore=GL08 + cond: Array, + args: Array | tuple[Array, ...], + f1: Callable[..., Array], + /, + *, + fill_value: Array | complex, + xp: ModuleType | None = None, +) -> Array: ... + + +def apply_where( # numpydoc ignore=PR01,PR02 + cond: Array, + args: Array | tuple[Array, ...], + f1: Callable[..., Array], + f2: Callable[..., Array] | None = None, + /, + *, + fill_value: Array | complex | None = None, + xp: ModuleType | None = None, +) -> Array: + """ + Run one of two elementwise functions depending on a condition. + + Equivalent to ``f1(*args) if cond else fill_value`` performed elementwise + when `fill_value` is defined, otherwise to ``f1(*args) if cond else f2(*args)``. + + Parameters + ---------- + cond : array + The condition, expressed as a boolean array. + args : Array or tuple of Arrays + Argument(s) to `f1` (and `f2`). Must be broadcastable with `cond`. + f1 : callable + Elementwise function of `args`, returning a single array. + Where `cond` is True, output will be ``f1(arg0[cond], arg1[cond], ...)``. + f2 : callable, optional + Elementwise function of `args`, returning a single array. + Where `cond` is False, output will be ``f2(arg0[cond], arg1[cond], ...)``. + Mutually exclusive with `fill_value`. + fill_value : Array or scalar, optional + If provided, value with which to fill output array where `cond` is False. + It does not need to be scalar; it needs however to be broadcastable with + `cond` and `args`. + Mutually exclusive with `f2`. You must provide one or the other. + xp : array_namespace, optional + The standard-compatible namespace for `cond` and `args`. Default: infer. + + Returns + ------- + Array + An array with elements from the output of `f1` where `cond` is True and either + the output of `f2` or `fill_value` where `cond` is False. The returned array has + data type determined by type promotion rules between the output of `f1` and + either `fill_value` or the output of `f2`. + + Notes + ----- + ``xp.where(cond, f1(*args), f2(*args))`` requires explicitly evaluating `f1` even + when `cond` is False, and `f2` when cond is True. This function evaluates each + function only for their matching condition, if the backend allows for it. + + On Dask, `f1` and `f2` are applied to the individual chunks and should use functions + from the namespace of the chunks. + + Examples + -------- + >>> import array_api_strict as xp + >>> import array_api_extra as xpx + >>> a = xp.asarray([5, 4, 3]) + >>> b = xp.asarray([0, 2, 2]) + >>> def f(a, b): + ... return a // b + >>> xpx.apply_where(b != 0, (a, b), f, fill_value=xp.nan) + array([ nan, 2., 1.]) + """ + # Parse and normalize arguments + if (f2 is None) == (fill_value is None): + msg = "Exactly one of `fill_value` or `f2` must be given." + raise TypeError(msg) + args_ = list(args) if isinstance(args, tuple) else [args] + del args + + xp = array_namespace(cond, fill_value, *args_) if xp is None else xp + + if isinstance(fill_value, int | float | complex | NoneType): + cond, *args_ = xp.broadcast_arrays(cond, *args_) + else: + cond, fill_value, *args_ = xp.broadcast_arrays(cond, fill_value, *args_) + + if is_dask_namespace(xp): + meta_xp = meta_namespace(cond, fill_value, *args_, xp=xp) + # map_blocks doesn't descend into tuples of Arrays + return xp.map_blocks(_apply_where, cond, f1, f2, fill_value, *args_, xp=meta_xp) + return _apply_where(cond, f1, f2, fill_value, *args_, xp=xp) + + +def _apply_where( # numpydoc ignore=PR01,RT01 + cond: Array, + f1: Callable[..., Array], + f2: Callable[..., Array] | None, + fill_value: Array | int | float | complex | bool | None, + *args: Array, + xp: ModuleType, +) -> Array: + """Helper of `apply_where`. On Dask, this runs on a single chunk.""" + + if not capabilities(xp, device=_compat.device(cond))["boolean indexing"]: + # jax.jit does not support assignment by boolean mask + return xp.where(cond, f1(*args), f2(*args) if f2 is not None else fill_value) + + temp1 = f1(*(arr[cond] for arr in args)) + + if f2 is None: + dtype = xp.result_type(temp1, fill_value) + if isinstance(fill_value, int | float | complex): + out = xp.full_like(cond, dtype=dtype, fill_value=fill_value) + else: + out = xp.astype(fill_value, dtype, copy=True) + else: + ncond = ~cond + temp2 = f2(*(arr[ncond] for arr in args)) + dtype = xp.result_type(temp1, temp2) + out = xp.empty_like(cond, dtype=dtype) + out = at(out, ncond).set(temp2) + + return at(out, cond).set(temp1) + + def atleast_nd(x: Array, /, *, ndim: int, xp: ModuleType | None = None) -> Array: """ Recursively expand the dimension of an array to at least `ndim`. @@ -72,6 +218,69 @@ def atleast_nd(x: Array, /, *, ndim: int, xp: ModuleType | None = None) -> Array return x +# `float` in signature to accept `math.nan` for Dask. +# `int`s are still accepted as `float` is a superclass of `int` in typing +def broadcast_shapes(*shapes: tuple[float | None, ...]) -> tuple[int | None, ...]: + """ + Compute the shape of the broadcasted arrays. + + Duplicates :func:`numpy.broadcast_shapes`, with additional support for + None and NaN sizes. + + This is equivalent to ``xp.broadcast_arrays(arr1, arr2, ...)[0].shape`` + without needing to worry about the backend potentially deep copying + the arrays. + + Parameters + ---------- + *shapes : tuple[int | None, ...] + Shapes of the arrays to broadcast. + + Returns + ------- + tuple[int | None, ...] + The shape of the broadcasted arrays. + + See Also + -------- + numpy.broadcast_shapes : Equivalent NumPy function. + array_api.broadcast_arrays : Function to broadcast actual arrays. + + Notes + ----- + This function accepts the Array API's ``None`` for unknown sizes, + as well as Dask's non-standard ``math.nan``. + Regardless of input, the output always contains ``None`` for unknown sizes. + + Examples + -------- + >>> import array_api_extra as xpx + >>> xpx.broadcast_shapes((2, 3), (2, 1)) + (2, 3) + >>> xpx.broadcast_shapes((4, 2, 3), (2, 1), (1, 3)) + (4, 2, 3) + """ + if not shapes: + return () # Match NumPy output + + ndim = max(len(shape) for shape in shapes) + out: list[int | None] = [] + for axis in range(-ndim, 0): + sizes = {shape[axis] for shape in shapes if axis >= -len(shape)} + # Dask uses NaN for unknown shape, which predates the Array API spec for None + none_size = None in sizes or math.nan in sizes # noqa: PLW0177 + sizes -= {1, None, math.nan} + if len(sizes) > 1: + msg = ( + "shape mismatch: objects cannot be broadcast to a single shape: " + f"{shapes}." + ) + raise ValueError(msg) + out.append(None if none_size else cast(int, sizes.pop()) if sizes else 1) + + return tuple(out) + + def cov(m: Array, /, *, xp: ModuleType | None = None) -> Array: """ Estimate a covariance matrix. @@ -148,11 +357,13 @@ def cov(m: Array, /, *, xp: ModuleType | None = None) -> Array: m = xp.astype(m, dtype) avg = _helpers.mean(m, axis=1, xp=xp) - fact = m.shape[1] - 1 + + m_shape = eager_shape(m) + fact = m_shape[1] - 1 if fact <= 0: warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning, stacklevel=2) - fact = 0.0 + fact = 0 m -= avg[:, None] m_transpose = m.T @@ -164,6 +375,23 @@ def cov(m: Array, /, *, xp: ModuleType | None = None) -> Array: return xp.squeeze(c, axis=axes) +def one_hot( + x: Array, + /, + num_classes: int, + *, + xp: ModuleType, +) -> Array: # numpydoc ignore=PR01,RT01 + """See docstring in `array_api_extra._delegation.py`.""" + # TODO: Benchmark whether this is faster on the NumPy backend: + # if is_numpy_array(x): + # out = xp.zeros((x.size, num_classes), dtype=dtype) + # out[xp.arange(x.size), xp.reshape(x, (-1,))] = 1 + # return xp.reshape(out, (*x.shape, num_classes)) + range_num_classes = xp.arange(num_classes, dtype=x.dtype, device=_compat.device(x)) + return x[..., xp.newaxis] == range_num_classes + + def create_diagonal( x: Array, /, *, offset: int = 0, xp: ModuleType | None = None ) -> Array: @@ -173,7 +401,7 @@ def create_diagonal( Parameters ---------- x : array - A 1-D array. + An array having shape ``(*batch_dims, k)``. offset : int, optional Offset from the leading diagonal (default is ``0``). Use positive ints for diagonals above the leading diagonal, @@ -184,7 +412,8 @@ def create_diagonal( Returns ------- array - A 2-D array with `x` on the diagonal (offset by `offset`). + An array having shape ``(*batch_dims, k+abs(offset), k+abs(offset))`` with `x` + on the diagonal (offset by `offset`). Examples -------- @@ -207,18 +436,61 @@ def create_diagonal( if xp is None: xp = array_namespace(x) - if x.ndim != 1: - err_msg = "`x` must be 1-dimensional." + if x.ndim == 0: + err_msg = "`x` must be at least 1-dimensional." raise ValueError(err_msg) - n = x.shape[0] + abs(offset) - diag = xp.zeros(n**2, dtype=x.dtype, device=_compat.device(x)) - start = offset if offset >= 0 else abs(offset) * n - stop = min(n * (n - offset), diag.shape[0]) - step = n + 1 - diag = at(diag)[start:stop:step].set(x) + x_shape = eager_shape(x) + batch_dims = x_shape[:-1] + n = x_shape[-1] + abs(offset) + diag = xp.zeros((*batch_dims, n**2), dtype=x.dtype, device=_compat.device(x)) + + target_slice = slice( + offset if offset >= 0 else abs(offset) * n, + min(n * (n - offset), diag.shape[-1]), + n + 1, + ) + for index in ndindex(*batch_dims): + diag = at(diag)[(*index, target_slice)].set(x[(*index, slice(None))]) + return xp.reshape(diag, (*batch_dims, n, n)) + + +def default_dtype( + xp: ModuleType, + kind: Literal[ + "real floating", "complex floating", "integral", "indexing" + ] = "real floating", + *, + device: Device | None = None, +) -> DType: + """ + Return the default dtype for the given namespace and device. + + This is a convenience shorthand for + ``xp.__array_namespace_info__().default_dtypes(device=device)[kind]``. + + Parameters + ---------- + xp : array_namespace + The standard-compatible namespace for which to get the default dtype. + kind : {'real floating', 'complex floating', 'integral', 'indexing'}, optional + The kind of dtype to return. Default is 'real floating'. + device : Device, optional + The device for which to get the default dtype. Default: current device. - return xp.reshape(diag, (n, n)) + Returns + ------- + dtype + The default dtype for the given namespace, kind, and device. + """ + dtypes = xp.__array_namespace_info__().default_dtypes(device=device) + try: + return dtypes[kind] + except KeyError as e: + domain = ("real floating", "complex floating", "integral", "indexing") + assert set(dtypes) == set(domain), f"Non-compliant namespace: {dtypes}" + msg = f"Unknown kind '{kind}'. Expected one of {domain}." + raise ValueError(msg) from e def expand_dims( @@ -307,7 +579,60 @@ def expand_dims( return a -def kron(a: Array, b: Array, /, *, xp: ModuleType | None = None) -> Array: +def isclose( + a: Array | complex, + b: Array | complex, + *, + rtol: float = 1e-05, + atol: float = 1e-08, + equal_nan: bool = False, + xp: ModuleType, +) -> Array: # numpydoc ignore=PR01,RT01 + """See docstring in array_api_extra._delegation.""" + a, b = asarrays(a, b, xp=xp) + + a_inexact = xp.isdtype(a.dtype, ("real floating", "complex floating")) + b_inexact = xp.isdtype(b.dtype, ("real floating", "complex floating")) + if a_inexact or b_inexact: + # prevent warnings on NumPy and Dask on inf - inf + mxp = meta_namespace(a, b, xp=xp) + out = apply_where( + xp.isinf(a) | xp.isinf(b), + (a, b), + lambda a, b: mxp.isinf(a) & mxp.isinf(b) & (mxp.sign(a) == mxp.sign(b)), # pyright: ignore[reportUnknownArgumentType] + # Note: inf <= inf is True! + lambda a, b: mxp.abs(a - b) <= (atol + rtol * mxp.abs(b)), # pyright: ignore[reportUnknownArgumentType] + xp=xp, + ) + if equal_nan: + out = xp.where(xp.isnan(a) & xp.isnan(b), True, out) + return out + + if xp.isdtype(a.dtype, "bool") or xp.isdtype(b.dtype, "bool"): + if atol >= 1 or rtol >= 1: + return xp.ones_like(a == b) + return a == b + + # integer types + atol = int(atol) + if rtol == 0: + return xp.abs(a - b) <= atol + + # Don't rely on OverflowError, as it is not guaranteed by the Array API. + nrtol = int(1.0 / rtol) + if nrtol > xp.iinfo(b.dtype).max: + # rtol * max_int < 1, so it's inconsequential + return xp.abs(a - b) <= atol + return xp.abs(a - b) <= (atol + xp.abs(b) // nrtol) + + +def kron( + a: Array | complex, + b: Array | complex, + /, + *, + xp: ModuleType | None = None, +) -> Array: """ Kronecker product of two arrays. @@ -318,8 +643,8 @@ def kron(a: Array, b: Array, /, *, xp: ModuleType | None = None) -> Array: Parameters ---------- - a, b : array - Input arrays. + a, b : Array | int | float | complex + Input arrays or scalars. At least one must be an array. xp : array_namespace, optional The standard-compatible namespace for `a` and `b`. Default: infer. @@ -382,18 +707,18 @@ def kron(a: Array, b: Array, /, *, xp: ModuleType | None = None) -> Array: """ if xp is None: xp = array_namespace(a, b) + a, b = asarrays(a, b, xp=xp) - b = xp.asarray(b) singletons = (1,) * (b.ndim - a.ndim) - a = xp.broadcast_to(xp.asarray(a), singletons + a.shape) + a = cast(Array, xp.broadcast_to(a, singletons + a.shape)) nd_b, nd_a = b.ndim, a.ndim nd_max = max(nd_b, nd_a) if nd_a == 0 or nd_b == 0: return xp.multiply(a, b) - a_shape = a.shape - b_shape = b.shape + a_shape = eager_shape(a) + b_shape = eager_shape(b) # Equalise the shapes by prepending smaller one with 1s a_shape = (1,) * max(0, nd_b - nd_a) + a_shape @@ -413,9 +738,156 @@ def kron(a: Array, b: Array, /, *, xp: ModuleType | None = None) -> Array: return xp.reshape(result, res_shape) +def nan_to_num( # numpydoc ignore=PR01,RT01 + x: Array, + /, + fill_value: int | float = 0.0, + *, + xp: ModuleType, +) -> Array: + """See docstring in `array_api_extra._delegation.py`.""" + + def perform_replacements( # numpydoc ignore=PR01,RT01 + x: Array, + fill_value: int | float, + xp: ModuleType, + ) -> Array: + """Internal function to perform the replacements.""" + x = xp.where(xp.isnan(x), fill_value, x) + + # convert infinities to finite values + finfo = xp.finfo(x.dtype) + idx_posinf = xp.isinf(x) & ~xp.signbit(x) + idx_neginf = xp.isinf(x) & xp.signbit(x) + x = xp.where(idx_posinf, finfo.max, x) + return xp.where(idx_neginf, finfo.min, x) + + if xp.isdtype(x.dtype, "complex floating"): + return perform_replacements( + xp.real(x), + fill_value, + xp, + ) + 1j * perform_replacements( + xp.imag(x), + fill_value, + xp, + ) + + if xp.isdtype(x.dtype, "numeric"): + return perform_replacements(x, fill_value, xp) + + return x + + +def nunique(x: Array, /, *, xp: ModuleType | None = None) -> Array: + """ + Count the number of unique elements in an array. + + Compatible with JAX and Dask, whose laziness would be otherwise + problematic. + + Parameters + ---------- + x : Array + Input array. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + array: 0-dimensional integer array + The number of unique elements in `x`. It can be lazy. + """ + if xp is None: + xp = array_namespace(x) + + if is_jax_array(x): + # size= is JAX-specific + # https://github.com/data-apis/array-api/issues/883 + _, counts = xp.unique_counts(x, size=_compat.size(x)) + return (counts > 0).sum() + + # There are 3 general use cases: + # 1. backend has unique_counts and it returns an array with known shape + # 2. backend has unique_counts and it returns a None-sized array; + # e.g. Dask, ndonnx + # 3. backend does not have unique_counts; e.g. wrapped JAX + if capabilities(xp, device=_compat.device(x))["data-dependent shapes"]: + # xp has unique_counts; O(n) complexity + _, counts = xp.unique_counts(x) + n = _compat.size(counts) + if n is None: + return xp.sum(xp.ones_like(counts)) + return xp.asarray(n, device=_compat.device(x)) + + # xp does not have unique_counts; O(n*logn) complexity + x = xp.reshape(x, (-1,)) + x = xp.sort(x) + mask = x != xp.roll(x, -1) + default_int = default_dtype(xp, "integral", device=_compat.device(x)) + return xp.maximum( + # Special cases: + # - array is size 0 + # - array has all elements equal to each other + xp.astype(xp.any(~mask), default_int), + xp.sum(xp.astype(mask, default_int)), + ) + + +def pad( + x: Array, + pad_width: int | tuple[int, int] | Sequence[tuple[int, int]], + *, + constant_values: complex = 0, + xp: ModuleType, +) -> Array: # numpydoc ignore=PR01,RT01 + """See docstring in `array_api_extra._delegation.py`.""" + # make pad_width a list of length-2 tuples of ints + if isinstance(pad_width, int): + pad_width_seq = [(pad_width, pad_width)] * x.ndim + elif ( + isinstance(pad_width, tuple) + and len(pad_width) == 2 + and all(isinstance(i, int) for i in pad_width) + ): + pad_width_seq = [cast(tuple[int, int], pad_width)] * x.ndim + else: + pad_width_seq = cast(list[tuple[int, int]], list(pad_width)) + + slices: list[slice] = [] + newshape: list[int] = [] + for ax, w_tpl in enumerate(pad_width_seq): + if len(w_tpl) != 2: + msg = f"expect a 2-tuple (before, after), got {w_tpl}." + raise ValueError(msg) + + sh = eager_shape(x)[ax] + + if w_tpl[0] == 0 and w_tpl[1] == 0: + sl = slice(None, None, None) + else: + stop: int | None + start, stop = w_tpl + stop = None if stop == 0 else -stop + + sl = slice(start, stop, None) + sh += w_tpl[0] + w_tpl[1] + + newshape.append(sh) + slices.append(sl) + + padded = xp.full( + tuple(newshape), + fill_value=constant_values, + dtype=x.dtype, + device=_compat.device(x), + ) + return at(padded, tuple(slices)).set(x) + + def setdiff1d( - x1: Array, - x2: Array, + x1: Array | complex, + x2: Array | complex, /, *, assume_unique: bool = False, @@ -428,7 +900,7 @@ def setdiff1d( Parameters ---------- - x1 : array + x1 : array | int | float | complex | bool Input array. x2 : array Input comparison array. @@ -457,13 +929,17 @@ def setdiff1d( """ if xp is None: xp = array_namespace(x1, x2) + # https://github.com/microsoft/pyright/issues/10103 + x1_, x2_ = asarrays(x1, x2, xp=xp) if assume_unique: - x1 = xp.reshape(x1, (-1,)) + x1_ = xp.reshape(x1_, (-1,)) + x2_ = xp.reshape(x2_, (-1,)) else: - x1 = xp.unique_values(x1) - x2 = xp.unique_values(x2) - return x1[_helpers.in1d(x1, x2, assume_unique=True, invert=True, xp=xp)] + x1_ = xp.unique_values(x1_) + x2_ = xp.unique_values(x2_) + + return x1_[_helpers.in1d(x1_, x2_, assume_unique=True, invert=True, xp=xp)] def sinc(x: Array, /, *, xp: ModuleType | None = None) -> Array: @@ -553,444 +1029,3 @@ def sinc(x: Array, /, *, xp: ModuleType | None = None) -> Array: xp.asarray(xp.finfo(x.dtype).eps, dtype=x.dtype, device=_compat.device(x)), ) return xp.sin(y) / y - - -def pad( - x: Array, - pad_width: int | tuple[int, int] | list[tuple[int, int]], - *, - constant_values: bool | int | float | complex = 0, - xp: ModuleType, -) -> Array: # numpydoc ignore=PR01,RT01 - """See docstring in `array_api_extra._delegation.py`.""" - # make pad_width a list of length-2 tuples of ints - x_ndim = cast(int, x.ndim) - if isinstance(pad_width, int): - pad_width = [(pad_width, pad_width)] * x_ndim - if isinstance(pad_width, tuple): - pad_width = [pad_width] * x_ndim - - # https://github.com/python/typeshed/issues/13376 - slices: list[slice] = [] # type: ignore[no-any-explicit] - newshape: list[int] = [] - for ax, w_tpl in enumerate(pad_width): - if len(w_tpl) != 2: - msg = f"expect a 2-tuple (before, after), got {w_tpl}." - raise ValueError(msg) - - sh = x.shape[ax] - if w_tpl[0] == 0 and w_tpl[1] == 0: - sl = slice(None, None, None) - else: - start, stop = w_tpl - stop = None if stop == 0 else -stop - - sl = slice(start, stop, None) - sh += w_tpl[0] + w_tpl[1] - - newshape.append(sh) - slices.append(sl) - - padded = xp.full( - tuple(newshape), - fill_value=constant_values, - dtype=x.dtype, - device=_compat.device(x), - ) - return at(padded, tuple(slices)).set(x) - - -def nunique(x: Array, /, *, xp: ModuleType | None = None) -> Array: - """ - Count the number of unique elements in an array. - - Compatible with JAX and Dask, whose laziness would be otherwise - problematic. - - Parameters - ---------- - x : Array - Input array. - xp : array_namespace, optional - The standard-compatible namespace for `x`. Default: infer. - - Returns - ------- - array: 0-dimensional integer array - The number of unique elements in `x`. It can be lazy. - """ - if xp is None: - xp = array_namespace(x) - - if is_jax_array(x): - # size= is JAX-specific - # https://github.com/data-apis/array-api/issues/883 - _, counts = xp.unique_counts(x, size=_compat.size(x)) - return xp.astype(counts, xp.bool).sum() - - _, counts = xp.unique_counts(x) - n = _compat.size(counts) - # FIXME https://github.com/data-apis/array-api-compat/pull/231 - if n is None or math.isnan(n): # e.g. Dask, ndonnx - return xp.astype(counts, xp.bool).sum() - return xp.asarray(n, device=_compat.device(x)) - - -class _AtOp(Enum): - """Operations for use in `xpx.at`.""" - - SET = "set" - ADD = "add" - SUBTRACT = "subtract" - MULTIPLY = "multiply" - DIVIDE = "divide" - POWER = "power" - MIN = "min" - MAX = "max" - - # @override from Python 3.12 - def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] - """ - Return string representation (useful for pytest logs). - - Returns - ------- - str - The operation's name. - """ - return self.value - - -_undef = object() - - -class at: # pylint: disable=invalid-name # numpydoc ignore=PR02 - """ - Update operations for read-only arrays. - - This implements ``jax.numpy.ndarray.at`` for all writeable - backends (those that support ``__setitem__``) and routes - to the ``.at[]`` method for JAX arrays. - - Parameters - ---------- - x : array - Input array. - idx : index, optional - Only `array API standard compliant indices - `_ - are supported. - - You may use two alternate syntaxes:: - - >>> import array_api_extra as xpx - >>> xpx.at(x, idx).set(value) # or add(value), etc. - >>> xpx.at(x)[idx].set(value) - - copy : bool, optional - None (default) - The array parameter *may* be modified in place if it is - possible and beneficial for performance. - You should not reuse it after calling this function. - True - Ensure that the inputs are not modified. - False - Ensure that the update operation writes back to the input. - Raise ``ValueError`` if a copy cannot be avoided. - - xp : array_namespace, optional - The standard-compatible namespace for `x`. Default: infer. - - Returns - ------- - Updated input array. - - Warnings - -------- - (a) When you omit the ``copy`` parameter, you should never reuse the parameter - array later on; ideally, you should reassign it immediately:: - - >>> import array_api_extra as xpx - >>> x = xpx.at(x, 0).set(2) - - The above best practice pattern ensures that the behaviour won't change depending - on whether ``x`` is writeable or not, as the original ``x`` object is dereferenced - as soon as ``xpx.at`` returns; this way there is no risk to accidentally update it - twice. - - On the reverse, the anti-pattern below must be avoided, as it will result in - different behaviour on read-only versus writeable arrays:: - - >>> x = xp.asarray([0, 0, 0]) - >>> y = xpx.at(x, 0).set(2) - >>> z = xpx.at(x, 1).set(3) - - In the above example, both calls to ``xpx.at`` update ``x`` in place *if possible*. - This causes the behaviour to diverge depending on whether ``x`` is writeable or not: - - - If ``x`` is writeable, then after the snippet above you'll have - ``x == y == z == [2, 3, 0]`` - - If ``x`` is read-only, then you'll end up with - ``x == [0, 0, 0]``, ``y == [2, 0, 0]`` and ``z == [0, 3, 0]``. - - The correct pattern to use if you want diverging outputs from the same input is - to enforce copies:: - - >>> x = xp.asarray([0, 0, 0]) - >>> y = xpx.at(x, 0).set(2, copy=True) # Never updates x - >>> z = xpx.at(x, 1).set(3) # May or may not update x in place - >>> del x # avoid accidental reuse of x as we don't know its state anymore - - (b) The array API standard does not support integer array indices. - The behaviour of update methods when the index is an array of integers is - undefined and will vary between backends; this is particularly true when the - index contains multiple occurrences of the same index, e.g.:: - - >>> import numpy as np - >>> import jax.numpy as jnp - >>> import array_api_extra as xpx - >>> xpx.at(np.asarray([123]), np.asarray([0, 0])).add(1) - array([124]) - >>> xpx.at(jnp.asarray([123]), jnp.asarray([0, 0])).add(1) - Array([125], dtype=int32) - - See Also - -------- - jax.numpy.ndarray.at : Equivalent array method in JAX. - - Notes - ----- - `sparse `_, as well as read-only arrays from libraries - not explicitly covered by ``array-api-compat``, are not supported by update - methods. - - Examples - -------- - Given either of these equivalent expressions:: - - >>> import array_api_extra as xpx - >>> x = xpx.at(x)[1].add(2) - >>> x = xpx.at(x, 1).add(2) - - If x is a JAX array, they are the same as:: - - >>> x = x.at[1].add(2) - - If x is a read-only numpy array, they are the same as:: - - >>> x = x.copy() - >>> x[1] += 2 - - For other known backends, they are the same as:: - - >>> x[1] += 2 - """ - - _x: Array - _idx: Index - __slots__: ClassVar[tuple[str, ...]] = ("_idx", "_x") - - def __init__( - self, x: Array, idx: Index = _undef, / - ) -> None: # numpydoc ignore=GL08 - self._x = x - self._idx = idx - - def __getitem__(self, idx: Index, /) -> at: # numpydoc ignore=PR01,RT01 - """ - Allow for the alternate syntax ``at(x)[start:stop:step]``. - - It looks prettier than ``at(x, slice(start, stop, step))`` - and feels more intuitive coming from the JAX documentation. - """ - if self._idx is not _undef: - msg = "Index has already been set" - raise ValueError(msg) - return at(self._x, idx) - - def _update_common( - self, - at_op: _AtOp, - y: Array, - /, - copy: bool | None, - xp: ModuleType | None, - ) -> tuple[Array, None] | tuple[None, Array]: # numpydoc ignore=PR01 - """ - Perform common prepocessing to all update operations. - - Returns - ------- - tuple - If the operation can be resolved by ``at[]``, ``(return value, None)`` - Otherwise, ``(None, preprocessed x)``. - """ - x, idx = self._x, self._idx - - if idx is _undef: - msg = ( - "Index has not been set.\n" - "Usage: either\n" - " at(x, idx).set(value)\n" - "or\n" - " at(x)[idx].set(value)\n" - "(same for all other methods)." - ) - raise ValueError(msg) - - if copy not in (True, False, None): - msg = f"copy must be True, False, or None; got {copy!r}" - raise ValueError(msg) - - if copy is None: - writeable = is_writeable_array(x) - copy = not writeable - elif copy: - writeable = None - else: - writeable = is_writeable_array(x) - - if copy: - if is_jax_array(x): - # Use JAX's at[] - func = cast(Callable[[Array], Array], getattr(x.at[idx], at_op.value)) - return func(y), None - # Emulate at[] behaviour for non-JAX arrays - # with a copy followed by an update - if xp is None: - xp = array_namespace(x) - x = xp.asarray(x, copy=True) - if writeable is False: - # A copy of a read-only numpy array is writeable - # Note: this assumes that a copy of a writeable array is writeable - writeable = None - - if writeable is None: - writeable = is_writeable_array(x) - if not writeable: - # sparse crashes here - msg = f"Can't update read-only array {x}" - raise ValueError(msg) - - return None, x - - def set( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] = y`` and return the update array.""" - res, x = self._update_common(_AtOp.SET, y, copy=copy, xp=xp) - if res is not None: - return res - assert x is not None - x[self._idx] = y - return x - - def _iop( - self, - at_op: _AtOp, - elwise_op: Callable[[Array, Array], Array], - y: Array, - /, - copy: bool | None, - xp: ModuleType | None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """ - ``x[idx] += y`` or equivalent in-place operation on a subset of x. - - which is the same as saying - x[idx] = x[idx] + y - Note that this is not the same as - operator.iadd(x[idx], y) - Consider for example when x is a numpy array and idx is a fancy index, which - triggers a deep copy on __getitem__. - """ - res, x = self._update_common(at_op, y, copy=copy, xp=xp) - if res is not None: - return res - assert x is not None - x[self._idx] = elwise_op(x[self._idx], y) - return x - - def add( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] += y`` and return the updated array.""" - - # Note for this and all other methods based on _iop: - # operator.iadd and operator.add subtly differ in behaviour, as - # only iadd will trigger exceptions when y has an incompatible dtype. - return self._iop(_AtOp.ADD, operator.iadd, y, copy=copy, xp=xp) - - def subtract( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] -= y`` and return the updated array.""" - return self._iop(_AtOp.SUBTRACT, operator.isub, y, copy=copy, xp=xp) - - def multiply( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] *= y`` and return the updated array.""" - return self._iop(_AtOp.MULTIPLY, operator.imul, y, copy=copy, xp=xp) - - def divide( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] /= y`` and return the updated array.""" - return self._iop(_AtOp.DIVIDE, operator.itruediv, y, copy=copy, xp=xp) - - def power( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] **= y`` and return the updated array.""" - return self._iop(_AtOp.POWER, operator.ipow, y, copy=copy, xp=xp) - - def min( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] = minimum(x[idx], y)`` and return the updated array.""" - if xp is None: - xp = array_namespace(self._x) - y = xp.asarray(y) - return self._iop(_AtOp.MIN, xp.minimum, y, copy=copy, xp=xp) - - def max( - self, - y: Array, - /, - copy: bool | None = None, - xp: ModuleType | None = None, - ) -> Array: # numpydoc ignore=PR01,RT01 - """Apply ``x[idx] = maximum(x[idx], y)`` and return the updated array.""" - if xp is None: - xp = array_namespace(self._x) - y = xp.asarray(y) - return self._iop(_AtOp.MAX, xp.maximum, y, copy=copy, xp=xp) diff --git a/src/array_api_extra/_lib/_lazy.py b/src/array_api_extra/_lib/_lazy.py new file mode 100644 index 00000000..d5095001 --- /dev/null +++ b/src/array_api_extra/_lib/_lazy.py @@ -0,0 +1,357 @@ +"""Public API Functions.""" + +from __future__ import annotations + +import math +from collections.abc import Callable, Sequence +from functools import partial, wraps +from types import ModuleType +from typing import TYPE_CHECKING, Any, ParamSpec, TypeAlias, cast, overload + +from ._funcs import broadcast_shapes +from ._utils import _compat +from ._utils._compat import ( + array_namespace, + is_dask_namespace, + is_jax_namespace, +) +from ._utils._helpers import is_python_scalar +from ._utils._typing import Array, DType + +if TYPE_CHECKING: # pragma: no cover + import numpy as np + from numpy.typing import ArrayLike + + NumPyObject: TypeAlias = np.ndarray[Any, Any] | np.generic +else: + # Sphinx hack + NumPyObject = Any + +P = ParamSpec("P") + + +@overload +def lazy_apply( # type: ignore[valid-type] + func: Callable[P, Array | ArrayLike], + *args: Array | complex | None, + shape: tuple[int | None, ...] | None = None, + dtype: DType | None = None, + as_numpy: bool = False, + xp: ModuleType | None = None, + **kwargs: P.kwargs, # pyright: ignore[reportGeneralTypeIssues] +) -> Array: ... # numpydoc ignore=GL08 + + +@overload +def lazy_apply( # type: ignore[valid-type] + func: Callable[P, Sequence[Array | ArrayLike]], + *args: Array | complex | None, + shape: Sequence[tuple[int | None, ...]], + dtype: Sequence[DType] | None = None, + as_numpy: bool = False, + xp: ModuleType | None = None, + **kwargs: P.kwargs, # pyright: ignore[reportGeneralTypeIssues] +) -> tuple[Array, ...]: ... # numpydoc ignore=GL08 + + +def lazy_apply( # type: ignore[valid-type] # numpydoc ignore=GL07,SA04 + func: Callable[P, Array | ArrayLike | Sequence[Array | ArrayLike]], + *args: Array | complex | None, + shape: tuple[int | None, ...] | Sequence[tuple[int | None, ...]] | None = None, + dtype: DType | Sequence[DType] | None = None, + as_numpy: bool = False, + xp: ModuleType | None = None, + **kwargs: P.kwargs, # pyright: ignore[reportGeneralTypeIssues] +) -> Array | tuple[Array, ...]: + """ + Lazily apply an eager function. + + If the backend of the input arrays is lazy, e.g. Dask or jitted JAX, the execution + of the function is delayed until the graph is materialized; if it's eager, the + function is executed immediately. + + Parameters + ---------- + func : callable + The function to apply. + + It must accept one or more array API compliant arrays as positional arguments. + If `as_numpy=True`, inputs are converted to NumPy before they are passed to + `func`. + It must return either a single array-like or a sequence of array-likes. + + `func` must be a pure function, i.e. without side effects, as depending on the + backend it may be executed more than once or never. + *args : Array | int | float | complex | bool | None + One or more Array API compliant arrays, Python scalars, or None's. + + If `as_numpy=True`, you need to be able to apply :func:`numpy.asarray` to + non-None args to convert them to NumPy; read notes below about specific + backends. + shape : tuple[int | None, ...] | Sequence[tuple[int | None, ...]], optional + Output shape or sequence of output shapes, one for each output of `func`. + Default: assume single output and broadcast shapes of the input arrays. + dtype : DType | Sequence[DType], optional + Output dtype or sequence of output dtypes, one for each output of `func`. + dtype(s) must belong to the same array namespace as the input arrays. + Default: infer the result type(s) from the input arrays. + as_numpy : bool, optional + If True, convert the input arrays to NumPy before passing them to `func`. + This is particularly useful to make NumPy-only functions, e.g. written in Cython + or Numba, work transparently with array API-compliant arrays. + Default: False. + xp : array_namespace, optional + The standard-compatible namespace for `args`. Default: infer. + **kwargs : Any, optional + Additional keyword arguments to pass verbatim to `func`. + They cannot contain Array objects. + + Returns + ------- + Array | tuple[Array, ...] + The result(s) of `func` applied to the input arrays, wrapped in the same + array namespace as the inputs. + If shape is omitted or a single `tuple[int | None, ...]`, return a single array. + Otherwise, return a tuple of arrays. + + Notes + ----- + JAX + This allows applying eager functions to jitted JAX arrays, which are lazy. + The function won't be applied until the JAX array is materialized. + When running inside ``jax.jit``, `shape` must be fully known, i.e. it cannot + contain any `None` elements. + + .. warning:: + + `func` must never raise inside ``jax.jit``, as the resulting behavior is + undefined. + + Using this with `as_numpy=False` is particularly useful to apply non-jittable + JAX functions to arrays on GPU devices. + If ``as_numpy=True``, the :doc:`jax:transfer_guard` may prevent arrays on a GPU + device from being transferred back to CPU. This is treated as an implicit + transfer. + + PyTorch, CuPy + If ``as_numpy=True``, these backends raise by default if you attempt to convert + arrays on a GPU device to NumPy. + + Sparse + If ``as_numpy=True``, by default sparse prevents implicit densification through + :func:`numpy.asarray`. `This safety mechanism can be disabled + `_. + + Dask + This allows applying eager functions to Dask arrays. + The Dask graph won't be computed until the user calls ``compute()`` or + ``persist()`` down the line. + + The function name will be prominently visible on the user-facing Dask + dashboard and on Prometheus metrics, so it is recommended for it to be + meaningful. + + `lazy_apply` doesn't know if `func` reduces along any axes; also, shape + changes are non-trivial in chunked Dask arrays. For these reasons, all inputs + will be rechunked into a single chunk. + + .. warning:: + + The whole operation needs to fit in memory all at once on a single worker. + + The outputs will also be returned as a single chunk and you should consider + rechunking them into smaller chunks afterwards. + + If you want to distribute the calculation across multiple workers, you + should use :func:`dask.array.map_blocks`, :func:`dask.array.map_overlap`, + :func:`dask.array.blockwise`, or a native Dask wrapper instead of + `lazy_apply`. + + Dask wrapping around other backends + If ``as_numpy=False``, `func` will receive in input eager arrays of the meta + namespace, as defined by the ``._meta`` attribute of the input Dask arrays. + The outputs of `func` will be wrapped by the meta namespace, and then wrapped + again by Dask. + + Raises + ------ + ValueError + When ``xp=jax.numpy``, the output `shape` is unknown (it contains ``None`` on + one or more axes) and this function was called inside ``jax.jit``. + RuntimeError + When ``xp=sparse`` and auto-densification is disabled. + Exception (backend-specific) + When the backend disallows implicit device to host transfers and the input + arrays are on a non-CPU device, e.g. on GPU. + + See Also + -------- + jax.transfer_guard + jax.pure_callback + dask.array.map_blocks + dask.array.map_overlap + dask.array.blockwise + """ + args_not_none = [arg for arg in args if arg is not None] + array_args = [arg for arg in args_not_none if not is_python_scalar(arg)] + if not array_args: + msg = "Must have at least one argument array" + raise ValueError(msg) + if xp is None: + xp = array_namespace(*args) + + # Normalize and validate shape and dtype + shapes: list[tuple[int | None, ...]] + dtypes: list[DType] + multi_output = False + + if shape is None: + shapes = [broadcast_shapes(*(arg.shape for arg in array_args))] + elif all(isinstance(s, int | None) for s in shape): + # Do not test for shape to be a tuple + # https://github.com/data-apis/array-api/issues/891#issuecomment-2637430522 + shapes = [cast(tuple[int | None, ...], shape)] + else: + shapes = list(shape) # type: ignore[arg-type] # pyright: ignore[reportAssignmentType] + multi_output = True + + if dtype is None: + dtypes = [xp.result_type(*args_not_none)] * len(shapes) + elif multi_output: + if not isinstance(dtype, Sequence): + msg = "Got multiple shapes but only one dtype" + raise ValueError(msg) + dtypes = list(dtype) # pyright: ignore[reportUnknownArgumentType] + else: + if isinstance(dtype, Sequence): + msg = "Got single shape but multiple dtypes" + raise ValueError(msg) + + dtypes = [dtype] + + if len(shapes) != len(dtypes): + msg = f"Got {len(shapes)} shapes and {len(dtypes)} dtypes" + raise ValueError(msg) + del shape + del dtype + # End of shape and dtype parsing + + # Backend-specific branches + if is_dask_namespace(xp): + import dask + + metas: list[Array] = [arg._meta for arg in array_args] # pylint: disable=protected-access # pyright: ignore[reportAttributeAccessIssue] + meta_xp = array_namespace(*metas) + + wrapped = dask.delayed( # type: ignore[attr-defined] # pyright: ignore[reportPrivateImportUsage] + _lazy_apply_wrapper(func, as_numpy, multi_output, meta_xp), + pure=True, + ) + # This finalizes each arg, which is the same as arg.rechunk(-1). + # Please read docstring above for why we're not using + # dask.array.map_blocks or dask.array.blockwise! + delayed_out = wrapped(*args, **kwargs) + + out = tuple( + xp.from_delayed( + delayed_out[i], # pyright: ignore[reportIndexIssue] + # Dask's unknown shapes diverge from the Array API specification + shape=tuple(math.nan if s is None else s for s in shape), + dtype=dtype, + meta=metas[0], + ) + for i, (shape, dtype) in enumerate(zip(shapes, dtypes, strict=True)) + ) + + elif is_jax_namespace(xp) and _is_jax_jit_enabled(xp): + # Delay calling func with jax.pure_callback, which will forward to func eager + # JAX arrays. Do not use jax.pure_callback when running outside of the JIT, + # as it does not support raising exceptions: + # https://github.com/jax-ml/jax/issues/26102 + import jax + + if any(None in shape for shape in shapes): + msg = "Output shape must be fully known when running inside jax.jit" + raise ValueError(msg) + + # Shield kwargs from being coerced into JAX arrays. + # jax.pure_callback calls jax.jit under the hood, but without the chance of + # passing static_argnames / static_argnums. + wrapped = _lazy_apply_wrapper( + partial(func, **kwargs), as_numpy, multi_output, xp + ) + + # suppress unused-ignore to run mypy in -e lint as well as -e dev + out = cast( # type: ignore[bad-cast,unused-ignore] + tuple[Array, ...], + jax.pure_callback( + wrapped, + tuple( + jax.ShapeDtypeStruct(shape, dtype) # pyright: ignore[reportUnknownArgumentType] + for shape, dtype in zip(shapes, dtypes, strict=True) + ), + *args, + ), + ) + + else: + # Eager backends, including non-jitted JAX + wrapped = _lazy_apply_wrapper(func, as_numpy, multi_output, xp) + out = wrapped(*args, **kwargs) + + return out if multi_output else out[0] + + +def _is_jax_jit_enabled(xp: ModuleType) -> bool: # numpydoc ignore=PR01,RT01 + """Return True if this function is being called inside ``jax.jit``.""" + import jax # pylint: disable=import-outside-toplevel + + x = xp.asarray(False) + try: + return bool(x) + except jax.errors.TracerBoolConversionError: + return True + + +def _lazy_apply_wrapper( # numpydoc ignore=PR01,RT01 + func: Callable[..., Array | ArrayLike | Sequence[Array | ArrayLike]], + as_numpy: bool, + multi_output: bool, + xp: ModuleType, +) -> Callable[..., tuple[Array, ...]]: + """ + Helper of `lazy_apply`. + + Given a function that accepts one or more arrays as positional arguments and returns + a single array-like or a sequence of array-likes, return a function that accepts the + same number of Array API arrays and always returns a tuple of Array API array. + + Any keyword arguments are passed through verbatim to the wrapped function. + """ + + # On Dask, @wraps causes the graph key to contain the wrapped function's name + @wraps(func) + def wrapper( + *args: Array | complex | None, **kwargs: Any + ) -> tuple[Array, ...]: # numpydoc ignore=GL08 + args_list = [] + device = None + for arg in args: + if arg is not None and not is_python_scalar(arg): + if device is None: + device = _compat.device(arg) + if as_numpy: + import numpy as np + + arg = cast(Array, np.asarray(arg)) # pyright: ignore[reportInvalidCast] # noqa: PLW2901 + args_list.append(arg) + assert device is not None + + out = func(*args_list, **kwargs) + + if multi_output: + assert isinstance(out, Sequence) + return tuple(xp.asarray(o, device=device) for o in out) + return (xp.asarray(out, device=device),) + + return wrapper diff --git a/src/array_api_extra/_lib/_testing.py b/src/array_api_extra/_lib/_testing.py index b6993a16..30e2f1ef 100644 --- a/src/array_api_extra/_lib/_testing.py +++ b/src/array_api_extra/_lib/_testing.py @@ -2,23 +2,41 @@ Testing utilities. Note that this is private API; don't expect it to be stable. +See also ..testing for public testing utilities. """ +from __future__ import annotations + +import math from types import ModuleType +from typing import Any, cast + +import numpy as np +import pytest from ._utils._compat import ( array_namespace, + is_array_api_strict_namespace, is_cupy_namespace, + is_dask_namespace, + is_jax_namespace, + is_numpy_namespace, is_pydata_sparse_namespace, + is_torch_array, is_torch_namespace, + to_device, ) -from ._utils._typing import Array +from ._utils._typing import Array, Device -__all__ = ["xp_assert_close", "xp_assert_equal"] +__all__ = ["as_numpy_array", "xp_assert_close", "xp_assert_equal", "xp_assert_less"] def _check_ns_shape_dtype( - actual: Array, desired: Array + actual: Array, + desired: Array, + check_dtype: bool, + check_shape: bool, + check_scalar: bool, ) -> ModuleType: # numpydoc ignore=RT03 """ Assert that namespace, shape and dtype of the two arrays match. @@ -29,6 +47,11 @@ def _check_ns_shape_dtype( The array produced by the tested function. desired : Array The expected array (typically hardcoded). + check_dtype, check_shape : bool, default: True + Whether to check agreement between actual and desired dtypes and shapes + check_scalar : bool, default: False + NumPy only: whether to check agreement between actual and desired types - + 0d array vs scalar. Returns ------- @@ -40,16 +63,86 @@ def _check_ns_shape_dtype( msg = f"namespaces do not match: {actual_xp} != f{desired_xp}" assert actual_xp == desired_xp, msg - msg = f"shapes do not match: {actual.shape} != f{desired.shape}" - assert actual.shape == desired.shape, msg + # Dask uses nan instead of None for unknown shapes + actual_shape = cast(tuple[float, ...], actual.shape) + desired_shape = cast(tuple[float, ...], desired.shape) + assert None not in actual_shape # Requires explicit support + assert None not in desired_shape + if is_dask_namespace(desired_xp): + if any(math.isnan(i) for i in actual_shape): + actual_shape = actual.compute().shape # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + if any(math.isnan(i) for i in desired_shape): + desired_shape = desired.compute().shape # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + if check_shape: + msg = f"shapes do not match: {actual_shape} != f{desired_shape}" + assert actual_shape == desired_shape, msg + else: + # Ignore shape, but check flattened size. This is normally done by + # np.testing.assert_array_equal etc even when strict=False, but not for + # non-materializable arrays. + actual_size = math.prod(actual_shape) # pyright: ignore[reportUnknownArgumentType] + desired_size = math.prod(desired_shape) # pyright: ignore[reportUnknownArgumentType] + msg = f"sizes do not match: {actual_size} != f{desired_size}" + assert actual_size == desired_size, msg + + if check_dtype: + msg = f"dtypes do not match: {actual.dtype} != {desired.dtype}" + assert actual.dtype == desired.dtype, msg - msg = f"dtypes do not match: {actual.dtype} != {desired.dtype}" - assert actual.dtype == desired.dtype, msg + if is_numpy_namespace(actual_xp) and check_scalar: + # only NumPy distinguishes between scalars and arrays; we do if check_scalar. + _msg = ( + "array-ness does not match:\n Actual: " + f"{type(actual)}\n Desired: {type(desired)}" + ) + assert np.isscalar(actual) == np.isscalar(desired), _msg return desired_xp -def xp_assert_equal(actual: Array, desired: Array, err_msg: str = "") -> None: +def _is_materializable(x: Array) -> bool: + """ + Return True if you can call `as_numpy_array(x)`; False otherwise. + """ + # Important: here we assume that we're not tracing - + # e.g. we're not inside `jax.jit`` nor `cupy.cuda.Stream.begin_capture`. + return not is_torch_array(x) or x.device.type != "meta" # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + +def as_numpy_array(array: Array, *, xp: ModuleType) -> np.typing.NDArray[Any]: + """ + Convert array to NumPy, bypassing GPU-CPU transfer guards and densification guards. + """ + if is_cupy_namespace(xp): + return xp.asnumpy(array) + if is_pydata_sparse_namespace(xp): + return array.todense() # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + if is_torch_namespace(xp): + array = to_device(array, "cpu") + if is_array_api_strict_namespace(xp): + cpu: Device = xp.Device("CPU_DEVICE") + array = to_device(array, cpu) + if is_jax_namespace(xp): + import jax + + # Note: only needed if the transfer guard is enabled + cpu = cast(Device, jax.devices("cpu")[0]) + array = to_device(array, cpu) + + return np.asarray(array) + + +def xp_assert_equal( + actual: Array, + desired: Array, + *, + err_msg: str = "", + check_dtype: bool = True, + check_shape: bool = True, + check_scalar: bool = False, +) -> None: """ Array-API compatible version of `np.testing.assert_array_equal`. @@ -61,32 +154,60 @@ def xp_assert_equal(actual: Array, desired: Array, err_msg: str = "") -> None: The expected array (typically hardcoded). err_msg : str, optional Error message to display on failure. + check_dtype, check_shape : bool, default: True + Whether to check agreement between actual and desired dtypes and shapes + check_scalar : bool, default: False + NumPy only: whether to check agreement between actual and desired types - + 0d array vs scalar. + + See Also + -------- + xp_assert_close : Similar function for inexact equality checks. + numpy.testing.assert_array_equal : Similar function for NumPy arrays. """ - xp = _check_ns_shape_dtype(actual, desired) + xp = _check_ns_shape_dtype(actual, desired, check_dtype, check_shape, check_scalar) + if not _is_materializable(actual): + return + actual_np = as_numpy_array(actual, xp=xp) + desired_np = as_numpy_array(desired, xp=xp) + np.testing.assert_array_equal(actual_np, desired_np, err_msg=err_msg) - if is_cupy_namespace(xp): - xp.testing.assert_array_equal(actual, desired, err_msg=err_msg) - elif is_torch_namespace(xp): - # PyTorch recommends using `rtol=0, atol=0` like this - # to test for exact equality - xp.testing.assert_close( - actual, - desired, - rtol=0, - atol=0, - equal_nan=True, - check_dtype=False, - msg=err_msg or None, - ) - else: - import numpy as np # pylint: disable=import-outside-toplevel - if is_pydata_sparse_namespace(xp): - actual = actual.todense() - desired = desired.todense() +def xp_assert_less( + x: Array, + y: Array, + *, + err_msg: str = "", + check_dtype: bool = True, + check_shape: bool = True, + check_scalar: bool = False, +) -> None: + """ + Array-API compatible version of `np.testing.assert_array_less`. + + Parameters + ---------- + x, y : Array + The arrays to compare according to ``x < y`` (elementwise). + err_msg : str, optional + Error message to display on failure. + check_dtype, check_shape : bool, default: True + Whether to check agreement between actual and desired dtypes and shapes + check_scalar : bool, default: False + NumPy only: whether to check agreement between actual and desired types - + 0d array vs scalar. - # JAX uses `np.testing` - np.testing.assert_array_equal(actual, desired, err_msg=err_msg) + See Also + -------- + xp_assert_close : Similar function for inexact equality checks. + numpy.testing.assert_array_equal : Similar function for NumPy arrays. + """ + xp = _check_ns_shape_dtype(x, y, check_dtype, check_shape, check_scalar) + if not _is_materializable(x): + return + x_np = as_numpy_array(x, xp=xp) + y_np = as_numpy_array(y, xp=xp) + np.testing.assert_array_less(x_np, y_np, err_msg=err_msg) def xp_assert_close( @@ -96,6 +217,9 @@ def xp_assert_close( rtol: float | None = None, atol: float = 0, err_msg: str = "", + check_dtype: bool = True, + check_shape: bool = True, + check_scalar: bool = False, ) -> None: """ Array-API compatible version of `np.testing.assert_allclose`. @@ -112,35 +236,69 @@ def xp_assert_close( Absolute tolerance. Default: 0. err_msg : str, optional Error message to display on failure. + check_dtype, check_shape : bool, default: True + Whether to check agreement between actual and desired dtypes and shapes + check_scalar : bool, default: False + NumPy only: whether to check agreement between actual and desired types - + 0d array vs scalar. + + See Also + -------- + xp_assert_equal : Similar function for exact equality checks. + isclose : Public function for checking closeness. + numpy.testing.assert_allclose : Similar function for NumPy arrays. + + Notes + ----- + The default `atol` and `rtol` differ from `xp.all(xpx.isclose(a, b))`. """ - xp = _check_ns_shape_dtype(actual, desired) + xp = _check_ns_shape_dtype(actual, desired, check_dtype, check_shape, check_scalar) + if not _is_materializable(actual): + return - floating = xp.isdtype(actual.dtype, ("real floating", "complex floating")) - if rtol is None and floating: - # multiplier of 4 is used as for `np.float64` this puts the default `rtol` - # roughly half way between sqrt(eps) and the default for - # `numpy.testing.assert_allclose`, 1e-7 - rtol = xp.finfo(actual.dtype).eps ** 0.5 * 4 - elif rtol is None: - rtol = 1e-7 + if rtol is None: + if xp.isdtype(actual.dtype, ("real floating", "complex floating")): + # multiplier of 4 is used as for `np.float64` this puts the default `rtol` + # roughly half way between sqrt(eps) and the default for + # `numpy.testing.assert_allclose`, 1e-7 + rtol = xp.finfo(actual.dtype).eps ** 0.5 * 4 + else: + rtol = 1e-7 - if is_cupy_namespace(xp): - xp.testing.assert_allclose( - actual, desired, rtol=rtol, atol=atol, err_msg=err_msg - ) - elif is_torch_namespace(xp): - xp.testing.assert_close( - actual, desired, rtol=rtol, atol=atol, equal_nan=True, msg=err_msg or None - ) - else: - import numpy as np # pylint: disable=import-outside-toplevel + actual_np = as_numpy_array(actual, xp=xp) + desired_np = as_numpy_array(desired, xp=xp) + np.testing.assert_allclose( # pyright: ignore[reportCallIssue] + actual_np, + desired_np, + rtol=rtol, # pyright: ignore[reportArgumentType] + atol=atol, + err_msg=err_msg, + ) - if is_pydata_sparse_namespace(xp): - actual = actual.to_dense() - desired = desired.to_dense() - # JAX uses `np.testing` - assert isinstance(rtol, float) - np.testing.assert_allclose( - actual, desired, rtol=rtol, atol=atol, err_msg=err_msg - ) +def xfail( + request: pytest.FixtureRequest, *, reason: str, strict: bool | None = None +) -> None: + """ + XFAIL the currently running test. + + Unlike ``pytest.xfail``, allow rest of test to execute instead of immediately + halting it, so that it may result in a XPASS. + xref https://github.com/pandas-dev/pandas/issues/38902 + + Parameters + ---------- + request : pytest.FixtureRequest + ``request`` argument of the test function. + reason : str + Reason for the expected failure. + strict: bool, optional + If True, the test will be marked as failed if it passes. + If False, the test will be marked as passed if it fails. + Default: ``xfail_strict`` value in ``pyproject.toml``, or False if absent. + """ + if strict is not None: + marker = pytest.mark.xfail(reason=reason, strict=strict) + else: + marker = pytest.mark.xfail(reason=reason) + request.node.add_marker(marker) diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py index d7f7e83a..82ce76b8 100644 --- a/src/array_api_extra/_lib/_utils/_compat.py +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -2,48 +2,73 @@ # Allow packages that vendor both `array-api-extra` and # `array-api-compat` to override the import location +# pylint: disable=duplicate-code try: - from ...._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] + from ...._array_api_compat_vendor import ( array_namespace, device, + is_array_api_obj, is_array_api_strict_namespace, + is_cupy_array, is_cupy_namespace, + is_dask_array, is_dask_namespace, is_jax_array, is_jax_namespace, + is_lazy_array, + is_numpy_array, is_numpy_namespace, + is_pydata_sparse_array, is_pydata_sparse_namespace, + is_torch_array, is_torch_namespace, is_writeable_array, size, + to_device, ) except ImportError: - from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] + from array_api_compat import ( array_namespace, device, + is_array_api_obj, is_array_api_strict_namespace, + is_cupy_array, is_cupy_namespace, + is_dask_array, is_dask_namespace, is_jax_array, is_jax_namespace, + is_lazy_array, + is_numpy_array, is_numpy_namespace, + is_pydata_sparse_array, is_pydata_sparse_namespace, + is_torch_array, is_torch_namespace, is_writeable_array, size, + to_device, ) __all__ = [ "array_namespace", "device", + "is_array_api_obj", "is_array_api_strict_namespace", + "is_cupy_array", "is_cupy_namespace", + "is_dask_array", "is_dask_namespace", "is_jax_array", "is_jax_namespace", + "is_lazy_array", + "is_numpy_array", "is_numpy_namespace", + "is_pydata_sparse_array", "is_pydata_sparse_namespace", + "is_torch_array", "is_torch_namespace", "is_writeable_array", "size", + "to_device", ] diff --git a/src/array_api_extra/_lib/_utils/_compat.pyi b/src/array_api_extra/_lib/_utils/_compat.pyi index 1e81c984..95c6bc8a 100644 --- a/src/array_api_extra/_lib/_utils/_compat.pyi +++ b/src/array_api_extra/_lib/_utils/_compat.pyi @@ -4,20 +4,22 @@ from __future__ import annotations from types import ModuleType +from typing import Any, TypeGuard + +# TODO import from typing (requires Python >=3.13) +from typing_extensions import TypeIs from ._typing import Array, Device # pylint: disable=missing-class-docstring,unused-argument -class ArrayModule(ModuleType): - def device(self, x: Array, /) -> Device: ... - def array_namespace( - *xs: Array, + *xs: Array | complex | None, api_version: str | None = None, use_compat: bool | None = None, -) -> ArrayModule: ... +) -> ModuleType: ... def device(x: Array, /) -> Device: ... +def is_array_api_obj(x: object, /) -> TypeIs[Array]: ... def is_array_api_strict_namespace(xp: ModuleType, /) -> bool: ... def is_cupy_namespace(xp: ModuleType, /) -> bool: ... def is_dask_namespace(xp: ModuleType, /) -> bool: ... @@ -25,6 +27,19 @@ def is_jax_namespace(xp: ModuleType, /) -> bool: ... def is_numpy_namespace(xp: ModuleType, /) -> bool: ... def is_pydata_sparse_namespace(xp: ModuleType, /) -> bool: ... def is_torch_namespace(xp: ModuleType, /) -> bool: ... -def is_jax_array(x: object, /) -> bool: ... -def is_writeable_array(x: object, /) -> bool: ... +def is_cupy_array(x: object, /) -> TypeGuard[Array]: ... +def is_dask_array(x: object, /) -> TypeGuard[Array]: ... +def is_jax_array(x: object, /) -> TypeGuard[Array]: ... +def is_numpy_array(x: object, /) -> TypeGuard[Array]: ... +def is_pydata_sparse_array(x: object, /) -> TypeGuard[Array]: ... +def is_torch_array(x: object, /) -> TypeGuard[Array]: ... +def is_lazy_array(x: object, /) -> TypeGuard[Array]: ... +def is_writeable_array(x: object, /) -> TypeGuard[Array]: ... def size(x: Array, /) -> int | None: ... +def to_device( + x: Array, + device: Device, # pylint: disable=redefined-outer-name + /, + *, + stream: int | Any | None = None, +) -> Array: ... diff --git a/src/array_api_extra/_lib/_utils/_helpers.py b/src/array_api_extra/_lib/_utils/_helpers.py index 84efcc35..6dd94a38 100644 --- a/src/array_api_extra/_lib/_utils/_helpers.py +++ b/src/array_api_extra/_lib/_utils/_helpers.py @@ -1,14 +1,63 @@ """Helper functions used by `array_api_extra/_funcs.py`.""" -# https://github.com/scikit-learn/scikit-learn/pull/27910#issuecomment-2568023972 from __future__ import annotations +import io +import math +import pickle +import types +from collections.abc import Callable, Generator, Iterable, Iterator +from functools import wraps from types import ModuleType +from typing import ( + TYPE_CHECKING, + Any, + ClassVar, + Generic, + Literal, + ParamSpec, + TypeAlias, + TypeVar, + cast, +) from . import _compat -from ._typing import Array +from ._compat import ( + array_namespace, + is_array_api_obj, + is_dask_namespace, + is_jax_namespace, + is_numpy_array, + is_pydata_sparse_namespace, + is_torch_namespace, +) +from ._typing import Array, Device -__all__ = ["in1d", "mean"] +if TYPE_CHECKING: # pragma: no cover + # TODO import from typing (requires Python >=3.12 and >=3.13) + from typing_extensions import TypeIs, override +else: + + def override(func): + return func + + +P = ParamSpec("P") +T = TypeVar("T") + + +__all__ = [ + "asarrays", + "capabilities", + "eager_shape", + "in1d", + "is_python_scalar", + "jax_autojit", + "mean", + "meta_namespace", + "pickle_flatten", + "pickle_unflatten", +] def in1d( @@ -31,16 +80,19 @@ def in1d( https://github.com/numpy/numpy/blob/v1.26.0/numpy/lib/arraysetops.py#L524-L758 """ if xp is None: - xp = _compat.array_namespace(x1, x2) + xp = array_namespace(x1, x2) + + x1_shape = eager_shape(x1) + x2_shape = eager_shape(x2) # This code is run to make the code significantly faster - if x2.shape[0] < 10 * x1.shape[0] ** 0.145: + if x2_shape[0] < 10 * x1_shape[0] ** 0.145 and isinstance(x2, Iterable): if invert: - mask = xp.ones(x1.shape[0], dtype=xp.bool, device=_compat.device(x1)) + mask = xp.ones(x1_shape[0], dtype=xp.bool, device=_compat.device(x1)) for a in x2: mask &= x1 != a else: - mask = xp.zeros(x1.shape[0], dtype=xp.bool, device=_compat.device(x1)) + mask = xp.zeros(x1_shape[0], dtype=xp.bool, device=_compat.device(x1)) for a in x2: mask |= x1 == a return mask @@ -82,7 +134,7 @@ def mean( Complex mean, https://github.com/data-apis/array-api/issues/846. """ if xp is None: - xp = _compat.array_namespace(x) + xp = array_namespace(x) if xp.isdtype(x.dtype, "complex floating"): x_real = xp.real(x) @@ -91,3 +143,468 @@ def mean( mean_imag = xp.mean(x_imag, axis=axis, keepdims=keepdims) return mean_real + (mean_imag * xp.asarray(1j)) return xp.mean(x, axis=axis, keepdims=keepdims) + + +def is_python_scalar(x: object) -> TypeIs[complex]: # numpydoc ignore=PR01,RT01 + """Return True if `x` is a Python scalar, False otherwise.""" + # isinstance(x, float) returns True for np.float64 + # isinstance(x, complex) returns True for np.complex128 + # bool is a subclass of int + return isinstance(x, int | float | complex) and not is_numpy_array(x) + + +def asarrays( + a: Array | complex, + b: Array | complex, + xp: ModuleType, +) -> tuple[Array, Array]: + """ + Ensure both `a` and `b` are arrays. + + If `b` is a python scalar, it is converted to the same dtype as `a`, and vice versa. + + Behavior is not specified when mixing a Python ``float`` and an array with an + integer data type; this may give ``float32``, ``float64``, or raise an exception. + Behavior is implementation-specific. + + Similarly, behavior is not specified when mixing a Python ``complex`` and an array + with a real-valued data type; this may give ``complex64``, ``complex128``, or raise + an exception. Behavior is implementation-specific. + + Parameters + ---------- + a, b : Array | int | float | complex | bool + Input arrays or scalars. At least one must be an array. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + Array, Array + The input arrays, possibly converted to arrays if they were scalars. + + See Also + -------- + mixing-arrays-with-python-scalars : Array API specification for the behavior. + """ + a_scalar = is_python_scalar(a) + b_scalar = is_python_scalar(b) + if not a_scalar and not b_scalar: + # This includes misc. malformed input e.g. str + return a, b # type: ignore[return-value] + + swap = False + if a_scalar: + swap = True + b, a = a, b + + if is_array_api_obj(a): + # a is an Array API object + # b is a int | float | complex | bool + xa = a + + # https://data-apis.org/array-api/draft/API_specification/type_promotion.html#mixing-arrays-with-python-scalars + same_dtype = { + bool: "bool", + int: ("integral", "real floating", "complex floating"), + float: ("real floating", "complex floating"), + complex: "complex floating", + } + kind = same_dtype[type(cast(complex, b))] + if xp.isdtype(a.dtype, kind): + xb = xp.asarray(b, dtype=a.dtype) + else: + # Undefined behaviour. Let the function deal with it, if it can. + xb = xp.asarray(b) + + else: + # Neither a nor b are Array API objects. + # Note: we can only reach this point when one explicitly passes + # xp=xp to the calling function; otherwise we fail earlier on + # array_namespace(a, b). + xa, xb = xp.asarray(a), xp.asarray(b) + + return (xb, xa) if swap else (xa, xb) + + +def ndindex(*x: int) -> Generator[tuple[int, ...]]: + """ + Generate all N-dimensional indices for a given array shape. + + Given the shape of an array, an ndindex instance iterates over the N-dimensional + index of the array. At each iteration a tuple of indices is returned, the last + dimension is iterated over first. + + This has an identical API to numpy.ndindex. + + Parameters + ---------- + *x : int + The shape of the array. + """ + if not x: + yield () + return + for i in ndindex(*x[:-1]): + for j in range(x[-1]): + yield *i, j + + +def eager_shape(x: Array, /) -> tuple[int, ...]: + """ + Return shape of an array. Raise if shape is not fully defined. + + Parameters + ---------- + x : Array + Input array. + + Returns + ------- + tuple[int, ...] + Shape of the array. + """ + shape = x.shape + # Dask arrays uses non-standard NaN instead of None + if any(s is None or math.isnan(s) for s in shape): + msg = "Unsupported lazy shape" + raise TypeError(msg) + return cast(tuple[int, ...], shape) + + +def meta_namespace( + *arrays: Array | complex | None, xp: ModuleType | None = None +) -> ModuleType: + """ + Get the namespace of Dask chunks. + + On all other backends, just return the namespace of the arrays. + + Parameters + ---------- + *arrays : Array | int | float | complex | bool | None + Input arrays. + xp : array_namespace, optional + The standard-compatible namespace for the input arrays. Default: infer. + + Returns + ------- + array_namespace + If xp is Dask, the namespace of the Dask chunks; + otherwise, the namespace of the arrays. + """ + xp = array_namespace(*arrays) if xp is None else xp + if not is_dask_namespace(xp): + return xp + # Quietly skip scalars and None's + metas = [cast(Array | None, getattr(a, "_meta", None)) for a in arrays] + return array_namespace(*metas) + + +def capabilities( + xp: ModuleType, *, device: Device | None = None +) -> dict[str, int | None]: + """ + Return patched ``xp.__array_namespace_info__().capabilities()``. + + TODO this helper should be eventually removed once all the special cases + it handles are fixed in the respective backends. + + Parameters + ---------- + xp : array_namespace + The standard-compatible namespace. + device : Device, optional + The device to use. + + Returns + ------- + dict + Capabilities of the namespace. + """ + out = xp.__array_namespace_info__().capabilities() + if is_pydata_sparse_namespace(xp): + if out["boolean indexing"]: + # FIXME https://github.com/pydata/sparse/issues/876 + # boolean indexing is supported, but not when the index is a sparse array. + # boolean indexing by list or numpy array is not part of the Array API. + out = out.copy() + out["boolean indexing"] = False + elif is_jax_namespace(xp): + if out["boolean indexing"]: # pragma: no cover + # Backwards compatibility with jax <0.6.0 + # https://github.com/jax-ml/jax/issues/27418 + out = out.copy() + out["boolean indexing"] = False + elif is_torch_namespace(xp): + # FIXME https://github.com/data-apis/array-api/issues/945 + device = xp.get_default_device() if device is None else xp.device(device) + if device.type == "meta": # type: ignore[union-attr] # pyright: ignore[reportAttributeAccessIssue,reportOptionalMemberAccess] + out = out.copy() + out["boolean indexing"] = False + out["data-dependent shapes"] = False + + return out + + +_BASIC_PICKLED_TYPES = frozenset(( + bool, int, float, complex, str, bytes, bytearray, + list, tuple, dict, set, frozenset, range, slice, + types.NoneType, types.EllipsisType, +)) # fmt: skip +_BASIC_REST_TYPES = frozenset(( + type, types.BuiltinFunctionType, types.FunctionType, types.ModuleType +)) # fmt: skip + +FlattenRest: TypeAlias = tuple[object, ...] + + +def pickle_flatten( + obj: object, cls: type[T] | tuple[type[T], ...] +) -> tuple[list[T], FlattenRest]: + """ + Use the pickle machinery to extract objects out of an arbitrary container. + + Unlike regular ``pickle.dumps``, this function always succeeds. + + Parameters + ---------- + obj : object + The object to pickle. + cls : type | tuple[type, ...] + One or multiple classes to extract from the object. + The instances of these classes inside ``obj`` will not be pickled. + + Returns + ------- + instances : list[cls] + All instances of ``cls`` found inside ``obj`` (not pickled). + rest + Opaque object containing the pickled bytes plus all other objects where + ``__reduce__`` / ``__reduce_ex__`` is either not implemented or raised. + These are unpickleable objects, types, modules, and functions. + + This object is *typically* hashable save for fairly exotic objects + that are neither pickleable nor hashable. + + This object is pickleable if everything except ``instances`` was pickleable + in the input object. + + See Also + -------- + pickle_unflatten : Reverse function. + + Examples + -------- + >>> class A: + ... def __repr__(self): + ... return "" + >>> class NS: + ... def __repr__(self): + ... return "" + ... def __reduce__(self): + ... assert False, "not serializable" + >>> obj = {1: A(), 2: [A(), NS(), A()]} + >>> instances, rest = pickle_flatten(obj, A) + >>> instances + [, , ] + >>> pickle_unflatten(instances, rest) + {1: , 2: [, , ]} + + This can be also used to swap inner objects; the only constraint is that + the number of objects in and out must be the same: + + >>> pickle_unflatten(["foo", "bar", "baz"], rest) + {1: "foo", 2: ["bar", , "baz"]} + """ + instances: list[T] = [] + rest: list[object] = [] + + class Pickler(pickle.Pickler): # numpydoc ignore=GL08 + """ + Use the `pickle.Pickler.persistent_id` hook to extract objects. + """ + + @override + def persistent_id( + self, obj: object + ) -> Literal[0, 1, None]: # numpydoc ignore=GL08 + if isinstance(obj, cls): + instances.append(obj) # type: ignore[arg-type] + return 0 + + typ_ = type(obj) + if typ_ in _BASIC_PICKLED_TYPES: # No subclasses! + # If obj is a collection, recursively descend inside it + return None + if typ_ in _BASIC_REST_TYPES: + rest.append(obj) + return 1 + + try: + # Note: a class that defines __slots__ without defining __getstate__ + # cannot be pickled with __reduce__(), but can with __reduce_ex__(5) + _ = obj.__reduce_ex__(pickle.HIGHEST_PROTOCOL) + except Exception: # pylint: disable=broad-exception-caught + rest.append(obj) + return 1 + + # Object can be pickled. Let the Pickler recursively descend inside it. + return None + + f = io.BytesIO() + p = Pickler(f, protocol=pickle.HIGHEST_PROTOCOL) + p.dump(obj) + return instances, (f.getvalue(), *rest) + + +def pickle_unflatten(instances: Iterable[object], rest: FlattenRest) -> Any: + """ + Reverse of ``pickle_flatten``. + + Parameters + ---------- + instances : Iterable + Inner objects to be reinserted into the flattened container. + rest : FlattenRest + Extra bits, as returned by ``pickle_flatten``. + + Returns + ------- + object + The outer object originally passed to ``pickle_flatten`` after a + pickle->unpickle round-trip. + + See Also + -------- + pickle_flatten : Serializing function. + pickle.loads : Standard unpickle function. + + Notes + ----- + The `instances` iterable must yield at least the same number of elements as the ones + returned by ``pickle_flatten``, but the elements do not need to be the same objects + or even the same types of objects. Excess elements, if any, will be left untouched. + """ + iters = iter(instances), iter(rest) + pik = cast(bytes, next(iters[1])) + + class Unpickler(pickle.Unpickler): # numpydoc ignore=GL08 + """Mirror of the overridden Pickler in pickle_flatten.""" + + @override + def persistent_load(self, pid: Literal[0, 1]) -> object: # numpydoc ignore=GL08 + try: + return next(iters[pid]) + except StopIteration as e: + msg = "Not enough objects to unpickle" + raise ValueError(msg) from e + + f = io.BytesIO(pik) + return Unpickler(f).load() + + +class _AutoJITWrapper(Generic[T]): # numpydoc ignore=PR01 + """ + Helper of :func:`jax_autojit`. + + Wrap arbitrary inputs and outputs of the jitted function and + convert them to/from PyTrees. + """ + + _obj: Any + _is_iter: bool + _registered: ClassVar[bool] = False + __slots__: tuple[str, ...] = ("_is_iter", "_obj") + + def __init__(self, obj: T) -> None: # numpydoc ignore=GL08 + self._register() + if isinstance(obj, Iterator): + self._obj = list(obj) + self._is_iter = True + else: + self._obj = obj + self._is_iter = False + + @property + def obj(self) -> T: # numpydoc ignore=RT01 + """Return wrapped object.""" + return iter(self._obj) if self._is_iter else self._obj + + @classmethod + def _register(cls) -> None: # numpydoc ignore=SS06 + """ + Register upon first use instead of at import time, to avoid + globally importing JAX. + """ + if not cls._registered: + import jax + + jax.tree_util.register_pytree_node( + cls, + lambda instance: pickle_flatten(instance, jax.Array), # pyright: ignore[reportUnknownArgumentType] + lambda aux_data, children: pickle_unflatten(children, aux_data), # pyright: ignore[reportUnknownArgumentType] + ) + cls._registered = True + + +def jax_autojit( + func: Callable[P, T], +) -> Callable[P, T]: # numpydoc ignore=PR01,RT01,SS03 + """ + Wrap `func` with ``jax.jit``, with the following differences: + + - Python scalar arguments and return values are not automatically converted to + ``jax.Array`` objects. + - All non-array arguments are automatically treated as static. + Unlike ``jax.jit``, static arguments must be either hashable or serializable with + ``pickle``. + - Unlike ``jax.jit``, non-array arguments and return values are not limited to + tuple/list/dict, but can be any object serializable with ``pickle``. + - Automatically descend into non-array arguments and find ``jax.Array`` objects + inside them, then rebuild the arguments when entering `func`, swapping the JAX + concrete arrays with tracer objects. + - Automatically descend into non-array return values and find ``jax.Array`` objects + inside them, then rebuild them downstream of exiting the JIT, swapping the JAX + tracer objects with concrete arrays. + - Returned iterators are immediately completely consumed. + + See Also + -------- + jax.jit : JAX JIT compilation function. + + Notes + ----- + These are useful choices *for testing purposes only*, which is how this function is + intended to be used. The output of ``jax.jit`` is a C++ level callable, that + directly dispatches to the compiled kernel after the initial call. In comparison, + ``jax_autojit`` incurs a much higher dispatch time. + + Additionally, consider:: + + def f(x: Array, y: float, plus: bool) -> Array: + return x + y if plus else x - y + + j1 = jax.jit(f, static_argnames="plus") + j2 = jax_autojit(f) + + In the above example, ``j2`` requires a lot less setup to be tested effectively than + ``j1``, but on the flip side it means that it will be re-traced for every different + value of ``y``, which likely makes it not fit for purpose in production. + """ + import jax + + @jax.jit # type: ignore[misc] # pyright: ignore[reportUntypedFunctionDecorator] + def inner( # numpydoc ignore=GL08 + wargs: _AutoJITWrapper[Any], + ) -> _AutoJITWrapper[T]: + args, kwargs = wargs.obj + res = func(*args, **kwargs) # pyright: ignore[reportCallIssue] + return _AutoJITWrapper(res) + + @wraps(func) + def outer(*args: P.args, **kwargs: P.kwargs) -> T: # numpydoc ignore=GL08 + wargs = _AutoJITWrapper((args, kwargs)) + return inner(wargs).obj + + return outer diff --git a/src/array_api_extra/_lib/_utils/_typing.py b/src/array_api_extra/_lib/_utils/_typing.py index 83b51d04..8204be47 100644 --- a/src/array_api_extra/_lib/_utils/_typing.py +++ b/src/array_api_extra/_lib/_utils/_typing.py @@ -1,10 +1,10 @@ -"""Static typing helpers.""" +# numpydoc ignore=GL08 +# pylint: disable=missing-module-docstring,duplicate-code -from typing import Any +Array = object +DType = object +Device = object +GetIndex = object +SetIndex = object -# To be changed to a Protocol later (see data-apis/array-api#589) -Array = Any # type: ignore[no-any-explicit] -Device = Any # type: ignore[no-any-explicit] -Index = Any # type: ignore[no-any-explicit] - -__all__ = ["Array", "Device", "Index"] +__all__ = ["Array", "DType", "Device", "GetIndex", "SetIndex"] diff --git a/src/array_api_extra/_lib/_utils/_typing.pyi b/src/array_api_extra/_lib/_utils/_typing.pyi new file mode 100644 index 00000000..35c255fc --- /dev/null +++ b/src/array_api_extra/_lib/_utils/_typing.pyi @@ -0,0 +1,105 @@ +"""Static typing helpers.""" + +from __future__ import annotations + +from types import EllipsisType +from typing import Protocol, TypeAlias + +# TODO import from typing (requires Python >=3.12) +from typing_extensions import override + +# TODO: use array-api-typing once it is available + +class Array(Protocol): # pylint: disable=missing-class-docstring + # Unary operations + def __abs__(self) -> Array: ... + def __pos__(self) -> Array: ... + def __neg__(self) -> Array: ... + def __invert__(self) -> Array: ... + # Binary operations + def __add__(self, other: Array | complex, /) -> Array: ... + def __sub__(self, other: Array | complex, /) -> Array: ... + def __mul__(self, other: Array | complex, /) -> Array: ... + def __truediv__(self, other: Array | complex, /) -> Array: ... + def __floordiv__(self, other: Array | complex, /) -> Array: ... + def __mod__(self, other: Array | complex, /) -> Array: ... + def __pow__(self, other: Array | complex, /) -> Array: ... + def __matmul__(self, other: Array, /) -> Array: ... + def __and__(self, other: Array | int, /) -> Array: ... + def __or__(self, other: Array | int, /) -> Array: ... + def __xor__(self, other: Array | int, /) -> Array: ... + def __lshift__(self, other: Array | int, /) -> Array: ... + def __rshift__(self, other: Array | int, /) -> Array: ... + def __lt__(self, other: Array | complex, /) -> Array: ... + def __le__(self, other: Array | complex, /) -> Array: ... + def __gt__(self, other: Array | complex, /) -> Array: ... + def __ge__(self, other: Array | complex, /) -> Array: ... + @override + def __eq__(self, other: Array | complex, /) -> Array: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] + @override + def __ne__(self, other: Array | complex, /) -> Array: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] + # Reflected operations + def __radd__(self, other: Array | complex, /) -> Array: ... + def __rsub__(self, other: Array | complex, /) -> Array: ... + def __rmul__(self, other: Array | complex, /) -> Array: ... + def __rtruediv__(self, other: Array | complex, /) -> Array: ... + def __rfloordiv__(self, other: Array | complex, /) -> Array: ... + def __rmod__(self, other: Array | complex, /) -> Array: ... + def __rpow__(self, other: Array | complex, /) -> Array: ... + def __rmatmul__(self, other: Array, /) -> Array: ... + def __rand__(self, other: Array | int, /) -> Array: ... + def __ror__(self, other: Array | int, /) -> Array: ... + def __rxor__(self, other: Array | int, /) -> Array: ... + def __rlshift__(self, other: Array | int, /) -> Array: ... + def __rrshift__(self, other: Array | int, /) -> Array: ... + # Attributes + @property + def dtype(self) -> DType: ... + @property + def device(self) -> Device: ... + @property + def mT(self) -> Array: ... # pylint: disable=invalid-name + @property + def ndim(self) -> int: ... + @property + def shape(self) -> tuple[int | None, ...]: ... + @property + def size(self) -> int | None: ... + @property + def T(self) -> Array: ... # pylint: disable=invalid-name + # Collection operations (note: an Array does not have to be Sized or Iterable) + def __getitem__(self, key: GetIndex, /) -> Array: ... + def __setitem__(self, key: SetIndex, value: Array | complex, /) -> None: ... + # Materialization methods (may raise on lazy arrays) + def __bool__(self) -> bool: ... + def __complex__(self) -> complex: ... + def __float__(self) -> float: ... + def __index__(self) -> int: ... + def __int__(self) -> int: ... + + # Misc methods (frequently not implemented in Arrays wrapped by array-api-compat) + # def __array_namespace__(*, api_version: str | None) -> ModuleType: ... + # def __dlpack__( + # *, + # stream: int | Any | None = None, + # max_version: tuple[int, int] | None = None, + # dl_device: tuple[int, int] | None = None, # tuple[Enum, int] + # copy: bool | None = None, + # ) -> Any: ... + # def __dlpack_device__() -> tuple[int, int]: ... # tuple[Enum, int] + # def to_device(device: Device, /, *, stream: int | Any | None = None) -> Array: ... + +class DType(Protocol): # pylint: disable=missing-class-docstring + pass + +class Device(Protocol): # pylint: disable=missing-class-docstring + pass + +SetIndex: TypeAlias = ( + int | slice | EllipsisType | Array | tuple[int | slice | EllipsisType | Array, ...] +) +GetIndex: TypeAlias = ( + SetIndex | None | tuple[int | slice | EllipsisType | None | Array, ...] +) + +__all__ = ["Array", "DType", "Device", "GetIndex", "SetIndex"] diff --git a/src/array_api_extra/testing.py b/src/array_api_extra/testing.py new file mode 100644 index 00000000..d40fea1a --- /dev/null +++ b/src/array_api_extra/testing.py @@ -0,0 +1,415 @@ +""" +Public testing utilities. + +See also _lib._testing for additional private testing utilities. +""" + +from __future__ import annotations + +import contextlib +import enum +import warnings +from collections.abc import Callable, Generator, Iterator, Sequence +from functools import wraps +from types import ModuleType +from typing import TYPE_CHECKING, Any, ParamSpec, TypeVar, cast + +from ._lib._utils._compat import is_dask_namespace, is_jax_namespace +from ._lib._utils._helpers import jax_autojit, pickle_flatten, pickle_unflatten + +__all__ = ["lazy_xp_function", "patch_lazy_xp_functions"] + +if TYPE_CHECKING: # pragma: no cover + # TODO import override from typing (requires Python >=3.12) + import pytest + from dask.typing import Graph, Key, SchedulerGetCallable + from typing_extensions import override + +else: + # Sphinx hacks + SchedulerGetCallable = object + + def override(func): + return func + + +P = ParamSpec("P") +T = TypeVar("T") + +_ufuncs_tags: dict[object, dict[str, Any]] = {} + + +class Deprecated(enum.Enum): + """Unique type for deprecated parameters.""" + + DEPRECATED = 1 + + +DEPRECATED = Deprecated.DEPRECATED + + +def lazy_xp_function( + func: Callable[..., Any], + *, + allow_dask_compute: bool | int = False, + jax_jit: bool = True, + static_argnums: Deprecated = DEPRECATED, + static_argnames: Deprecated = DEPRECATED, +) -> None: # numpydoc ignore=GL07 + """ + Tag a function to be tested on lazy backends. + + Tag a function so that when any tests are executed with ``xp=jax.numpy`` the + function is replaced with a jitted version of itself, and when it is executed with + ``xp=dask.array`` the function will raise if it attempts to materialize the graph. + This will be later expanded to provide test coverage for other lazy backends. + + In order for the tag to be effective, the test or a fixture must call + :func:`patch_lazy_xp_functions`. + + Parameters + ---------- + func : callable + Function to be tested. + allow_dask_compute : bool | int, optional + Whether `func` is allowed to internally materialize the Dask graph, or maximum + number of times it is allowed to do so. This is typically triggered by + ``bool()``, ``float()``, or ``np.asarray()``. + + Set to 1 if you are aware that `func` converts the input parameters to NumPy and + want to let it do so at least for the time being, knowing that it is going to be + extremely detrimental for performance. + + If a test needs values higher than 1 to pass, it is a canary that the conversion + to NumPy/bool/float is happening multiple times, which translates to multiple + computations of the whole graph. Short of making the function fully lazy, you + should at least add explicit calls to ``np.asarray()`` early in the function. + *Note:* the counter of `allow_dask_compute` resets after each call to `func`, so + a test function that invokes `func` multiple times should still work with this + parameter set to 1. + + Set to True to allow `func` to materialize the graph an unlimited number + of times. + + Default: False, meaning that `func` must be fully lazy and never materialize the + graph. + jax_jit : bool, optional + Set to True to replace `func` with a smart variant of ``jax.jit(func)`` after + calling the :func:`patch_lazy_xp_functions` test helper with ``xp=jax.numpy``. + This is the default behaviour. + Set to False if `func` is only compatible with eager (non-jitted) JAX. + + Unlike with vanilla ``jax.jit``, all arguments and return types that are not JAX + arrays are treated as static; the function can accept and return arbitrary + wrappers around JAX arrays. This difference is because, in real life, most users + won't wrap the function directly with ``jax.jit`` but rather they will use it + within their own code, which is itself then wrapped by ``jax.jit``, and + internally consume the function's outputs. + + In other words, the pattern that is being tested is:: + + >>> @jax.jit + ... def user_func(x): + ... y = user_prepares_inputs(x) + ... z = func(y, some_static_arg=True) + ... return user_consumes(z) + + Default: True. + static_argnums : + Deprecated; ignored + static_argnames : + Deprecated; ignored + + See Also + -------- + patch_lazy_xp_functions : Companion function to call from the test or fixture. + jax.jit : JAX function to compile a function for performance. + + Examples + -------- + In ``test_mymodule.py``:: + + from array_api_extra.testing import lazy_xp_function from mymodule import myfunc + + lazy_xp_function(myfunc) + + def test_myfunc(xp): + a = xp.asarray([1, 2]) + # When xp=jax.numpy, this is similar to `b = jax.jit(myfunc)(a)` + # When xp=dask.array, crash on compute() or persist() + b = myfunc(a) + + Notes + ----- + In order for this tag to be effective, the test function must be imported into the + test module globals without its namespace; alternatively its namespace must be + declared in a ``lazy_xp_modules`` list in the test module globals. + + Example 1:: + + from mymodule import myfunc + + lazy_xp_function(myfunc) + + def test_myfunc(xp): + x = myfunc(xp.asarray([1, 2])) + + Example 2:: + + import mymodule + + lazy_xp_modules = [mymodule] + lazy_xp_function(mymodule.myfunc) + + def test_myfunc(xp): + x = mymodule.myfunc(xp.asarray([1, 2])) + + A test function can circumvent this monkey-patching system by using a namespace + outside of the two above patterns. You need to sanitize your code to make sure this + only happens intentionally. + + Example 1:: + + import mymodule + from mymodule import myfunc + + lazy_xp_function(myfunc) + + def test_myfunc(xp): + a = xp.asarray([1, 2]) + b = myfunc(a) # This is wrapped when xp=jax.numpy or xp=dask.array + c = mymodule.myfunc(a) # This is not + + Example 2:: + + import mymodule + + class naked: + myfunc = mymodule.myfunc + + lazy_xp_modules = [mymodule] + lazy_xp_function(mymodule.myfunc) + + def test_myfunc(xp): + a = xp.asarray([1, 2]) + b = mymodule.myfunc(a) # This is wrapped when xp=jax.numpy or xp=dask.array + c = naked.myfunc(a) # This is not + """ + if static_argnums is not DEPRECATED or static_argnames is not DEPRECATED: + warnings.warn( + ( + "The `static_argnums` and `static_argnames` parameters are deprecated " + "and ignored. They will be removed in a future version." + ), + DeprecationWarning, + stacklevel=2, + ) + tags = { + "allow_dask_compute": allow_dask_compute, + "jax_jit": jax_jit, + } + + try: + func._lazy_xp_function = tags # type: ignore[attr-defined] # pylint: disable=protected-access # pyright: ignore[reportFunctionMemberAccess] + except AttributeError: # @cython.vectorize + _ufuncs_tags[func] = tags + + +def patch_lazy_xp_functions( + request: pytest.FixtureRequest, + monkeypatch: pytest.MonkeyPatch | None = None, + *, + xp: ModuleType, +) -> contextlib.AbstractContextManager[None]: + """ + Test lazy execution of functions tagged with :func:`lazy_xp_function`. + + If ``xp==jax.numpy``, search for all functions which have been tagged with + :func:`lazy_xp_function` in the globals of the module that defines the current test, + as well as in the ``lazy_xp_modules`` list in the globals of the same module, + and wrap them with :func:`jax.jit`. Unwrap them at the end of the test. + + If ``xp==dask.array``, wrap the functions with a decorator that disables + ``compute()`` and ``persist()`` and ensures that exceptions and warnings are raised + eagerly. + + This function should be typically called by your library's `xp` fixture that runs + tests on multiple backends:: + + @pytest.fixture(params=[ + numpy, + array_api_strict, + pytest.param(jax.numpy, marks=pytest.mark.thread_unsafe), + pytest.param(dask.array, marks=pytest.mark.thread_unsafe), + ]) + def xp(request): + with patch_lazy_xp_functions(request, xp=request.param): + yield request.param + + but it can be otherwise be called by the test itself too. + + Parameters + ---------- + request : pytest.FixtureRequest + Pytest fixture, as acquired by the test itself or by one of its fixtures. + monkeypatch : pytest.MonkeyPatch + Deprecated + xp : array_namespace + Array namespace to be tested. + + See Also + -------- + lazy_xp_function : Tag a function to be tested on lazy backends. + pytest.FixtureRequest : `request` test function parameter. + + Notes + ----- + This context manager monkey-patches modules and as such is thread unsafe + on Dask and JAX. If you run your test suite with + `pytest-run-parallel `_, + you should mark these backends with ``@pytest.mark.thread_unsafe``, as shown in + the example above. + """ + mod = cast(ModuleType, request.module) + mods = [mod, *cast(list[ModuleType], getattr(mod, "lazy_xp_modules", []))] + + to_revert: list[tuple[ModuleType, str, object]] = [] + + def temp_setattr(mod: ModuleType, name: str, func: object) -> None: + """ + Variant of monkeypatch.setattr, which allows monkey-patching only selected + parameters of a test so that pytest-run-parallel can run on the remainder. + """ + assert hasattr(mod, name) + to_revert.append((mod, name, getattr(mod, name))) + setattr(mod, name, func) + + if monkeypatch is not None: + warnings.warn( + ( + "The `monkeypatch` parameter is deprecated and will be removed in a " + "future version. " + "Use `patch_lazy_xp_function` as a context manager instead." + ), + DeprecationWarning, + stacklevel=2, + ) + # Enable using patch_lazy_xp_function not as a context manager + temp_setattr = monkeypatch.setattr # type: ignore[assignment] # pyright: ignore[reportAssignmentType] + + def iter_tagged() -> Iterator[ + tuple[ModuleType, str, Callable[..., Any], dict[str, Any]] + ]: + for mod in mods: + for name, func in mod.__dict__.items(): + tags: dict[str, Any] | None = None + with contextlib.suppress(AttributeError): + tags = func._lazy_xp_function # pylint: disable=protected-access + if tags is None: + with contextlib.suppress(KeyError, TypeError): + tags = _ufuncs_tags[func] + if tags is not None: + yield mod, name, func, tags + + if is_dask_namespace(xp): + for mod, name, func, tags in iter_tagged(): + n = tags["allow_dask_compute"] + if n is True: + n = 1_000_000 + elif n is False: + n = 0 + wrapped = _dask_wrap(func, n) + temp_setattr(mod, name, wrapped) + + elif is_jax_namespace(xp): + for mod, name, func, tags in iter_tagged(): + if tags["jax_jit"]: + wrapped = jax_autojit(func) + temp_setattr(mod, name, wrapped) + + # We can't just decorate patch_lazy_xp_functions with + # @contextlib.contextmanager because it would not work with the + # deprecated monkeypatch when not used as a context manager. + @contextlib.contextmanager + def revert_on_exit() -> Generator[None]: + try: + yield + finally: + for mod, name, orig_func in to_revert: + setattr(mod, name, orig_func) + + return revert_on_exit() + + +class CountingDaskScheduler(SchedulerGetCallable): + """ + Dask scheduler that counts how many times `dask.compute` is called. + + If the number of times exceeds 'max_count', it raises an error. + This is a wrapper around Dask's own 'synchronous' scheduler. + + Parameters + ---------- + max_count : int + Maximum number of allowed calls to `dask.compute`. + msg : str + Assertion to raise when the count exceeds `max_count`. + """ + + count: int + max_count: int + msg: str + + def __init__(self, max_count: int, msg: str): # numpydoc ignore=GL08 + self.count = 0 + self.max_count = max_count + self.msg = msg + + @override + def __call__( + self, dsk: Graph, keys: Sequence[Key] | Key, **kwargs: Any + ) -> Any: # numpydoc ignore=GL08 + import dask + + self.count += 1 + # This should yield a nice traceback to the + # offending line in the user's code + assert self.count <= self.max_count, self.msg + + return dask.get(dsk, keys, **kwargs) # type: ignore[attr-defined] # pyright: ignore[reportPrivateImportUsage] + + +def _dask_wrap( + func: Callable[P, T], n: int +) -> Callable[P, T]: # numpydoc ignore=PR01,RT01 + """ + Wrap `func` to raise if it attempts to call `dask.compute` more than `n` times. + + After the function returns, materialize the graph in order to re-raise exceptions. + """ + import dask + import dask.array as da + + func_name = getattr(func, "__name__", str(func)) + n_str = f"only up to {n}" if n else "no" + msg = ( + f"Called `dask.compute()` or `dask.persist()` {n + 1} times, " + f"but {n_str} calls are allowed. Set " + f"`lazy_xp_function({func_name}, allow_dask_compute={n + 1})` " + "to allow for more (but note that this will harm performance). " + ) + + @wraps(func) + def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: # numpydoc ignore=GL08 + scheduler = CountingDaskScheduler(n, msg) + with dask.config.set({"scheduler": scheduler}): # pyright: ignore[reportPrivateImportUsage] + out = func(*args, **kwargs) + + # Block until the graph materializes and reraise exceptions. This allows + # `pytest.raises` and `pytest.warns` to work as expected. Note that this would + # not work on scheduler='distributed', as it would not block. + arrays, rest = pickle_flatten(out, da.Array) + arrays = dask.persist(arrays, scheduler="threads")[0] # type: ignore[attr-defined,no-untyped-call] # pyright: ignore[reportPrivateImportUsage] + return pickle_unflatten(arrays, rest) # pyright: ignore[reportUnknownArgumentType] + + return wrapper diff --git a/tests/conftest.py b/tests/conftest.py index c588d802..df703b97 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,25 +1,27 @@ """Pytest fixtures.""" -from collections.abc import Callable -from functools import wraps +from collections.abc import Callable, Generator +from functools import partial, wraps from types import ModuleType from typing import ParamSpec, TypeVar, cast import numpy as np import pytest -from array_api_extra._lib import Backend +from array_api_extra._lib._backends import Backend +from array_api_extra._lib._testing import xfail from array_api_extra._lib._utils._compat import array_namespace from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._typing import Device +from array_api_extra.testing import patch_lazy_xp_functions T = TypeVar("T") P = ParamSpec("P") -np_compat = array_namespace(np.empty(0)) +np_compat = array_namespace(np.empty(0)) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] -@pytest.fixture(params=tuple(Backend)) +@pytest.fixture(params=[b.pytest_param() for b in Backend]) def library(request: pytest.FixtureRequest) -> Backend: # numpydoc ignore=PR01,RT03 """ Parameterized fixture that iterates on all libraries. @@ -30,14 +32,29 @@ def library(request: pytest.FixtureRequest) -> Backend: # numpydoc ignore=PR01, """ elem = cast(Backend, request.param) - for marker in request.node.iter_markers("skip_xp_backend"): - skip_library = marker.kwargs.get("library") or marker.args[0] # type: ignore[no-untyped-usage] - if not isinstance(skip_library, Backend): - msg = "argument of skip_xp_backend must be a Backend enum" - raise TypeError(msg) - if skip_library == elem: - reason = cast(str, marker.kwargs.get("reason", "skip_xp_backend")) - pytest.skip(reason=reason) + for marker_name, skip_or_xfail, allow_kwargs in ( + ("skip_xp_backend", pytest.skip, {"reason"}), + ("xfail_xp_backend", partial(xfail, request), {"reason", "strict"}), + ): + for marker in request.node.iter_markers(marker_name): + if len(marker.args) != 1: + msg = f"Expected exactly one positional argument; got {marker.args}" + raise TypeError(msg) + if not isinstance(marker.args[0], Backend): + msg = f"Argument of {marker_name} must be a Backend enum" + raise TypeError(msg) + if invalid_kwargs := set(marker.kwargs) - allow_kwargs: + msg = f"Unexpected kwarg(s): {invalid_kwargs}" + raise TypeError(msg) + + library: Backend = marker.args[0] + reason: str | None = marker.kwargs.get("reason", None) + strict: bool | None = marker.kwargs.get("strict", None) + + if library == elem: + reason = f"{library}: {reason}" if reason else str(library) + kwargs = {"strict": strict} if strict is not None else {} + skip_or_xfail(reason=reason, **kwargs) return elem @@ -46,7 +63,7 @@ class NumPyReadOnly: """ Variant of array_api_compat.numpy producing read-only arrays. - Read-only numpy arrays fail on `__iadd__` etc., whereas read-only libraries such as + Read-only NumPy arrays fail on `__iadd__` etc., whereas read-only libraries such as JAX and Sparse simply don't define those methods, which makes calls to `+=` fall back to `__add__`. @@ -81,7 +98,7 @@ def as_readonly(o: T) -> T: # numpydoc ignore=PR01,RT01 # This works with namedtuples too if isinstance(o, tuple | list): - return type(o)(*(as_readonly(i) for i in o)) # type: ignore[arg-type,return-value] # pyright: ignore[reportArgumentType,reportUnknownArgumentType] + return type(o)(*(as_readonly(i) for i in o)) # type: ignore[arg-type,return-value] # pyright: ignore[reportArgumentType] return o @@ -93,7 +110,9 @@ def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: # numpydoc ignore=GL08 @pytest.fixture -def xp(library: Backend) -> ModuleType: # numpydoc ignore=PR01,RT03 +def xp( + library: Backend, request: pytest.FixtureRequest +) -> Generator[ModuleType]: # numpydoc ignore=PR01,RT03 """ Parameterized fixture that iterates on all libraries. @@ -102,15 +121,99 @@ def xp(library: Backend) -> ModuleType: # numpydoc ignore=PR01,RT03 The current array namespace. """ if library == Backend.NUMPY_READONLY: - return NumPyReadOnly() # type: ignore[return-value] # pyright: ignore[reportReturnType] - xp = pytest.importorskip(library.value) - if library == Backend.JAX_NUMPY: - import jax # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] - - jax.config.update("jax_enable_x64", True) + yield NumPyReadOnly() # type: ignore[misc] # pyright: ignore[reportReturnType] + return + xp = pytest.importorskip(library.modname) # Possibly wrap module with array_api_compat - return array_namespace(xp.empty(0)) + xp = array_namespace(xp.empty(0)) + + if library == Backend.ARRAY_API_STRICTEST: + with xp.ArrayAPIStrictFlags( + boolean_indexing=False, + data_dependent_shapes=False, + # writeable=False, # TODO implement in array-api-strict + # lazy=True, # TODO implement in array-api-strict + enabled_extensions=(), + ): + yield xp + return + + if library.like(Backend.JAX): + _setup_jax(library) + elif library.like(Backend.TORCH): + _setup_torch(library) + + # On Dask and JAX, monkey-patch all functions tagged by `lazy_xp_function` + # in the global scope of the module containing the test function. + with patch_lazy_xp_functions(request, xp=xp): + yield xp + + +def _setup_jax(library: Backend) -> None: + import jax + + # suppress unused-ignore to run mypy in -e lint as well as -e dev + jax.config.update("jax_enable_x64", True) # type: ignore[no-untyped-call,unused-ignore] + + if library == Backend.JAX_GPU: + try: + device = jax.devices("cuda")[0] + except RuntimeError: + pytest.skip("no CUDA device available") + else: + device = jax.devices("cpu")[0] + jax.config.update("jax_default_device", device) + + +def _setup_torch(library: Backend) -> None: + import torch + + # This is already the default, but some tests or env variables may change it. + # TODO test both float32 and float64, like in scipy. + torch.set_default_dtype(torch.float32) + + if library == Backend.TORCH_GPU: + import torch.cuda + + if not torch.cuda.is_available(): + pytest.skip("no CUDA device available") + torch.set_default_device("cuda") + else: + assert library == Backend.TORCH + torch.set_default_device("cpu") + + +# Can select the test with `pytest -k dask` +@pytest.fixture(params=[Backend.DASK.pytest_param()]) +def da( + request: pytest.FixtureRequest, +) -> Generator[ModuleType]: # numpydoc ignore=PR01,RT01 + """Variant of the `xp` fixture that only yields dask.array.""" + xp = pytest.importorskip("dask.array") + xp = array_namespace(xp.empty(0)) + with patch_lazy_xp_functions(request, xp=xp): + yield xp + + +@pytest.fixture(params=[Backend.JAX.pytest_param(), Backend.JAX_GPU.pytest_param()]) +def jnp( + request: pytest.FixtureRequest, +) -> Generator[ModuleType]: # numpydoc ignore=PR01,RT01 + """Variant of the `xp` fixture that only yields jax.numpy.""" + xp = pytest.importorskip("jax.numpy") + _setup_jax(request.param) + with patch_lazy_xp_functions(request, xp=xp): + yield xp + + +@pytest.fixture(params=[Backend.TORCH, Backend.TORCH_GPU]) +def torch(request: pytest.FixtureRequest) -> ModuleType: # numpydoc ignore=PR01,RT01 + """Variant of the `xp` fixture that only yields torch.""" + xp = pytest.importorskip("torch") + xp = array_namespace(xp.empty(0)) + _setup_torch(request.param) + return xp @pytest.fixture @@ -123,7 +226,17 @@ def device( Where possible, return a device that is not the default one. """ if library == Backend.ARRAY_API_STRICT: - d = xp.Device("device1") - assert get_device(xp.empty(0)) != d - return d + return xp.Device("device1") + if library == Backend.TORCH: + return xp.device("meta") + if library == Backend.TORCH_GPU: + return xp.device("cpu") return get_device(xp.empty(0)) + + +@pytest.fixture +def infinity(library: Backend) -> float: + """Retrieve the positive infinity value for the given backend.""" + if library in (Backend.TORCH, Backend.TORCH_GPU): + return 3.4028235e38 + return 1.7976931348623157e308 diff --git a/tests/test_at.py b/tests/test_at.py index 749c1b55..9558f7b8 100644 --- a/tests/test_at.py +++ b/tests/test_at.py @@ -1,3 +1,4 @@ +import math from collections.abc import Callable, Generator from contextlib import contextmanager from types import ModuleType @@ -5,20 +6,51 @@ import numpy as np import pytest -from array_api_compat import ( # type: ignore[import-untyped] # pyright: ignore[reportMissingTypeStubs] - array_namespace, - is_writeable_array, -) from array_api_extra import at -from array_api_extra._lib import Backend -from array_api_extra._lib._funcs import _AtOp +from array_api_extra._lib._at import _AtOp +from array_api_extra._lib._backends import Backend from array_api_extra._lib._testing import xp_assert_equal -from array_api_extra._lib._utils._typing import Array +from array_api_extra._lib._utils._compat import array_namespace, is_writeable_array +from array_api_extra._lib._utils._compat import device as get_device +from array_api_extra._lib._utils._typing import Array, Device, SetIndex +from array_api_extra.testing import lazy_xp_function + +pytestmark = [ + pytest.mark.skip_xp_backend( + Backend.SPARSE, reason="read-only backend without .at support" + ), + pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="boolean indexing"), +] + + +def at_op( + x: Array, + idx: SetIndex, + op: _AtOp, + y: Array | object, + copy: bool | None = None, + xp: ModuleType | None = None, +) -> Array: + """ + Wrapper around at(x, idx).op(y, copy=copy, xp=xp). + + This is a hack to allow wrapping `at()` with `lazy_xp_function`. + For clarity, at() itself works inside jax.jit without hacks; this is + just a workaround for when one wants to apply jax.jit to `at()` directly, + which is not a common use case. + """ + meth = cast(Callable[..., Array], getattr(at(x, idx), op.value)) + return meth(y, copy=copy, xp=xp) + + +lazy_xp_function(at_op) @contextmanager -def assert_copy(array: Array, copy: bool | None) -> Generator[None, None, None]: +def assert_copy( + array: Array, copy: bool | None, expect_copy: bool | None = None +) -> Generator[None, None, None]: if copy is False and not is_writeable_array(array): with pytest.raises((TypeError, ValueError)): yield @@ -28,25 +60,23 @@ def assert_copy(array: Array, copy: bool | None) -> Generator[None, None, None]: array_orig = xp.asarray(array, copy=True) yield - if copy is None: - copy = not is_writeable_array(array) - xp_assert_equal(xp.all(array == array_orig), xp.asarray(copy)) + if expect_copy is None: + expect_copy = copy + if expect_copy: + # Original has not been modified + xp_assert_equal(array, array_orig) + elif expect_copy is False: + # Original has been modified + with pytest.raises(AssertionError): + xp_assert_equal(array, array_orig) + # Test nothing for copy=None. Dask changes behaviour depending on + # whether it's a special case of a bool mask with scalar RHS or not. -@pytest.mark.skip_xp_backend( - Backend.SPARSE, reason="read-only backend without .at support" -) -@pytest.mark.parametrize( - ("kwargs", "expect_copy"), - [ - ({"copy": True}, True), - ({"copy": False}, False), - ({"copy": None}, None), # Behavior is backend-specific - ({}, None), # Test that the copy parameter defaults to None - ], -) + +@pytest.mark.parametrize("copy", [False, True, None]) @pytest.mark.parametrize( - ("op", "arg", "expect"), + ("op", "y", "expect_list"), [ (_AtOp.SET, 40.0, [10.0, 40.0, 40.0]), (_AtOp.ADD, 40.0, [10.0, 60.0, 70.0]), @@ -58,65 +88,143 @@ def assert_copy(array: Array, copy: bool | None) -> Generator[None, None, None]: (_AtOp.MAX, 25.0, [10.0, 25.0, 30.0]), ], ) +@pytest.mark.parametrize( + ("bool_mask", "x_ndim", "y_ndim"), + [ + (False, 1, 0), + (False, 1, 1), + (True, 1, 0), # Uses xp.where(idx, y, x) on JAX and Dask + pytest.param( + *(True, 1, 1), + marks=( + pytest.mark.xfail_xp_backend( + Backend.JAX, + reason="bool mask update with shaped rhs", + strict=False, # test passes when copy=False + ), + pytest.mark.xfail_xp_backend( + Backend.JAX_GPU, + reason="bool mask update with shaped rhs", + strict=False, # test passes when copy=False + ), + pytest.mark.xfail_xp_backend( + Backend.DASK, reason="bool mask update with shaped rhs" + ), + ), + ), + (False, 0, 0), + (True, 0, 0), + ], +) def test_update_ops( xp: ModuleType, - kwargs: dict[str, bool | None], - expect_copy: bool | None, + copy: bool | None, op: _AtOp, - arg: float, - expect: list[float], + y: float, + expect_list: list[float], + bool_mask: bool, + x_ndim: int, + y_ndim: int, ): - array = xp.asarray([10.0, 20.0, 30.0]) + if x_ndim == 1: + x = xp.asarray([10.0, 20.0, 30.0]) + idx = xp.asarray([False, True, True]) if bool_mask else slice(1, None) + expect: list[float] | float = expect_list + else: + idx = xp.asarray(True) if bool_mask else () + # Pick an element that does change with the operation + if op is _AtOp.MIN: + x = xp.asarray(30.0) + expect = expect_list[2] + else: + x = xp.asarray(20.0) + expect = expect_list[1] - with assert_copy(array, expect_copy): - func = cast(Callable[..., Array], getattr(at(array)[1:], op.value)) # type: ignore[no-any-explicit] - y = func(arg, **kwargs) - assert isinstance(y, type(array)) - xp_assert_equal(y, xp.asarray(expect)) + if y_ndim == 1: + y = xp.asarray([y, y]) + + with assert_copy(x, copy): + z = at_op(x, idx, op, y, copy=copy) + assert isinstance(z, type(x)) + xp_assert_equal(z, xp.asarray(expect)) + + +@pytest.mark.parametrize("op", list(_AtOp)) +def test_copy_default(xp: ModuleType, library: Backend, op: _AtOp): + """ + Test that the default copy behaviour is False for writeable arrays + and True for read-only ones. + """ + x = xp.asarray([1.0, 10.0, 20.0]) + expect_copy = not is_writeable_array(x) + meth = cast(Callable[..., Array], getattr(at(x)[:2], op.value)) + with assert_copy(x, None, expect_copy): + _ = meth(2.0) + + x = xp.asarray([1.0, 10.0, 20.0]) + # Dask's default copy value is True for bool masks, + # even if the arrays are writeable. + expect_copy = not is_writeable_array(x) or library is Backend.DASK + idx = xp.asarray([True, True, False]) + meth = cast(Callable[..., Array], getattr(at(x, idx), op.value)) + with assert_copy(x, None, expect_copy): + _ = meth(2.0) def test_copy_invalid(): a = np.asarray([1, 2, 3]) with pytest.raises(ValueError, match="copy"): - at(a, 0).set(4, copy="invalid") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + _ = at(a, 0).set(4, copy="invalid") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] def test_xp(): - a = np.asarray([1, 2, 3]) - at(a, 0).set(4, xp=np) - at(a, 0).add(4, xp=np) - at(a, 0).subtract(4, xp=np) - at(a, 0).multiply(4, xp=np) - at(a, 0).divide(4, xp=np) - at(a, 0).power(4, xp=np) - at(a, 0).min(4, xp=np) - at(a, 0).max(4, xp=np) + a = cast(Array, np.asarray([1, 2, 3])) # pyright: ignore[reportInvalidCast] + _ = at(a, 0).set(4, xp=np) + _ = at(a, 0).add(4, xp=np) + _ = at(a, 0).subtract(4, xp=np) + _ = at(a, 0).multiply(4, xp=np) + _ = at(a, 0).divide(4, xp=np) + _ = at(a, 0).power(4, xp=np) + _ = at(a, 0).min(4, xp=np) + _ = at(a, 0).max(4, xp=np) def test_alternate_index_syntax(): - a = np.asarray([1, 2, 3]) - xp_assert_equal(at(a, 0).set(4, copy=True), np.asarray([4, 2, 3])) - xp_assert_equal(at(a)[0].set(4, copy=True), np.asarray([4, 2, 3])) + xp = cast(ModuleType, np) # type: ignore[redundant-cast] # pyright: ignore[reportInvalidCast] + a = cast(Array, xp.asarray([1, 2, 3])) + xp_assert_equal(at(a, 0).set(4, copy=True), xp.asarray([4, 2, 3])) + xp_assert_equal(at(a)[0].set(4, copy=True), xp.asarray([4, 2, 3])) a_at = at(a) - xp_assert_equal(a_at[0].add(1, copy=True), np.asarray([2, 2, 3])) - xp_assert_equal(a_at[1].add(2, copy=True), np.asarray([1, 4, 3])) + xp_assert_equal(a_at[0].add(1, copy=True), xp.asarray([2, 2, 3])) + xp_assert_equal(a_at[1].add(2, copy=True), xp.asarray([1, 4, 3])) with pytest.raises(ValueError, match="Index"): - at(a).set(4) + _ = at(a).set(4) with pytest.raises(ValueError, match="Index"): - at(a, 0)[0].set(4) + _ = at(a, 0)[0].set(4) -@pytest.mark.parametrize("copy", [True, False]) -@pytest.mark.parametrize( - "op", [_AtOp.ADD, _AtOp.SUBTRACT, _AtOp.MULTIPLY, _AtOp.DIVIDE, _AtOp.POWER] -) -def test_iops_incompatible_dtype(op: _AtOp, copy: bool): +@pytest.mark.parametrize("copy", [True, None]) +@pytest.mark.parametrize("bool_mask", [False, True]) +@pytest.mark.parametrize("op", list(_AtOp)) +def test_incompatible_dtype( + xp: ModuleType, + library: Backend, + op: _AtOp, + copy: bool | None, + bool_mask: bool, +): """Test that at() replicates the backend's behaviour for in-place operations with incompatible dtypes. - Note: + Behavior is backend-specific, but only two behaviors are allowed: + 1. raise an exception, or + 2. return the same dtype as x, disregarding y.dtype (no broadcasting). + + Note that __i__ and ____ behave differently, and we want to + replicate the behavior of __i__: + >>> a = np.asarray([1, 2, 3]) >>> a / 1.5 array([0. , 0.66666667, 1.33333333]) @@ -124,7 +232,108 @@ def test_iops_incompatible_dtype(op: _AtOp, copy: bool): UFuncTypeError: Cannot cast ufunc 'divide' output from dtype('float64') to dtype('int64') with casting rule 'same_kind' """ - a = np.asarray([2, 4]) - func = cast(Callable[..., Array], getattr(at(a)[:], op.value)) # type: ignore[no-any-explicit] - with pytest.raises(TypeError, match="Cannot cast ufunc"): - func(1.1, copy=copy) + x = xp.asarray([2, 4]) + idx = xp.asarray([True, False]) if bool_mask else slice(None) + z = None + + if library.like(Backend.JAX): + if bool_mask: + z = at_op(x, idx, op, 1.1, copy=copy) + else: + with pytest.warns(FutureWarning, match="cannot safely cast"): + z = at_op(x, idx, op, 1.1, copy=copy) + + elif library.like(Backend.DASK): + z = at_op(x, idx, op, 1.1, copy=copy) + + elif library.like(Backend.ARRAY_API_STRICT): + with pytest.raises(Exception, match=r"cast|promote|dtype"): + _ = at_op(x, idx, op, 1.1, copy=copy) + + elif op in (_AtOp.SET, _AtOp.MIN, _AtOp.MAX): + # There is no __i__ version of min/max. + # libraries other than array-api-strict are happy with + # int[:] = float + # int[:] = min(int[:], float) + # int[:] = max(int[:], float) + z = at_op(x, idx, op, 1.1, copy=copy) + + else: + with pytest.raises(Exception, match=r"cast|promote|dtype"): + _ = at_op(x, idx, op, 1.1, copy=copy) + + assert z is None or z.dtype == x.dtype + + +def test_bool_mask_nd(xp: ModuleType): + x = xp.asarray([[1, 2, 3], [4, 5, 6]]) + idx = xp.asarray([[True, False, False], [False, True, True]]) + z = at_op(x, idx, _AtOp.SET, 0) + xp_assert_equal(z, xp.asarray([[0, 2, 3], [4, 0, 0]])) + + +@pytest.mark.parametrize("bool_mask", [False, True]) +def test_no_inf_warnings(xp: ModuleType, bool_mask: bool): + x = xp.asarray([math.inf, 1.0, 2.0]) + idx = ~xp.isinf(x) if bool_mask else slice(1, None) + # inf - inf -> nan with a warning + z = at_op(x, idx, _AtOp.SUBTRACT, math.inf) + xp_assert_equal(z, xp.asarray([math.inf, -math.inf, -math.inf])) + + +@pytest.mark.parametrize( + "copy", + [ + None, + pytest.param( + False, + marks=[ + pytest.mark.skip_xp_backend( + Backend.NUMPY, reason="np.generic is read-only" + ), + pytest.mark.skip_xp_backend( + Backend.NUMPY_READONLY, reason="read-only backend" + ), + pytest.mark.skip_xp_backend(Backend.JAX, reason="read-only backend"), + pytest.mark.skip_xp_backend( + Backend.JAX_GPU, reason="read-only backend" + ), + pytest.mark.skip_xp_backend(Backend.SPARSE, reason="read-only backend"), + ], + ), + ], +) +@pytest.mark.parametrize("bool_mask", [False, True]) +def test_gh134(xp: ModuleType, bool_mask: bool, copy: bool | None): + """ + Test that xpx.at doesn't encroach in a bug of dask.array.Array.__setitem__, which + blindly assumes that chunk contents are writeable np.ndarray objects: + + https://github.com/dask/dask/issues/11722 + + In other words: when special-casing bool masks for Dask, unless the user explicitly + asks for copy=False, do not needlessly write back to the input. + """ + x = xp.zeros(1) + + # In NumPy, we have a writeable np.ndarray in input and a read-only np.generic in + # output. As both are Arrays, this behaviour is Array API compliant. + # In Dask, we have a writeable da.Array on both sides, and if you call __setitem__ + # on it all seems fine, but when you compute() your graph is corrupted. + y = x[0] + + idx = xp.asarray(True) if bool_mask else () + z = at_op(y, idx, _AtOp.SET, 1, copy=copy) + xp_assert_equal(z, xp.asarray(1, dtype=x.dtype)) + + +def test_device(xp: ModuleType, device: Device): + x = xp.asarray([1, 2, 3], device=device) + + y = xp.asarray([4, 5], device=device) + z = at(x)[:2].set(y) + assert get_device(z) == get_device(x) + + idx = xp.asarray([True, False, True], device=device) + z = at(x)[idx].set(4) + assert get_device(z) == get_device(x) diff --git a/tests/test_funcs.py b/tests/test_funcs.py index 897b7811..8304b848 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -1,31 +1,278 @@ -import contextlib +import math import warnings from types import ModuleType +from typing import Any, cast +import hypothesis +import hypothesis.extra.numpy as npst import numpy as np import pytest +from hypothesis import given +from hypothesis import strategies as st from array_api_extra import ( + apply_where, at, atleast_nd, + broadcast_shapes, cov, create_diagonal, + default_dtype, expand_dims, + isclose, kron, + nan_to_num, nunique, + one_hot, pad, setdiff1d, sinc, ) -from array_api_extra._lib import Backend +from array_api_extra._lib._backends import NUMPY_VERSION, Backend from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal from array_api_extra._lib._utils._compat import device as get_device +from array_api_extra._lib._utils._helpers import eager_shape, ndindex from array_api_extra._lib._utils._typing import Array, Device +from array_api_extra.testing import lazy_xp_function + +lazy_xp_function(apply_where) +lazy_xp_function(atleast_nd) +lazy_xp_function(cov) +lazy_xp_function(create_diagonal) +lazy_xp_function(expand_dims) +lazy_xp_function(kron) +lazy_xp_function(nan_to_num) +lazy_xp_function(nunique) +lazy_xp_function(one_hot) +lazy_xp_function(pad) +# FIXME calls in1d which calls xp.unique_values without size +lazy_xp_function(setdiff1d, jax_jit=False) +lazy_xp_function(sinc) + + +class TestApplyWhere: + @staticmethod + def f1(x: Array, y: Array | int = 10) -> Array: + return x + y + + @staticmethod + def f2(x: Array, y: Array | int = 10) -> Array: + return x - y + + def test_f1_f2(self, xp: ModuleType): + x = xp.asarray([1, 2, 3, 4]) + cond = x % 2 == 0 + actual = apply_where(cond, x, self.f1, self.f2) + expect = xp.where(cond, self.f1(x), self.f2(x)) + xp_assert_equal(actual, expect) -# mypy: disable-error-code=no-untyped-usage + def test_fill_value(self, xp: ModuleType): + x = xp.asarray([1, 2, 3, 4]) + cond = x % 2 == 0 + actual = apply_where(x % 2 == 0, x, self.f1, fill_value=0) + expect = xp.where(cond, self.f1(x), xp.asarray(0)) + xp_assert_equal(actual, expect) + + actual = apply_where(x % 2 == 0, x, self.f1, fill_value=xp.asarray(0)) + xp_assert_equal(actual, expect) + + def test_args_tuple(self, xp: ModuleType): + x = xp.asarray([1, 2, 3, 4]) + y = xp.asarray([10, 20, 30, 40]) + cond = x % 2 == 0 + actual = apply_where(cond, (x, y), self.f1, self.f2) + expect = xp.where(cond, self.f1(x, y), self.f2(x, y)) + xp_assert_equal(actual, expect) + + def test_broadcast(self, xp: ModuleType): + x = xp.asarray([1, 2]) + y = xp.asarray([[10], [20], [30]]) + cond = xp.broadcast_to(xp.asarray(True), (4, 1, 1)) + + actual = apply_where(cond, (x, y), self.f1, self.f2) + expect = xp.where(cond, self.f1(x, y), self.f2(x, y)) + xp_assert_equal(actual, expect) + + actual = apply_where( + cond, + (x, y), + lambda x, _: x, + lambda _, y: y, + ) + expect = xp.where(cond, x, y) + xp_assert_equal(actual, expect) + + # Shaped fill_value + actual = apply_where(cond, x, self.f1, fill_value=y) + expect = xp.where(cond, self.f1(x), y) + xp_assert_equal(actual, expect) + + def test_dtype_propagation(self, xp: ModuleType, library: Backend): + x = xp.asarray([1, 2], dtype=xp.int8) + y = xp.asarray([3, 4], dtype=xp.int16) + cond = x % 2 == 0 + + mxp = np if library is Backend.DASK else xp + actual = apply_where( + cond, + (x, y), + self.f1, + lambda x, y: mxp.astype(x - y, xp.int64), # pyright: ignore[reportArgumentType] + ) + assert actual.dtype == xp.int64 + + actual = apply_where(cond, y, self.f1, fill_value=5) + assert actual.dtype == xp.int16 + + @pytest.mark.parametrize("fill_value_raw", [3, [3, 4]]) + @pytest.mark.parametrize( + ("fill_value_dtype", "expect_dtype"), [("int32", "int32"), ("int8", "int16")] + ) + def test_dtype_propagation_fill_value( + self, + xp: ModuleType, + fill_value_raw: int | list[int], + fill_value_dtype: str, + expect_dtype: str, + ): + x = xp.asarray([1, 2], dtype=xp.int16) + cond = x % 2 == 0 + fill_value = xp.asarray(fill_value_raw, dtype=getattr(xp, fill_value_dtype)) + + actual = apply_where(cond, x, self.f1, fill_value=fill_value) + assert actual.dtype == getattr(xp, expect_dtype) + + def test_dont_overwrite_fill_value(self, xp: ModuleType): + x = xp.asarray([1, 2]) + fill_value = xp.asarray([100, 200]) + actual = apply_where(x % 2 == 0, x, self.f1, fill_value=fill_value) + xp_assert_equal(actual, xp.asarray([100, 12])) + xp_assert_equal(fill_value, xp.asarray([100, 200])) + + @pytest.mark.skip_xp_backend( + Backend.ARRAY_API_STRICTEST, + reason="no boolean indexing -> run everywhere", + ) + @pytest.mark.skip_xp_backend( + Backend.SPARSE, + reason="no indexing by sparse array -> run everywhere", + ) + def test_dont_run_on_false(self, xp: ModuleType): + x = xp.asarray([1.0, 2.0, 0.0]) + y = xp.asarray([0.0, 3.0, 4.0]) + # On NumPy, division by zero will trigger warnings + actual = apply_where( + x == 0, + (x, y), + lambda x, y: x / y, + lambda x, y: y / x, + ) + xp_assert_equal(actual, xp.asarray([0.0, 1.5, 0.0])) + + def test_bad_args(self, xp: ModuleType): + x = xp.asarray([1, 2, 3, 4]) + cond = x % 2 == 0 + # Neither f2 nor fill_value + with pytest.raises(TypeError, match="Exactly one of"): + apply_where(cond, x, self.f1) # type: ignore[call-overload] # pyright: ignore[reportCallIssue] + # Both f2 and fill_value + with pytest.raises(TypeError, match="Exactly one of"): + apply_where(cond, x, self.f1, self.f2, fill_value=0) # type: ignore[call-overload] # pyright: ignore[reportCallIssue] + + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") + def test_xp(self, xp: ModuleType): + x = xp.asarray([1, 2, 3, 4]) + cond = x % 2 == 0 + actual = apply_where(cond, x, self.f1, self.f2, xp=xp) + expect = xp.where(cond, self.f1(x), self.f2(x)) + xp_assert_equal(actual, expect) + + def test_device(self, xp: ModuleType, device: Device): + x = xp.asarray([1, 2, 3, 4], device=device) + y = apply_where(x % 2 == 0, x, self.f1, self.f2) + assert get_device(y) == device + y = apply_where(x % 2 == 0, x, self.f1, fill_value=0) + assert get_device(y) == device + y = apply_where(x % 2 == 0, x, self.f1, fill_value=x) + assert get_device(y) == device + + @pytest.mark.filterwarnings("ignore::RuntimeWarning") # overflows, etc. + @hypothesis.settings( + # The xp and library fixtures are not regenerated between hypothesis iterations + suppress_health_check=[hypothesis.HealthCheck.function_scoped_fixture], + # JAX can take a long time to initialize on the first call + deadline=None, + ) + @given( + n_arrays=st.integers(min_value=1, max_value=3), + rng_seed=st.integers(min_value=1000000000, max_value=9999999999), + dtype=st.sampled_from((np.float32, np.float64)), + p=st.floats(min_value=0, max_value=1), + data=st.data(), + ) + def test_hypothesis( + self, + n_arrays: int, + rng_seed: int, + dtype: np.dtype[Any], + p: float, + data: st.DataObject, + xp: ModuleType, + library: Backend, + ): + if ( + library.like(Backend.NUMPY) + and NUMPY_VERSION < (2, 0) + and dtype is np.float32 + ): + pytest.xfail(reason="NumPy 1.x dtype promotion for scalars") + + mbs = npst.mutually_broadcastable_shapes(num_shapes=n_arrays + 1, min_side=0) + input_shapes, _ = data.draw(mbs) + cond_shape, *shapes = input_shapes + + # cupy/cupy#8382 + # https://github.com/jax-ml/jax/issues/26658 + elements = {"allow_subnormal": not library.like(Backend.CUPY, Backend.JAX)} + + fill_value = xp.asarray( + data.draw(npst.arrays(dtype=dtype, shape=(), elements=elements)) + ) + float_fill_value = float(fill_value) + if library is Backend.CUPY and dtype is np.float32: + # Avoid data-dependent dtype promotion when encountering subnormals + # close to the max float32 value + float_fill_value = float(np.clip(float_fill_value, -1e38, 1e38)) + + arrays = tuple( + xp.asarray( + data.draw(npst.arrays(dtype=dtype, shape=shape, elements=elements)) + ) + for shape in shapes + ) + + def f1(*args: Array) -> Array: + return cast(Array, sum(args)) + + def f2(*args: Array) -> Array: + return cast(Array, sum(args) / 2) + + rng = np.random.default_rng(rng_seed) + cond = xp.asarray(rng.random(size=cond_shape) > p) + + res1 = apply_where(cond, arrays, f1, fill_value=fill_value) + res2 = apply_where(cond, arrays, f1, f2) + res3 = apply_where(cond, arrays, f1, fill_value=float_fill_value) + + ref1 = xp.where(cond, f1(*arrays), fill_value) + ref2 = xp.where(cond, f1(*arrays), f2(*arrays)) + ref3 = xp.where(cond, f1(*arrays), float_fill_value) + + xp_assert_close(res1, ref1, rtol=2e-16) + xp_assert_equal(res2, ref2) + xp_assert_equal(res3, ref3) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no expand_dims") class TestAtLeastND: def test_0D(self, xp: ModuleType): x = xp.asarray(1.0) @@ -52,7 +299,7 @@ def test_1D(self, xp: ModuleType): xp_assert_equal(y, xp.asarray([[0, 1]])) y = atleast_nd(x, ndim=5) - xp_assert_equal(y, xp.reshape(xp.arange(2), (1, 1, 1, 1, 2))) + xp_assert_equal(y, xp.asarray([[[[[0, 1]]]]])) def test_2D(self, xp: ModuleType): x = xp.asarray([[3.0]]) @@ -92,12 +339,68 @@ def test_device(self, xp: ModuleType, device: Device): assert get_device(atleast_nd(x, ndim=2)) == device def test_xp(self, xp: ModuleType): - x = xp.asarray(1) - y = atleast_nd(x, ndim=0, xp=xp) - xp_assert_equal(y, x) + x = xp.asarray(1.0) + y = atleast_nd(x, ndim=1, xp=xp) + xp_assert_equal(y, xp.ones((1,))) + + +class TestBroadcastShapes: + @pytest.mark.parametrize( + "args", + [ + (), + ((),), + ((), ()), + ((1,),), + ((1,), (1,)), + ((2,), (1,)), + ((3, 1, 4), (2, 1)), + ((1, 1, 4), (2, 1)), + ((1,), ()), + ((), (2,), ()), + ((0,),), + ((0,), (1,)), + ((2, 0), (1, 1)), + ((2, 0, 3), (2, 1, 1)), + ], + ) + def test_simple(self, args: tuple[tuple[int, ...], ...]): + expect = np.broadcast_shapes(*args) + actual = broadcast_shapes(*args) + assert actual == expect + + @pytest.mark.parametrize( + "args", + [ + ((2,), (3,)), + ((2, 3), (1, 2)), + ((2,), (0,)), + ((2, 0, 2), (1, 3, 1)), + ], + ) + def test_fail(self, args: tuple[tuple[int, ...], ...]): + match = "cannot be broadcast to a single shape" + with pytest.raises(ValueError, match=match): + _ = np.broadcast_shapes(*args) + with pytest.raises(ValueError, match=match): + _ = broadcast_shapes(*args) + + @pytest.mark.parametrize( + "args", + [ + ((None,), (None,)), + ((math.nan,), (None,)), + ((1, None, 2, 4), (2, 3, None, 1), (2, None, None, 4)), + ((1, math.nan, 2), (4, 2, 3, math.nan), (4, 2, None, None)), + ((math.nan, 1), (None, 2), (None, 2)), + ], + ) + def test_none(self, args: tuple[tuple[float | None, ...], ...]): + expect = args[-1] + actual = broadcast_shapes(*args[:-1]) + assert actual == expect -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") class TestCov: def test_basic(self, xp: ModuleType): xp_assert_close( @@ -110,6 +413,7 @@ def test_complex(self, xp: ModuleType): expect = xp.asarray([[1.0, -1.0j], [1.0j, 1.0]], dtype=xp.complex128) xp_assert_close(actual, expect) + @pytest.mark.xfail_xp_backend(Backend.SPARSE, reason="sparse#877") def test_empty(self, xp: ModuleType): with warnings.catch_warnings(record=True): warnings.simplefilter("always", RuntimeWarning) @@ -136,7 +440,7 @@ def test_device(self, xp: ModuleType, device: Device): x = xp.asarray([1, 2, 3], device=device) assert get_device(cov(x)) == device - @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY) + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") def test_xp(self, xp: ModuleType): xp_assert_close( cov(xp.asarray([[0.0, 2.0], [1.0, 1.0], [2.0, 0.0]]).T, xp=xp), @@ -144,9 +448,103 @@ def test_xp(self, xp: ModuleType): ) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") +@pytest.mark.xfail_xp_backend(Backend.SPARSE, reason="no arange", strict=False) +class TestOneHot: + @pytest.mark.parametrize("n_dim", range(4)) + @pytest.mark.parametrize("num_classes", [1, 3, 10]) + def test_dims_and_classes(self, xp: ModuleType, n_dim: int, num_classes: int): + shape = tuple(range(2, 2 + n_dim)) + rng = np.random.default_rng(2347823) + np_x = rng.integers(num_classes, size=shape) + x = xp.asarray(np_x) + y = one_hot(x, num_classes) + assert y.shape == (*x.shape, num_classes) + for *i_list, j in ndindex(*shape, num_classes): + i = tuple(i_list) + assert float(y[(*i, j)]) == (int(x[i]) == j) + + def test_basic(self, xp: ModuleType): + actual = one_hot(xp.asarray([0, 1, 2]), 3) + expected = xp.asarray([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) + xp_assert_equal(actual, expected) + + actual = one_hot(xp.asarray([1, 2, 0]), 3) + expected = xp.asarray([[0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 0.0]]) + xp_assert_equal(actual, expected) + + def test_2d(self, xp: ModuleType): + actual = one_hot(xp.asarray([[2, 1, 0], [1, 0, 2]]), 3, axis=1) + expected = xp.asarray( + [ + [[0.0, 0.0, 1.0], [0.0, 1.0, 0.0], [1.0, 0.0, 0.0]], + [[0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0]], + ] + ) + xp_assert_equal(actual, expected) + + @pytest.mark.skip_xp_backend( + Backend.ARRAY_API_STRICTEST, reason="backend doesn't support Boolean indexing" + ) + def test_abstract_size(self, xp: ModuleType): + x = xp.arange(5) + x = x[x > 2] + actual = one_hot(x, 5) + expected = xp.asarray([[0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 1.0]]) + xp_assert_equal(actual, expected) + + @pytest.mark.skip_xp_backend( + Backend.TORCH_GPU, reason="Puts Pytorch into a bad state." + ) + def test_out_of_bound(self, xp: ModuleType): + # Undefined behavior. Either return zero, or raise. + try: + actual = one_hot(xp.asarray([-1, 3]), 3) + except IndexError: + return + expected = xp.asarray([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]) + xp_assert_equal(actual, expected) + + @pytest.mark.parametrize( + "int_dtype", + ["int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64"], + ) + def test_int_types(self, xp: ModuleType, int_dtype: str): + dtype = getattr(xp, int_dtype) + x = xp.asarray([0, 1, 2], dtype=dtype) + actual = one_hot(x, 3) + expected = xp.asarray([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) + xp_assert_equal(actual, expected) + + def test_custom_dtype(self, xp: ModuleType): + actual = one_hot(xp.asarray([0, 1, 2], dtype=xp.int32), 3, dtype=xp.bool) + expected = xp.asarray( + [[True, False, False], [False, True, False], [False, False, True]] + ) + xp_assert_equal(actual, expected) + + def test_axis(self, xp: ModuleType): + expected = xp.asarray([[0.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 0.0]]).T + actual = one_hot(xp.asarray([1, 2, 0]), 3, axis=0) + xp_assert_equal(actual, expected) + + actual = one_hot(xp.asarray([1, 2, 0]), 3, axis=-2) + xp_assert_equal(actual, expected) + + def test_non_integer(self, xp: ModuleType): + with pytest.raises(TypeError): + _ = one_hot(xp.asarray([1.0]), 3) + + def test_device(self, xp: ModuleType, device: Device): + x = xp.asarray([0, 1, 2], device=device) + y = one_hot(x, 3) + assert get_device(y) == device + + +@pytest.mark.skip_xp_backend( + Backend.SPARSE, reason="read-only backend without .at support" +) class TestCreateDiagonal: - def test_1d(self, xp: ModuleType): + def test_1d_from_numpy(self, xp: ModuleType): # from np.diag tests vals = 100 * xp.arange(5, dtype=xp.float64) b = xp.zeros((5, 5), dtype=xp.float64) @@ -163,7 +561,7 @@ def test_1d(self, xp: ModuleType): @pytest.mark.parametrize("n", range(1, 10)) @pytest.mark.parametrize("offset", range(1, 10)) - def test_create_diagonal(self, xp: ModuleType, n: int, offset: int): + def test_1d_from_scipy(self, xp: ModuleType, n: int, offset: int): # from scipy._lib tests rng = np.random.default_rng(2347823) one = xp.asarray(1.0) @@ -172,13 +570,34 @@ def test_create_diagonal(self, xp: ModuleType, n: int, offset: int): B = xp.asarray(np.diag(x, offset), dtype=one.dtype) xp_assert_equal(A, B) - def test_0d(self, xp: ModuleType): + def test_0d_raises(self, xp: ModuleType): with pytest.raises(ValueError, match="1-dimensional"): - create_diagonal(xp.asarray(1)) + _ = create_diagonal(xp.asarray(1)) - def test_2d(self, xp: ModuleType): - with pytest.raises(ValueError, match="1-dimensional"): - create_diagonal(xp.asarray([[1]])) + @pytest.mark.parametrize( + "shape", + [ + (0,), + (10,), + (0, 1), + (1, 0), + (0, 0), + (4, 2, 1), + (1, 1, 7), + (0, 0, 1), + (3, 2, 4, 5), + ], + ) + def test_nd(self, xp: ModuleType, shape: tuple[int, ...]): + rng = np.random.default_rng(2347823) + b = xp.asarray( + rng.integers((1 << 64) - 1, size=shape, dtype=np.uint64), dtype=xp.uint64 + ) + c = create_diagonal(b) + zero = xp.zeros((), dtype=xp.uint64) + assert c.shape == (*b.shape, b.shape[-1]) + for i in ndindex(*eager_shape(c)): + xp_assert_equal(c[i], b[i[:-1]] if i[-2] == i[-1] else zero) def test_device(self, xp: ModuleType, device: Device): x = xp.asarray([1, 2, 3], device=device) @@ -190,24 +609,45 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(y, xp.asarray([[1, 0], [0, 2]])) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no sparse.expand_dims") +class TestDefaultDType: + def test_basic(self, xp: ModuleType): + assert default_dtype(xp) == xp.empty(0).dtype + + def test_kind(self, xp: ModuleType): + assert default_dtype(xp, "real floating") == xp.empty(0).dtype + assert default_dtype(xp, "complex floating") == (xp.empty(0) * 1j).dtype + assert default_dtype(xp, "integral") == xp.int64 + assert default_dtype(xp, "indexing") == xp.int64 + + with pytest.raises(ValueError, match="Unknown kind"): + _ = default_dtype(xp, "foo") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + + def test_device(self, xp: ModuleType, device: Device): + # Note: at the moment there are no known namespaces with + # device-specific default dtypes. + assert default_dtype(xp, device=None) == xp.empty(0).dtype + assert default_dtype(xp, device=device) == xp.empty(0).dtype + + def test_torch(self, torch: ModuleType): + xp = torch + xp.set_default_dtype(xp.float64) + assert default_dtype(xp) == xp.float64 + assert default_dtype(xp, "real floating") == xp.float64 + assert default_dtype(xp, "complex floating") == xp.complex128 + + xp.set_default_dtype(xp.float32) + assert default_dtype(xp) == xp.float32 + assert default_dtype(xp, "real floating") == xp.float32 + assert default_dtype(xp, "complex floating") == xp.complex64 + + class TestExpandDims: - @pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="tuple index out of range") - @pytest.mark.skip_xp_backend(Backend.TORCH, reason="tuple index out of range") - def test_functionality(self, xp: ModuleType): - def _squeeze_all(b: Array) -> Array: - """Mimics `np.squeeze(b)`. `xpx.squeeze`?""" - for axis in range(b.ndim): - with contextlib.suppress(ValueError): - b = xp.squeeze(b, axis=axis) - return b - - s = (2, 3, 4, 5) - a = xp.empty(s) + def test_single_axis(self, xp: ModuleType): + """Trivial case where xpx.expand_dims doesn't add anything to xp.expand_dims""" + a = xp.asarray(np.reshape(np.arange(2 * 3 * 4 * 5), (2, 3, 4, 5))) for axis in range(-5, 4): b = expand_dims(a, axis=axis) - assert b.shape[axis] == 1 - assert _squeeze_all(b).shape == s + xp_assert_equal(b, xp.expand_dims(a, axis=axis)) def test_axis_tuple(self, xp: ModuleType): a = xp.empty((3, 3, 3)) @@ -217,29 +657,28 @@ def test_axis_tuple(self, xp: ModuleType): assert expand_dims(a, axis=(0, -3, -5)).shape == (1, 1, 3, 1, 3, 3) def test_axis_out_of_range(self, xp: ModuleType): - s = (2, 3, 4, 5) - a = xp.empty(s) + a = xp.empty((2, 3, 4, 5)) with pytest.raises(IndexError, match="out of bounds"): - expand_dims(a, axis=-6) + _ = expand_dims(a, axis=-6) with pytest.raises(IndexError, match="out of bounds"): - expand_dims(a, axis=5) + _ = expand_dims(a, axis=5) a = xp.empty((3, 3, 3)) with pytest.raises(IndexError, match="out of bounds"): - expand_dims(a, axis=(0, -6)) + _ = expand_dims(a, axis=(0, -6)) with pytest.raises(IndexError, match="out of bounds"): - expand_dims(a, axis=(0, 5)) + _ = expand_dims(a, axis=(0, 5)) def test_repeated_axis(self, xp: ModuleType): a = xp.empty((3, 3, 3)) with pytest.raises(ValueError, match="Duplicate dimensions"): - expand_dims(a, axis=(1, 1)) + _ = expand_dims(a, axis=(1, 1)) def test_positive_negative_repeated(self, xp: ModuleType): # https://github.com/data-apis/array-api/issues/760#issuecomment-1989449817 a = xp.empty((2, 3, 4, 5)) with pytest.raises(ValueError, match="Duplicate dimensions"): - expand_dims(a, axis=(3, -3)) + _ = expand_dims(a, axis=(3, -3)) def test_device(self, xp: ModuleType, device: Device): x = xp.asarray([1, 2, 3], device=device) @@ -251,36 +690,198 @@ def test_xp(self, xp: ModuleType): assert y.shape == (1, 1, 1, 3) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no sparse.expand_dims") +@pytest.mark.filterwarnings( # array_api_strictest + "ignore:invalid value encountered:RuntimeWarning:array_api_strict" +) +@pytest.mark.filterwarnings( # sparse + "ignore:invalid value encountered:RuntimeWarning:sparse" +) +class TestIsClose: + @pytest.mark.parametrize("swap", [False, True]) + @pytest.mark.parametrize( + ("a", "b"), + [ + (0.0, 0.0), + (1.0, 1.0), + (1.0, 2.0), + (1.0, -1.0), + (100.0, 101.0), + (0, 0), + (1, 1), + (1, 2), + (1, -1), + (1.0 + 1j, 1.0 + 1j), + (1.0 + 1j, 1.0 - 1j), + (float("inf"), float("inf")), + (float("inf"), 100.0), + (float("inf"), float("-inf")), + (float("-inf"), float("-inf")), + (float("nan"), float("nan")), + (float("nan"), 100.0), + (1e6, 1e6 + 1), # True - within rtol + (1e6, 1e6 + 100), # False - outside rtol + (1e-6, 1.1e-6), # False - outside atol + (1e-7, 1.1e-7), # True - outside atol + (1e6 + 0j, 1e6 + 1j), # True - within rtol + (1e6 + 0j, 1e6 + 100j), # False - outside rtol + ], + ) + def test_basic(self, a: float, b: float, swap: bool, xp: ModuleType): + if swap: + b, a = a, b + a_xp = xp.asarray(a) + b_xp = xp.asarray(b) + + xp_assert_equal(isclose(a_xp, b_xp), xp.asarray(np.isclose(a, b))) + + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + ar_np = a * np.arange(10) + br_np = b * np.arange(10) + ar_xp = xp.asarray(ar_np) + br_xp = xp.asarray(br_np) + + xp_assert_equal(isclose(ar_xp, br_xp), xp.asarray(np.isclose(ar_np, br_np))) + + @pytest.mark.parametrize("dtype", ["float32", "int32"]) + def test_broadcast(self, dtype: str, xp: ModuleType): + dtype = getattr(xp, dtype) + a = xp.asarray([1, 2, 3], dtype=dtype) + b = xp.asarray([[1], [5]], dtype=dtype) + actual = isclose(a, b) + expect = xp.asarray( + [[True, False, False], [False, False, False]], dtype=xp.bool + ) + + xp_assert_equal(actual, expect) + + def test_some_inf(self, xp: ModuleType): + a = xp.asarray([0.0, 1.0, xp.inf, xp.inf, xp.inf]) + b = xp.asarray([1e-9, 1.0, xp.inf, -xp.inf, 2.0]) + actual = isclose(a, b) + xp_assert_equal(actual, xp.asarray([True, True, True, False, False])) + + def test_equal_nan(self, xp: ModuleType): + a = xp.asarray([xp.nan, xp.nan, 1.0]) + b = xp.asarray([xp.nan, 1.0, xp.nan]) + xp_assert_equal(isclose(a, b), xp.asarray([False, False, False])) + xp_assert_equal(isclose(a, b, equal_nan=True), xp.asarray([True, False, False])) + + @pytest.mark.parametrize("dtype", ["float32", "complex64", "int32"]) + def test_tolerance(self, dtype: str, xp: ModuleType): + dtype = getattr(xp, dtype) + a = xp.asarray([100, 100], dtype=dtype) + b = xp.asarray([101, 102], dtype=dtype) + xp_assert_equal(isclose(a, b), xp.asarray([False, False])) + xp_assert_equal(isclose(a, b, atol=1), xp.asarray([True, False])) + xp_assert_equal(isclose(a, b, rtol=0.01), xp.asarray([True, False])) + + # Attempt to trigger division by 0 in rtol on int dtype + xp_assert_equal(isclose(a, b, rtol=0), xp.asarray([False, False])) + xp_assert_equal(isclose(a, b, atol=1, rtol=0), xp.asarray([True, False])) + + @pytest.mark.parametrize("dtype", ["int8", "uint8"]) + def test_tolerance_integer_overflow(self, dtype: str, xp: ModuleType): + """1/rtol is too large for dtype""" + a = xp.asarray([100, 100], dtype=getattr(xp, dtype)) + b = xp.asarray([100, 101], dtype=getattr(xp, dtype)) + xp_assert_equal(isclose(a, b), xp.asarray([True, False])) + + def test_very_small_numbers(self, xp: ModuleType): + a = xp.asarray([1e-9, 1e-9]) + b = xp.asarray([1.0001e-9, 1.00001e-9]) + # Difference is below default atol + xp_assert_equal(isclose(a, b), xp.asarray([True, True])) + # Use only rtol + xp_assert_equal(isclose(a, b, atol=0), xp.asarray([False, True])) + xp_assert_equal(isclose(a, b, atol=0, rtol=0), xp.asarray([False, False])) + + def test_bool_dtype(self, xp: ModuleType): + a = xp.asarray([False, True, False]) + b = xp.asarray([True, True, False]) + xp_assert_equal(isclose(a, b), xp.asarray([False, True, True])) + xp_assert_equal(isclose(a, b, atol=1), xp.asarray([True, True, True])) + xp_assert_equal(isclose(a, b, atol=2), xp.asarray([True, True, True])) + xp_assert_equal(isclose(a, b, rtol=1), xp.asarray([True, True, True])) + xp_assert_equal(isclose(a, b, rtol=2), xp.asarray([True, True, True])) + + # Test broadcasting + xp_assert_equal( + isclose(a, xp.asarray(True), atol=1), xp.asarray([True, True, True]) + ) + xp_assert_equal( + isclose(xp.asarray(True), b, atol=1), xp.asarray([True, True, True]) + ) + + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="index by sparse array") + @pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="unknown shape") + def test_none_shape(self, xp: ModuleType): + a = xp.asarray([1, 5, 0]) + b = xp.asarray([1, 4, 2]) + b = b[a < 5] + a = a[a < 5] + xp_assert_equal(isclose(a, b), xp.asarray([True, False])) + + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="index by sparse array") + @pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="unknown shape") + def test_none_shape_bool(self, xp: ModuleType): + a = xp.asarray([True, True, False]) + b = xp.asarray([True, False, True]) + b = b[a] + a = a[a] + xp_assert_equal(isclose(a, b), xp.asarray([True, False])) + + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") + def test_python_scalar(self, xp: ModuleType): + a = xp.asarray([0.0, 0.1], dtype=xp.float32) + xp_assert_equal(isclose(a, 0.0), xp.asarray([True, False])) + xp_assert_equal(isclose(0.0, a), xp.asarray([True, False])) + + a = xp.asarray([0, 1], dtype=xp.int16) + xp_assert_equal(isclose(a, 0), xp.asarray([True, False])) + xp_assert_equal(isclose(0, a), xp.asarray([True, False])) + + xp_assert_equal(isclose(0, 0, xp=xp), xp.asarray(True)) + xp_assert_equal(isclose(0, 1, xp=xp), xp.asarray(False)) + + def test_all_python_scalars(self): + with pytest.raises(TypeError, match="Unrecognized"): + _ = isclose(0, 0) + + def test_xp(self, xp: ModuleType): + a = xp.asarray([0.0, 0.0]) + b = xp.asarray([1e-9, 1e-4]) + xp_assert_equal(isclose(a, b, xp=xp), xp.asarray([True, False])) + + @pytest.mark.parametrize("equal_nan", [True, False]) + def test_device(self, xp: ModuleType, device: Device, equal_nan: bool): + a = xp.asarray([0.0, 0.0, xp.nan], device=device) + b = xp.asarray([1e-9, 1e-4, xp.nan], device=device) + res = isclose(a, b, equal_nan=equal_nan) + assert get_device(res) == device + + class TestKron: def test_basic(self, xp: ModuleType): # Using 0-dimensional array a = xp.asarray(1) b = xp.asarray([[1, 2], [3, 4]]) - k = xp.asarray([[1, 2], [3, 4]]) - xp_assert_equal(kron(a, b), k) - a = xp.asarray([[1, 2], [3, 4]]) - b = xp.asarray(1) - xp_assert_equal(kron(a, b), k) + xp_assert_equal(kron(a, b), b) + xp_assert_equal(kron(b, a), b) # Using 1-dimensional array a = xp.asarray([3]) b = xp.asarray([[1, 2], [3, 4]]) k = xp.asarray([[3, 6], [9, 12]]) xp_assert_equal(kron(a, b), k) - a = xp.asarray([[1, 2], [3, 4]]) - b = xp.asarray([3]) - xp_assert_equal(kron(a, b), k) + xp_assert_equal(kron(b, a), k) # Using 3-dimensional array a = xp.asarray([[[1]], [[2]]]) b = xp.asarray([[1, 2], [3, 4]]) k = xp.asarray([[[1, 2], [3, 4]], [[2, 4], [6, 8]]]) xp_assert_equal(kron(a, b), k) - a = xp.asarray([[1, 2], [3, 4]]) - b = xp.asarray([[[1]], [[2]]]) - k = xp.asarray([[[1, 2], [3, 4]], [[2, 4], [6, 8]]]) - xp_assert_equal(kron(a, b), k) + xp_assert_equal(kron(b, a), k) def test_kron_smoke(self, xp: ModuleType): a = xp.ones((3, 3)) @@ -318,6 +919,18 @@ def test_kron_shape( k = kron(a, b) assert k.shape == expected_shape + def test_python_scalar(self, xp: ModuleType): + a = 1 + # Test no dtype promotion to xp.asarray(a); use b.dtype + b = xp.asarray([[1, 2], [3, 4]], dtype=xp.int16) + xp_assert_equal(kron(a, b), b) + xp_assert_equal(kron(b, a), b) + xp_assert_equal(kron(1, 1, xp=xp), xp.asarray(1)) + + def test_all_python_scalars(self): + with pytest.raises(TypeError, match="Unrecognized"): + _ = kron(1, 1) + def test_device(self, xp: ModuleType, device: Device): x1 = xp.asarray([1, 2, 3], device=device) x2 = xp.asarray([4, 5], device=device) @@ -330,100 +943,200 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(kron(a, b, xp=xp), k) -@pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="no argsort") -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") -class TestSetDiff1D: - @pytest.mark.skip_xp_backend( - Backend.TORCH, reason="index_select not implemented for uint32" - ) - def test_setdiff1d(self, xp: ModuleType): - x1 = xp.asarray([6, 5, 4, 7, 1, 2, 7, 4]) - x2 = xp.asarray([2, 4, 3, 3, 2, 1, 5]) +class TestNanToNum: + def test_bool(self, xp: ModuleType) -> None: + a = xp.asarray([True]) + xp_assert_equal(nan_to_num(a, xp=xp), a) + + def test_scalar_pos_inf(self, xp: ModuleType, infinity: float) -> None: + a = xp.inf + xp_assert_equal(nan_to_num(a, xp=xp), xp.asarray(infinity)) + + def test_scalar_neg_inf(self, xp: ModuleType, infinity: float) -> None: + a = -xp.inf + xp_assert_equal(nan_to_num(a, xp=xp), -xp.asarray(infinity)) + + def test_scalar_nan(self, xp: ModuleType) -> None: + a = xp.nan + xp_assert_equal(nan_to_num(a, xp=xp), xp.asarray(0.0)) + + def test_real(self, xp: ModuleType, infinity: float) -> None: + a = xp.asarray([xp.inf, -xp.inf, xp.nan, -128, 128]) + xp_assert_equal( + nan_to_num(a, xp=xp), + xp.asarray( + [ + infinity, + -infinity, + 0.0, + -128, + 128, + ] + ), + ) - expected = xp.asarray([6, 7]) - actual = setdiff1d(x1, x2) - xp_assert_equal(actual, expected) + def test_complex(self, xp: ModuleType, infinity: float) -> None: + a = xp.asarray( + [ + complex(xp.inf, xp.nan), + xp.nan, + complex(xp.nan, xp.inf), + ] + ) + xp_assert_equal( + nan_to_num(a), + xp.asarray([complex(infinity, 0), complex(0, 0), complex(0, infinity)]), + ) - x1 = xp.arange(21) - x2 = xp.arange(19) - expected = xp.asarray([19, 20]) - actual = setdiff1d(x1, x2) - xp_assert_equal(actual, expected) + def test_empty_array(self, xp: ModuleType) -> None: + a = xp.asarray([], dtype=xp.float32) # forced dtype due to torch + xp_assert_equal(nan_to_num(a, xp=xp), a) + assert xp.isdtype(nan_to_num(a, xp=xp).dtype, xp.float32) - xp_assert_equal(setdiff1d(xp.empty(0), xp.empty(0)), xp.empty(0)) - x1 = xp.empty(0, dtype=xp.uint32) - x2 = x1 - assert xp.isdtype(setdiff1d(x1, x2).dtype, xp.uint32) + @pytest.mark.parametrize( + ("in_vals", "fill_value", "out_vals"), + [ + ([1, 2, np.nan, 4], 3, [1.0, 2.0, 3.0, 4.0]), + ([1, 2, np.nan, 4], 3.0, [1.0, 2.0, 3.0, 4.0]), + ( + [ + complex(1, 1), + complex(2, 2), + complex(np.nan, 0), + complex(4, 4), + ], + 3, + [ + complex(1.0, 1.0), + complex(2.0, 2.0), + complex(3.0, 0.0), + complex(4.0, 4.0), + ], + ), + ( + [ + complex(1, 1), + complex(2, 2), + complex(0, np.nan), + complex(4, 4), + ], + 3.0, + [ + complex(1.0, 1.0), + complex(2.0, 2.0), + complex(0.0, 3.0), + complex(4.0, 4.0), + ], + ), + ( + [ + complex(1, 1), + complex(2, 2), + complex(np.nan, np.nan), + complex(4, 4), + ], + 3.0, + [ + complex(1.0, 1.0), + complex(2.0, 2.0), + complex(3.0, 3.0), + complex(4.0, 4.0), + ], + ), + ], + ) + def test_fill_value_success( + self, + xp: ModuleType, + in_vals: Array, + fill_value: int | float, + out_vals: Array, + ) -> None: + a = xp.asarray(in_vals) + xp_assert_equal( + nan_to_num(a, fill_value=fill_value, xp=xp), + xp.asarray(out_vals), + ) - def test_assume_unique(self, xp: ModuleType): - x1 = xp.asarray([3, 2, 1]) - x2 = xp.asarray([7, 5, 2]) - expected = xp.asarray([3, 1]) - actual = setdiff1d(x1, x2, assume_unique=True) - xp_assert_equal(actual, expected) + def test_fill_value_failure(self, xp: ModuleType) -> None: + a = xp.asarray( + [ + complex(1, 1), + complex(xp.nan, xp.nan), + complex(3, 3), + ] + ) + with pytest.raises( + TypeError, + match="Complex fill values are not supported", + ): + _ = nan_to_num( + a, + fill_value=complex(2, 2), # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + xp=xp, + ) - def test_device(self, xp: ModuleType, device: Device): - x1 = xp.asarray([3, 8, 20], device=device) - x2 = xp.asarray([2, 3, 4], device=device) - assert get_device(setdiff1d(x1, x2)) == device - @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY) - def test_xp(self, xp: ModuleType): - x1 = xp.asarray([3, 8, 20]) - x2 = xp.asarray([2, 3, 4]) - expected = xp.asarray([8, 20]) - actual = setdiff1d(x1, x2, xp=xp) - xp_assert_equal(actual, expected) +class TestNUnique: + def test_simple(self, xp: ModuleType): + a = xp.asarray([[1, 1], [0, 2], [2, 2]]) + xp_assert_equal(nunique(a), xp.asarray(3)) + def test_empty(self, xp: ModuleType): + a = xp.asarray([]) + xp_assert_equal(nunique(a), xp.asarray(0)) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") -class TestSinc: - def test_simple(self, xp: ModuleType): - xp_assert_equal(sinc(xp.asarray(0.0)), xp.asarray(1.0)) - w = sinc(xp.linspace(-1, 1, 100)) - # check symmetry - xp_assert_close(w, xp.flip(w, axis=0)) + def test_size1(self, xp: ModuleType): + a = xp.asarray([123]) + xp_assert_equal(nunique(a), xp.asarray(1)) - @pytest.mark.parametrize("x", [0, 1 + 3j]) - def test_dtype(self, xp: ModuleType, x: int | complex): - with pytest.raises(ValueError, match="real floating data type"): - sinc(xp.asarray(x)) + def test_all_equal(self, xp: ModuleType): + a = xp.asarray([123, 123, 123]) + xp_assert_equal(nunique(a), xp.asarray(1)) - def test_3d(self, xp: ModuleType): - x = xp.reshape(xp.arange(18, dtype=xp.float64), (3, 3, 2)) - expected = xp.zeros((3, 3, 2), dtype=xp.float64) - expected = at(expected)[0, 0, 0].set(1.0) - xp_assert_close(sinc(x), expected, atol=1e-15) + @pytest.mark.xfail_xp_backend(Backend.DASK, reason="No equal_nan kwarg in unique") + @pytest.mark.xfail_xp_backend(Backend.SPARSE, reason="sparse#855") + def test_nan(self, xp: ModuleType, library: Backend): + if library.like(Backend.NUMPY) and NUMPY_VERSION < (1, 24): + pytest.xfail("NumPy <1.24 has no equal_nan kwarg in unique") - def test_device(self, xp: ModuleType, device: Device): - x = xp.asarray(0.0, device=device) - assert get_device(sinc(x)) == device + # Each NaN is counted separately + a = xp.asarray([xp.nan, 123.0, xp.nan]) + xp_assert_equal(nunique(a), xp.asarray(3)) + + @pytest.mark.parametrize("size", [0, 1, 2]) + def test_device(self, xp: ModuleType, device: Device, size: int): + a = xp.asarray([0.0] * size, device=device) + assert get_device(nunique(a)) == device def test_xp(self, xp: ModuleType): - xp_assert_equal(sinc(xp.asarray(0.0), xp=xp), xp.asarray(1.0)) + a = xp.asarray([[1, 1], [0, 2], [2, 2]]) + xp_assert_equal(nunique(a, xp=xp), xp.asarray(3)) -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no arange, no device") class TestPad: def test_simple(self, xp: ModuleType): - a = xp.arange(1, 4) + a = xp.asarray([1, 2, 3]) padded = pad(a, 2) xp_assert_equal(padded, xp.asarray([0, 0, 1, 2, 3, 0, 0])) + @pytest.mark.xfail_xp_backend( + Backend.SPARSE, reason="constant_values can only be equal to fill value" + ) def test_fill_value(self, xp: ModuleType): - a = xp.arange(1, 4) + a = xp.asarray([1, 2, 3]) padded = pad(a, 2, constant_values=42) xp_assert_equal(padded, xp.asarray([42, 42, 1, 2, 3, 42, 42])) def test_ndim(self, xp: ModuleType): - a = xp.reshape(xp.arange(2 * 3 * 4), (2, 3, 4)) + a = xp.asarray(np.reshape(np.arange(2 * 3 * 4), (2, 3, 4))) padded = pad(a, 2) assert padded.shape == (6, 7, 8) def test_mode_not_implemented(self, xp: ModuleType): - a = xp.arange(3) + a = xp.asarray([1, 2, 3]) with pytest.raises(NotImplementedError, match="Only `'constant'`"): - pad(a, 2, mode="edge") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + _ = pad(a, 2, mode="edge") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] def test_device(self, xp: ModuleType, device: Device): a = xp.asarray(0.0, device=device) @@ -434,7 +1147,7 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(padded, xp.asarray(0)) def test_tuple_width(self, xp: ModuleType): - a = xp.reshape(xp.arange(12), (3, 4)) + a = xp.asarray(np.reshape(np.arange(12), (3, 4))) padded = pad(a, (1, 0)) assert padded.shape == (4, 5) @@ -442,30 +1155,146 @@ def test_tuple_width(self, xp: ModuleType): assert padded.shape == (6, 7) with pytest.raises((ValueError, RuntimeError)): - pad(a, [(1, 2, 3)]) # type: ignore[list-item] # pyright: ignore[reportArgumentType] + _ = pad(a, [(1, 2, 3)]) # type: ignore[list-item] # pyright: ignore[reportArgumentType] - def test_list_of_tuples_width(self, xp: ModuleType): - a = xp.reshape(xp.arange(12), (3, 4)) - padded = pad(a, [(1, 0), (0, 2)]) - assert padded.shape == (4, 6) + def test_sequence_of_tuples_width(self, xp: ModuleType): + a = xp.asarray(np.reshape(np.arange(12), (3, 4))) - padded = pad(a, [(1, 0), (0, 0)]) + padded = pad(a, ((1, 0), (0, 2))) + assert padded.shape == (4, 6) + padded = pad(a, ((1, 0), (0, 0))) assert padded.shape == (4, 4) -class TestNUnique: +assume_unique = pytest.mark.parametrize( + "assume_unique", + [ + True, + pytest.param( + False, + marks=pytest.mark.xfail_xp_backend( + Backend.DASK, reason="NaN-shaped arrays" + ), + ), + ], +) + + +@pytest.mark.xfail_xp_backend(Backend.SPARSE, reason="no argsort") +@pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="no unique_values") +class TestSetDiff1D: + @pytest.mark.xfail_xp_backend(Backend.DASK, reason="NaN-shaped arrays") + @pytest.mark.xfail_xp_backend( + Backend.TORCH, reason="index_select not implemented for uint32" + ) + @pytest.mark.xfail_xp_backend( + Backend.TORCH_GPU, reason="index_select not implemented for uint32" + ) + def test_setdiff1d(self, xp: ModuleType): + x1 = xp.asarray([6, 5, 4, 7, 1, 2, 7, 4]) + x2 = xp.asarray([2, 4, 3, 3, 2, 1, 5]) + + expected = xp.asarray([6, 7]) + actual = setdiff1d(x1, x2) + xp_assert_equal(actual, expected) + + x1 = xp.arange(21) + x2 = xp.arange(19) + expected = xp.asarray([19, 20]) + actual = setdiff1d(x1, x2) + xp_assert_equal(actual, expected) + + xp_assert_equal(setdiff1d(xp.empty(0), xp.empty(0)), xp.empty(0)) + x1 = xp.empty(0, dtype=xp.uint32) + x2 = x1 + assert xp.isdtype(setdiff1d(x1, x2).dtype, xp.uint32) + + def test_assume_unique(self, xp: ModuleType): + x1 = xp.asarray([3, 2, 1]) + x2 = xp.asarray([7, 5, 2]) + expected = xp.asarray([3, 1]) + actual = setdiff1d(x1, x2, assume_unique=True) + xp_assert_equal(actual, expected) + + @assume_unique + @pytest.mark.parametrize("shape1", [(), (1,), (1, 1)]) + @pytest.mark.parametrize("shape2", [(), (1,), (1, 1)]) + def test_shapes( + self, + assume_unique: bool, + shape1: tuple[int, ...], + shape2: tuple[int, ...], + xp: ModuleType, + ): + x1 = xp.zeros(shape1) + x2 = xp.zeros(shape2) + actual = setdiff1d(x1, x2, assume_unique=assume_unique) + xp_assert_equal(actual, xp.empty((0,))) + + @assume_unique + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") + def test_python_scalar(self, xp: ModuleType, assume_unique: bool): + # Test no dtype promotion to xp.asarray(x2); use x1.dtype + x1 = xp.asarray([3, 1, 2], dtype=xp.int16) + x2 = 3 + actual = setdiff1d(x1, x2, assume_unique=assume_unique) + xp_assert_equal(actual, xp.asarray([1, 2], dtype=xp.int16)) + + actual = setdiff1d(x2, x1, assume_unique=assume_unique) + xp_assert_equal(actual, xp.asarray([], dtype=xp.int16)) + + xp_assert_equal( + setdiff1d(0, 0, assume_unique=assume_unique, xp=xp), + xp.asarray([0])[:0], # Default int dtype for backend + ) + + @pytest.mark.parametrize("assume_unique", [True, False]) + def test_all_python_scalars(self, assume_unique: bool): + with pytest.raises(TypeError, match="Unrecognized"): + _ = setdiff1d(0, 0, assume_unique=assume_unique) + + @assume_unique + @pytest.mark.skip_xp_backend( + Backend.TORCH, reason="device='meta' does not support unknown shapes" + ) + def test_device(self, xp: ModuleType, device: Device, assume_unique: bool): + x1 = xp.asarray([3, 8, 20], device=device) + x2 = xp.asarray([2, 3, 4], device=device) + assert get_device(setdiff1d(x1, x2, assume_unique=assume_unique)) == device + + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") + def test_xp(self, xp: ModuleType): + x1 = xp.asarray([3, 8, 20]) + x2 = xp.asarray([2, 3, 4]) + expected = xp.asarray([8, 20]) + actual = setdiff1d(x1, x2, assume_unique=True, xp=xp) + xp_assert_equal(actual, expected) + + +class TestSinc: def test_simple(self, xp: ModuleType): - a = xp.asarray([[1, 1], [0, 2], [2, 2]]) - xp_assert_equal(nunique(a), xp.asarray(3)) + xp_assert_equal(sinc(xp.asarray(0.0)), xp.asarray(1.0)) + x = xp.asarray(np.linspace(-1, 1, 100)) + w = sinc(x) + # check symmetry + xp_assert_close(w, xp.flip(w, axis=0)) - def test_empty(self, xp: ModuleType): - a = xp.asarray([]) - xp_assert_equal(nunique(a), xp.asarray(0)) + @pytest.mark.parametrize("x", [0, 1 + 3j]) + def test_dtype(self, xp: ModuleType, x: int | complex): + with pytest.raises(ValueError, match="real floating data type"): + _ = sinc(xp.asarray(x)) + + def test_3d(self, xp: ModuleType): + x = np.arange(18, dtype=np.float64).reshape((3, 3, 2)) + expected = np.zeros_like(x) + expected[0, 0, 0] = 1 + x = xp.asarray(x) + expected = xp.asarray(expected) + xp_assert_close(sinc(x), expected, atol=1e-15) def test_device(self, xp: ModuleType, device: Device): - a = xp.asarray(0.0, device=device) - assert get_device(nunique(a)) == device + x = xp.asarray(0.0, device=device) + assert get_device(sinc(x)) == device def test_xp(self, xp: ModuleType): - a = xp.asarray([[1, 1], [0, 2], [2, 2]]) - xp_assert_equal(nunique(a, xp=xp), xp.asarray(3)) + xp_assert_equal(sinc(xp.asarray(0.0), xp=xp), xp.asarray(1.0)) diff --git a/tests/test_helpers.py b/tests/test_helpers.py new file mode 100644 index 00000000..77ba8cd8 --- /dev/null +++ b/tests/test_helpers.py @@ -0,0 +1,433 @@ +from collections.abc import Iterator +from types import ModuleType +from typing import TYPE_CHECKING, Generic, TypeVar, cast + +import numpy as np +import pytest + +from array_api_extra._lib._backends import Backend +from array_api_extra._lib._testing import xp_assert_equal +from array_api_extra._lib._utils._compat import array_namespace +from array_api_extra._lib._utils._compat import device as get_device +from array_api_extra._lib._utils._helpers import ( + asarrays, + capabilities, + eager_shape, + in1d, + jax_autojit, + meta_namespace, + ndindex, + pickle_flatten, + pickle_unflatten, +) +from array_api_extra._lib._utils._typing import Array, Device, DType +from array_api_extra.testing import lazy_xp_function + +from .conftest import np_compat + +if TYPE_CHECKING: # pragma: no cover + # TODO import from typing (requires Python >=3.12) + from typing_extensions import override +else: + + def override(func): + return func + + +T = TypeVar("T") + +# FIXME calls xp.unique_values without size +lazy_xp_function(in1d, jax_jit=False) + + +@pytest.mark.xfail_xp_backend(Backend.SPARSE, reason="no unique_inverse") +@pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="no unique_inverse") +class TestIn1D: + # cover both code paths + @pytest.mark.parametrize( + "n", + [ + pytest.param(9, id="fast path"), + pytest.param( + 15, + id="slow path", + marks=pytest.mark.xfail_xp_backend( + Backend.DASK, reason="NaN-shaped array" + ), + ), + ], + ) + def test_no_invert_assume_unique(self, xp: ModuleType, n: int): + x1 = xp.asarray([3, 8, 20]) + x2 = xp.arange(n) + expected = xp.asarray([True, True, False]) + actual = in1d(x1, x2) + xp_assert_equal(actual, expected) + + def test_device(self, xp: ModuleType, device: Device): + x1 = xp.asarray([3, 8, 20], device=device) + x2 = xp.asarray([2, 3, 4], device=device) + assert get_device(in1d(x1, x2)) == device + + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="xp=xp") + def test_xp(self, xp: ModuleType): + x1 = xp.asarray([1, 6]) + x2 = xp.asarray([0, 1, 2, 3, 4]) + expected = xp.asarray([True, False]) + actual = in1d(x1, x2, xp=xp) + xp_assert_equal(actual, expected) + + +class TestAsArrays: + @pytest.mark.parametrize( + ("dtype", "b", "defined"), + [ + # Well-defined cases of dtype promotion from Python scalar to Array + # bool vs. bool + ("bool", True, True), + # int vs. xp.*int*, xp.float*, xp.complex* + ("int16", 1, True), + ("uint8", 1, True), + ("float32", 1, True), + ("float64", 1, True), + ("complex64", 1, True), + ("complex128", 1, True), + # float vs. xp.float, xp.complex + ("float32", 1.0, True), + ("float64", 1.0, True), + ("complex64", 1.0, True), + ("complex128", 1.0, True), + # complex vs. xp.complex + ("complex64", 1.0j, True), + ("complex128", 1.0j, True), + # Undefined cases + ("bool", 1, False), + ("int64", 1.0, False), + ("float64", 1.0j, False), + ], + ) + def test_array_vs_scalar( + self, dtype: str, b: complex, defined: bool, xp: ModuleType + ): + a = xp.asarray(1, dtype=getattr(xp, dtype)) + + xa, xb = asarrays(a, b, xp) + assert xa.dtype == a.dtype + if defined: + assert xb.dtype == a.dtype + else: + assert xb.dtype == xp.asarray(b).dtype + + xbr, xar = asarrays(b, a, xp) + assert xar.dtype == xa.dtype + assert xbr.dtype == xb.dtype + + def test_scalar_vs_scalar(self, xp: ModuleType): + a, b = asarrays(1, 2.2, xp=xp) + assert a.dtype == xp.asarray(1).dtype # Default dtype + assert b.dtype == xp.asarray(2.2).dtype # Default dtype; not broadcasted + + ALL_TYPES: tuple[str, ...] = ( + "int8", + "int16", + "int32", + "int64", + "uint8", + "uint16", + "uint32", + "uint64", + "float32", + "float64", + "complex64", + "complex128", + "bool", + ) + + @pytest.mark.parametrize("a_type", ALL_TYPES) + @pytest.mark.parametrize("b_type", ALL_TYPES) + def test_array_vs_array(self, a_type: str, b_type: str, xp: ModuleType): + """ + Test that when both inputs of asarray are already Array API objects, + they are returned unchanged. + """ + a = xp.asarray(1, dtype=getattr(xp, a_type)) + b = xp.asarray(1, dtype=getattr(xp, b_type)) + xa, xb = asarrays(a, b, xp) + assert xa.dtype == a.dtype + assert xb.dtype == b.dtype + + @pytest.mark.parametrize("dtype", [np.float64, np.complex128]) + def test_numpy_generics(self, dtype: DType): + """ + Test special case of np.float64 and np.complex128, + which are subclasses of float and complex. + """ + a = cast(Array, dtype(0)) # type: ignore[operator] # pyright: ignore[reportCallIssue] + xa, xb = asarrays(a, 0, xp=np_compat) + assert xa.dtype == dtype + assert xb.dtype == dtype + + +@pytest.mark.parametrize( + "shape", [(), (1,), (5,), (2, 3), (5, 3, 8), (0,), (3, 0), (0, 0, 1)] +) +def test_ndindex(shape: tuple[int, ...]): + assert tuple(ndindex(*shape)) == tuple(np.ndindex(*shape)) + + +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="index by sparse array") +@pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="boolean indexing") +def test_eager_shape(xp: ModuleType, library: Backend): + a = xp.asarray([1, 2, 3]) + # Lazy arrays, like Dask, have an eager shape until you slice them with + # a lazy boolean mask + assert eager_shape(a) == a.shape == (3,) + + b = a[a > 2] + if library is Backend.DASK: + with pytest.raises(TypeError, match="Unsupported lazy shape"): + _ = eager_shape(b) + # FIXME can't test use case for None in the shape until we add support for + # other lazy backends + else: + assert eager_shape(b) == b.shape == (1,) + + +class TestMetaNamespace: + @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY, reason="namespace tests") + def test_basic(self, xp: ModuleType, library: Backend): + args = None, xp.asarray(0), 1 + expect = np_compat if library is Backend.DASK else xp + assert meta_namespace(*args) is expect + + def test_dask_metas(self, da: ModuleType): + cp = pytest.importorskip("cupy") + cp_compat = array_namespace(cp.empty(0)) + args = None, da.from_array(cp.asarray(0)), 1 + assert meta_namespace(*args) is cp_compat + + def test_xp(self, xp: ModuleType): + args = None, xp.asarray(0), 1 + assert meta_namespace(*args, xp=xp) in (xp, np_compat) + + +class TestCapabilities: + def test_basic(self, xp: ModuleType): + expect = {"boolean indexing", "data-dependent shapes"} + if xp.__array_api_version__ >= "2024.12": + expect.add("max dimensions") + assert capabilities(xp).keys() == expect + + def test_device(self, xp: ModuleType, library: Backend, device: Device): + expect_keys = {"boolean indexing", "data-dependent shapes"} + if xp.__array_api_version__ >= "2024.12": + expect_keys.add("max dimensions") + assert capabilities(xp, device=device).keys() == expect_keys + + if library.like(Backend.TORCH): + # The output of capabilities is device-specific. + + # Test that device=None gets the current default device. + expect = capabilities(xp, device=device) + with xp.device(device): + actual = capabilities(xp) + assert actual == expect + + # Test that we're accepting anything that is accepted by the + # device= parameter in other functions + actual = capabilities(xp, device=device.type) # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + +class Wrapper(Generic[T]): # noqa: PLW1641 + """Trivial opaque wrapper. Must be pickleable.""" + + x: T + # __slots__ make this object serializable with __reduce_ex__(5), + # but not with __reduce__ + __slots__: tuple[str, ...] = ("x",) + + def __init__(self, x: T): + self.x = x + + # Note: this makes the object not hashable + @override + def __eq__(self, other: object) -> bool: + return isinstance(other, Wrapper) and self.x == other.x + + +class TestPickleFlatten: + def test_roundtrip(self): + class NotSerializable: + @override + def __reduce__(self) -> tuple[object, ...]: + raise NotImplementedError() + + # Note: NotHashable() instances can be reduced to an + # unserializable local class + class NotHashable: # noqa: PLW1641 + @override + def __eq__(self, other: object) -> bool: + return isinstance(other, type(self)) and other.__dict__ == self.__dict__ + + with pytest.raises(TypeError): + _ = hash(NotHashable()) + + # Extracted objects need be neither pickleable nor serializable + class C(NotSerializable, NotHashable): + x: int + + def __init__(self, x: int): + self.x = x + + class D(C): + pass + + c1 = C(1) + c2 = C(2) + d3 = D(3) + + # An assorted bunch of opaque containers, standard containers, + # non-serializable objects, and non-hashable objects (but not at the same time) + obj = Wrapper([1, c1, {2: (c2, {NotSerializable()})}, NotHashable(), d3]) + instances, rest = pickle_flatten(obj, C) + + assert instances == [c1, c2, d3] + obj2 = pickle_unflatten(instances, rest) + assert obj2 == obj + + def test_swap_objects(self): + class C: + pass + + obj = [1, C(), {2: (C(), {C()})}] + _, rest = pickle_flatten(obj, C) + obj2 = pickle_unflatten(["foo", "bar", "baz"], rest) + assert obj2 == [1, "foo", {2: ("bar", {"baz"})}] + + def test_multi_class(self): + class C: + pass + + class D: + pass + + c, d = C(), D() + instances, _ = pickle_flatten([c, d], (C, D)) + assert len(instances) == 2 + assert instances[0] is c + assert instances[1] is d + + def test_no_class(self): + obj = {1: "foo", 2: (3, 4)} + instances, rest = pickle_flatten(obj, ()) # type: ignore[var-annotated] + assert instances == [] + obj2 = pickle_unflatten([], rest) + assert obj2 == obj + + def test_flattened_stream(self): + """ + Test that multiple calls to flatten() can feed into the same stream of instances + """ + obj1 = Wrapper(1) + obj2 = [Wrapper(2), Wrapper(3)] + instances1, rest1 = pickle_flatten(obj1, Wrapper) + instances2, rest2 = pickle_flatten(obj2, Wrapper) + it = iter(instances1 + instances2 + [Wrapper(4)]) + assert pickle_unflatten(it, rest1) == obj1 + assert pickle_unflatten(it, rest2) == obj2 + assert list(it) == [Wrapper(4)] + + def test_too_short(self): + obj = [Wrapper(1), Wrapper(2)] + instances, rest = pickle_flatten(obj, Wrapper) + with pytest.raises(ValueError, match="Not enough"): + pickle_unflatten(instances[:1], rest) + + def test_recursion(self): + obj: list[object] = [Wrapper(1)] + obj.append(obj) + + instances, rest = pickle_flatten(obj, Wrapper) + assert instances == [Wrapper(1)] + + obj2 = pickle_unflatten(instances, rest) + assert len(obj2) == 2 + assert obj2[0] is obj[0] + assert obj2[1] is obj2 + + +class TestJAXAutoJIT: + def test_basic(self, jnp: ModuleType): + @jax_autojit + def f(x: Array, k: object = False) -> Array: + return x + 1 if k else x - 1 + + # Basic recognition of static_argnames + xp_assert_equal(f(jnp.asarray([1, 2])), jnp.asarray([0, 1])) + xp_assert_equal(f(jnp.asarray([1, 2]), False), jnp.asarray([0, 1])) + xp_assert_equal(f(jnp.asarray([1, 2]), True), jnp.asarray([2, 3])) + xp_assert_equal(f(jnp.asarray([1, 2]), 1), jnp.asarray([2, 3])) + + # static argument is not an ArrayLike + xp_assert_equal(f(jnp.asarray([1, 2]), "foo"), jnp.asarray([2, 3])) + + # static argument is not hashable, but serializable + xp_assert_equal(f(jnp.asarray([1, 2]), ["foo"]), jnp.asarray([2, 3])) + + def test_wrapper(self, jnp: ModuleType): + @jax_autojit + def f(w: Wrapper[Array]) -> Wrapper[Array]: + return Wrapper(w.x + 1) + + inp = Wrapper(jnp.asarray([1, 2])) + out = f(inp).x + xp_assert_equal(out, jnp.asarray([2, 3])) + + def test_static_hashable(self, jnp: ModuleType): + """Static argument/return value is hashable, but not serializable""" + + class C: + def __reduce__(self) -> object: # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride,reportImplicitOverride] + raise Exception() + + @jax_autojit + def f(x: object) -> object: + return x + + inp = C() + out = f(inp) + assert out is inp + + # Serializable opaque input contains non-serializable object plus array + winp = Wrapper((C(), jnp.asarray([1, 2]))) + out = f(winp) + assert isinstance(out, Wrapper) + assert out.x[0] is winp.x[0] + assert out.x[1] is not winp.x[1] + xp_assert_equal(out.x[1], winp.x[1]) + + def test_arraylikes_are_static(self): + pytest.importorskip("jax") + + @jax_autojit + def f(x: list[int]) -> list[int]: + assert isinstance(x, list) + assert x == [1, 2] + return [3, 4] + + out = f([1, 2]) + assert isinstance(out, list) + assert out == [3, 4] + + def test_iterators(self, jnp: ModuleType): + @jax_autojit + def f(x: Array) -> Iterator[Array]: + return (x + i for i in range(2)) + + inp = jnp.asarray([1, 2]) + out = f(inp) + assert isinstance(out, Iterator) + xp_assert_equal(next(out), jnp.asarray([1, 2])) + xp_assert_equal(next(out), jnp.asarray([2, 3])) + with pytest.raises(StopIteration): + _ = next(out) diff --git a/tests/test_lazy.py b/tests/test_lazy.py new file mode 100644 index 00000000..07904a33 --- /dev/null +++ b/tests/test_lazy.py @@ -0,0 +1,454 @@ +import contextlib +from types import ModuleType +from typing import cast + +import numpy as np +import pytest + +import array_api_extra as xpx # Let some tests bypass lazy_xp_function +from array_api_extra import lazy_apply +from array_api_extra._lib._backends import Backend +from array_api_extra._lib._testing import xp_assert_equal +from array_api_extra._lib._utils import _compat +from array_api_extra._lib._utils._compat import array_namespace, is_dask_array +from array_api_extra._lib._utils._helpers import eager_shape +from array_api_extra._lib._utils._typing import Array, Device +from array_api_extra.testing import lazy_xp_function + +lazy_xp_function(lazy_apply) + +as_numpy = pytest.mark.parametrize( + "as_numpy", + [ + False, + pytest.param( + True, + marks=[ + pytest.mark.skip_xp_backend(Backend.CUPY, reason="device->host copy"), + pytest.mark.skip_xp_backend( + Backend.TORCH_GPU, reason="device->host copy" + ), + pytest.mark.skip_xp_backend(Backend.SPARSE, reason="densification"), + ], + ), + ], +) + + +@as_numpy +@pytest.mark.parametrize("shape", [(2,), (3, 2)]) +@pytest.mark.parametrize("dtype", ["int32", "float64"]) +def test_lazy_apply_simple( + xp: ModuleType, library: Backend, shape: tuple[int, ...], dtype: str, as_numpy: bool +): + def f(x: Array) -> Array: + xp2 = array_namespace(x) + if as_numpy or library in (Backend.NUMPY_READONLY, Backend.DASK): + assert isinstance(x, np.ndarray) + else: + assert xp2 is xp + + y = xp2.broadcast_to(xp2.astype(x + 1, getattr(xp2, dtype)), shape) + return xp2.asarray(y, copy=True) # PyTorch: ensure writeable NumPy array + + x = xp.asarray([1, 2], dtype=xp.int16) + expect = xp.broadcast_to(xp.astype(x + 1, getattr(xp, dtype)), shape) + actual = lazy_apply(f, x, shape=shape, dtype=getattr(xp, dtype), as_numpy=as_numpy) + xp_assert_equal(actual, expect) + + +@as_numpy +def test_lazy_apply_broadcast(xp: ModuleType, as_numpy: bool): + """Test that default shape and dtype are broadcasted from the inputs.""" + + def f(x: Array, y: Array) -> Array: + return x + y + + x = xp.asarray([1, 2], dtype=xp.int16) + y = xp.asarray([[4], [5], [6]], dtype=xp.int32) + z = lazy_apply(f, x, y, as_numpy=as_numpy) + xp_assert_equal(z, x + y) + + +@as_numpy +def test_lazy_apply_multi_output(xp: ModuleType, as_numpy: bool): + def f(x: Array) -> tuple[Array, Array]: + xp2 = array_namespace(x) + y = x + xp2.asarray(2, dtype=xp2.int8) # Sparse: bad dtype propagation + z = xp2.broadcast_to(xp2.astype(x + 1, xp2.int16), (3, 2)) + z = xp2.asarray(z, copy=True) # PyTorch: ensure writeable NumPy array + return y, z + + x = xp.asarray([1, 2], dtype=xp.int8) + expect = ( + xp.asarray([3, 4], dtype=xp.int8), + xp.asarray([[2, 3], [2, 3], [2, 3]], dtype=xp.int16), + ) + actual = lazy_apply( + f, x, shape=((2,), (3, 2)), dtype=(xp.int8, xp.int16), as_numpy=as_numpy + ) + assert isinstance(actual, tuple) + assert len(actual) == 2 + xp_assert_equal(actual[0], expect[0]) + xp_assert_equal(actual[1], expect[1]) + + +@pytest.mark.parametrize( + "as_numpy", + [ + False, + pytest.param( + True, + marks=[ + pytest.mark.skip_xp_backend(Backend.CUPY, reason="device->host copy"), + pytest.mark.skip_xp_backend( + Backend.TORCH_GPU, reason="device->host copy" + ), + pytest.mark.skip_xp_backend(Backend.SPARSE, reason="densification"), + ], + ), + ], +) +def test_lazy_apply_multi_output_broadcast_dtype(xp: ModuleType, as_numpy: bool): + """ + If dtype is omitted and there are multiple shapes, use the same + dtype for all output arrays, broadcasted from the inputs + """ + + def f(x: Array, y: Array) -> tuple[Array, Array]: + return x + y, x - y + + x = xp.asarray([1, 2], dtype=xp.float32) + y = xp.asarray([3], dtype=xp.float64) + expect = ( + xp.asarray([4, 5], dtype=xp.float64), + xp.asarray([-2, -1], dtype=xp.float64), + ) + actual = lazy_apply(f, x, y, shape=((2,), (2,)), as_numpy=as_numpy) + assert isinstance(actual, tuple) + assert len(actual) == 2 + xp_assert_equal(actual[0], expect[0]) + xp_assert_equal(actual[1], expect[1]) + + +def test_lazy_apply_core_indices(da: ModuleType): + """ + Test that a function that performs reductions along axes does so + globally and not locally to each Dask chunk. + """ + + def f(x: Array) -> Array: + xp = array_namespace(x) + return xp.sum(x, axis=0) + x + + x_np = cast(Array, np.arange(15).reshape(5, 3)) # pyright: ignore[reportInvalidCast] + expect = da.asarray(f(x_np)) + x_da = da.asarray(x_np).rechunk(3) + + # A naive map_blocks fails because it applies f to each chunk separately, + # but f needs to reduce along axis 0 which is broken into multiple chunks. + # axis 0 is a "core axis" or "core index" (from xarray.apply_ufunc's + # "core dimension"). + with pytest.raises(AssertionError): + xp_assert_equal(da.map_blocks(f, x_da), expect) + + xp_assert_equal(lazy_apply(f, x_da), expect) + + +def test_lazy_apply_dont_run_on_meta(da: ModuleType): + """Test that Dask won't try running func on the meta array, + as it may have minimum size requirements. + """ + + def f(x: Array) -> Array: + assert x.size + return x + 1 + + x = da.arange(10) + assert not x._meta.size + y = lazy_apply(f, x) + xp_assert_equal(y, x + 1) + + +def test_lazy_apply_dask_non_numpy_meta(da: ModuleType): + """Test Dask wrapping around a meta-namespace other than numpy.""" + # At the moment of writing, of all Array API namespaces CuPy is + # the only one that Dask supports. + # For this reason, we can only test as_numpy=False since + # np.asarray(cp.Array) is blocked by the transfer guard. + + cp = pytest.importorskip("cupy") + cp = array_namespace(cp.empty(0)) + x_cp = cp.asarray([1, 2, 3]) + x_da = da.asarray([1, 2, 3]).map_blocks(cp.asarray) + assert array_namespace(x_da._meta) is cp + + def f(x: Array) -> Array: + return x + 1 + + y = lazy_apply(f, x_da) + assert array_namespace(y._meta) is cp # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + xp_assert_equal(y.compute(), x_cp + 1) # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + +def test_dask_key(da: ModuleType): + """Test that the function name is visible on the Dask dashboard and in metrics.""" + + def helloworld(x: Array) -> Array: + return x + 1 + + x = da.asarray([1, 2]) + # Use full namespace to bypass monkey-patching by lazy_xp_function, + # which calls persist() to materialize exceptions and warnings and in + # doing so squashes the graph. + y = xpx.lazy_apply(helloworld, x) + + prefixes = set() + for key in y.__dask_graph__(): # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + name = key[0] if isinstance(key, tuple) else key + assert isinstance(name, str) + prefixes.add(name.split("-")[0]) + + assert "helloworld" in prefixes + + +def test_lazy_apply_none_shape_in_args(xp: ModuleType, library: Backend): + x = xp.asarray([1, 1, 2, 2, 2]) + + # TODO mxp = meta_namespace(x, xp=xp) + mxp = np if library is Backend.DASK else xp + int_type = xp.asarray(0).dtype + + ctx: contextlib.AbstractContextManager[object] + if library.like(Backend.JAX): + ctx = pytest.raises(ValueError, match="Output shape must be fully known") + elif library is Backend.ARRAY_API_STRICTEST: + ctx = pytest.raises(RuntimeError, match="data-dependent shapes") + else: + ctx = contextlib.nullcontext() + + # Single output + with ctx: + values = lazy_apply(mxp.unique_values, x, shape=(None,)) + xp_assert_equal(xp.sort(values), xp.asarray([1, 2])) + + with ctx: + # Multi output + values, counts = lazy_apply( + mxp.unique_counts, + x, + shape=((None,), (None,)), + dtype=(x.dtype, int_type), + ) + xp_assert_equal(values, xp.asarray([1, 2])) + xp_assert_equal(counts, xp.asarray([2, 3])) + + +def check_lazy_apply_none_shape_broadcast(x: Array) -> Array: + def f(x: Array) -> Array: + return x + + x = x[x > 1] + # Use explicit namespace to bypass monkey-patching by lazy_xp_function + return xpx.lazy_apply(f, x) + + +lazy_xp_function(check_lazy_apply_none_shape_broadcast) + + +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="index by sparse array") +@pytest.mark.skip_xp_backend(Backend.JAX, reason="boolean indexing") +@pytest.mark.skip_xp_backend(Backend.JAX_GPU, reason="boolean indexing") +@pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="boolean indexing") +def test_lazy_apply_none_shape_broadcast(xp: ModuleType): + """Broadcast from input array with unknown shape""" + x = xp.asarray([1, 2, 2]) + actual = check_lazy_apply_none_shape_broadcast(x) + xp_assert_equal(actual, xp.asarray([2, 2])) + + +@pytest.mark.parametrize( + "as_numpy", + [ + False, + pytest.param( + True, + marks=[ + pytest.mark.skip_xp_backend( + Backend.ARRAY_API_STRICT, reason="device->host copy" + ), + pytest.mark.skip_xp_backend(Backend.CUPY, reason="device->host copy"), + pytest.mark.skip_xp_backend( + Backend.TORCH, reason="materialize 'meta' device" + ), + pytest.mark.skip_xp_backend( + Backend.TORCH_GPU, reason="device->host copy" + ), + pytest.mark.skip_xp_backend(Backend.SPARSE, reason="densification"), + ], + ), + ], +) +def test_lazy_apply_device(xp: ModuleType, as_numpy: bool, device: Device): + def f(x: Array) -> Array: + xp2 = array_namespace(x) + # Deliberately forgetting to add device here to test that the + # output is transferred to the right device. This is necessary when + # as_numpy=True anyway. + return xp2.zeros(x.shape, dtype=x.dtype) + + x = xp.asarray([1, 2], device=device) + y = lazy_apply(f, x, as_numpy=as_numpy) + assert _compat.device(y) == device + + +def test_lazy_apply_arraylike(xp: ModuleType): + """Wrapped func returns an array-like""" + x = xp.asarray([1, 2, 3]) + + # Single output + def f(x: Array) -> int: + shape = eager_shape(x) + return shape[0] + + expect = xp.asarray(3) + actual = lazy_apply(f, x, shape=(), dtype=expect.dtype) + xp_assert_equal(actual, expect) + + # Multi output + def g(x: Array) -> tuple[int, list[int]]: + shape = eager_shape(x) + return shape[0], list(shape) + + actual2 = lazy_apply(g, x, shape=((), (1,)), dtype=(expect.dtype, expect.dtype)) + xp_assert_equal(actual2[0], xp.asarray(3)) + xp_assert_equal(actual2[1], xp.asarray([3])) + + +def test_lazy_apply_scalars_and_nones(xp: ModuleType, library: Backend): + def f(x: Array, y: None, z: int | Array) -> Array: + mxp = array_namespace(x, y, z) + mtyp = type(mxp.asarray(0)) + assert isinstance(x, mtyp) + assert y is None + # jax.pure_callback wraps scalar args + assert isinstance(z, mtyp if library.like(Backend.JAX) else int) + return x + z + + x = xp.asarray([1, 2]) + w = lazy_apply(f, x, None, 3) + xp_assert_equal(w, x + 3) + + +def check_lazy_apply_kwargs(x: Array, expect_cls: type, as_numpy: bool) -> Array: + is_dask = is_dask_array(x) + recursive: list[object] = [] + if not is_dask: # dask.delayed crashes on recursion + recursive.append(recursive) + + def eager( + x: Array, + z: dict[int, list[int]], + msg: str, + msgs: list[str], + scalar: int, + recursive: list[list[object]], + ) -> Array: + assert isinstance(x, expect_cls) + # JAX will crash if x isn't material + assert int(x) == 0 + # Did we re-wrap the namedtuple correctly, or did it get + # accidentally changed to a basic tuple? + assert z == {0: [1, 2]} + assert msg == "Hello World" # must be hidden from JAX + assert msgs[0] == "Hello World" # must be hidden from JAX + assert isinstance(msg, str) + assert isinstance(msgs[0], str) + assert scalar == 1 # must be hidden from JAX + assert isinstance(scalar, int) + assert isinstance(recursive, list) + if not is_dask: + assert recursive[0][0] is recursive[0] + return x + 1 + + # Use explicit namespace to bypass monkey-patching by lazy_xp_function + return xpx.lazy_apply( # pyright: ignore[reportCallIssue] + eager, + x, + z={0: [1, 2]}, + msg="Hello World", + msgs=["Hello World"], + # This will be automatically cast to jax.Array if we don't wrap it + scalar=1, + recursive=recursive, + shape=x.shape, + dtype=x.dtype, + as_numpy=as_numpy, + ) + + +lazy_xp_function(check_lazy_apply_kwargs) + + +@as_numpy +def test_lazy_apply_kwargs(xp: ModuleType, library: Backend, as_numpy: bool): + """When as_numpy=True, search and replace arrays in the (nested) keywords arguments + with numpy arrays, and leave the rest untouched.""" + x = xp.asarray(0) + expect_cls = np.ndarray if as_numpy or library is Backend.DASK else type(x) + actual = check_lazy_apply_kwargs(x, expect_cls, as_numpy) + xp_assert_equal(actual, x + 1) + + +class CustomError(Exception): + pass + + +def raises(x: Array) -> Array: + def eager(_: Array) -> Array: + msg = "Hello World" + raise CustomError(msg) + + # Use explicit namespace to bypass monkey-patching by lazy_xp_function + return xpx.lazy_apply(eager, x, shape=x.shape, dtype=x.dtype) + + +# jax.pure_callback does not support raising +# https://github.com/jax-ml/jax/issues/26102 +lazy_xp_function(raises, jax_jit=False) + + +def test_lazy_apply_raises(xp: ModuleType): + """ + See Also + -------- + test_testing.py::test_lazy_xp_function_eagerly_raises + """ + x = xp.asarray(0) + + with pytest.raises(CustomError, match="Hello World"): + # Here we are disregarding the return value, which would + # normally cause the graph not to materialize and the + # exception not to be raised. + # However, lazy_xp_function will do it for us on function exit. + _ = raises(x) + + +def test_invalid_args(): + def f(x: Array) -> Array: + return x + + x = np.asarray(1) + + with pytest.raises(ValueError, match="at least one argument array"): + _ = lazy_apply(f, shape=(1,), dtype=np.int32, xp=np) + with pytest.raises(ValueError, match="at least one argument array"): + _ = lazy_apply(f, 1, shape=(1,), dtype=np.int32, xp=np) + with pytest.raises(ValueError, match="at least one argument array"): + _ = lazy_apply(f, shape=(1,), dtype=np.int32) + with pytest.raises(ValueError, match="multiple shapes but only one dtype"): + _ = lazy_apply(f, x, shape=[(1,), (2,)], dtype=np.int32) # type: ignore[call-overload] # pyright: ignore[reportCallIssue,reportArgumentType] + with pytest.raises(ValueError, match="single shape but multiple dtypes"): + _ = lazy_apply(f, x, shape=(1,), dtype=[np.int32, np.int64]) # pyright: ignore[reportCallIssue,reportArgumentType] + with pytest.raises(ValueError, match="2 shapes and 1 dtypes"): + _ = lazy_apply(f, x, shape=[(1,), (2,)], dtype=[np.int32]) # type: ignore[arg-type] # pyright: ignore[reportCallIssue,reportArgumentType] diff --git a/tests/test_testing.py b/tests/test_testing.py index 2dbc913a..be7b6103 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,67 +1,489 @@ +from collections.abc import Callable, Iterator +from types import ModuleType +from typing import cast + import numpy as np import pytest -from array_api_extra._lib import Backend -from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal +from array_api_extra._lib._backends import Backend +from array_api_extra._lib._testing import ( + as_numpy_array, + xp_assert_close, + xp_assert_equal, + xp_assert_less, +) +from array_api_extra._lib._utils._compat import ( + array_namespace, + is_dask_namespace, + is_jax_namespace, +) +from array_api_extra._lib._utils._typing import Array, Device +from array_api_extra.testing import lazy_xp_function, patch_lazy_xp_functions -# mypy: disable-error-code=no-any-decorated # pyright: reportUnknownParameterType=false,reportMissingParameterType=false -@pytest.mark.parametrize( - "func", - [ - xp_assert_equal, - pytest.param( - xp_assert_close, - marks=pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype"), - ), - ], -) -def test_assert_close_equal_basic(xp, func): - func(xp.asarray(0), xp.asarray(0)) - func(xp.asarray([1, 2]), xp.asarray([1, 2])) - - with pytest.raises(AssertionError, match="shapes do not match"): - func(xp.asarray([0]), xp.asarray([[0]])) - - with pytest.raises(AssertionError, match="dtypes do not match"): - func(xp.asarray(0, dtype=xp.float32), xp.asarray(0, dtype=xp.float64)) - - with pytest.raises(AssertionError): - func(xp.asarray([1, 2]), xp.asarray([1, 3])) - - with pytest.raises(AssertionError, match="hello"): - func(xp.asarray([1, 2]), xp.asarray([1, 3]), err_msg="hello") - - -@pytest.mark.skip_xp_backend(Backend.NUMPY) -@pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY) -@pytest.mark.parametrize( - "func", - [ - xp_assert_equal, - pytest.param( - xp_assert_close, - marks=pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype"), - ), - ], -) -def test_assert_close_equal_namespace(xp, func): - with pytest.raises(AssertionError): - func(xp.asarray(0), np.asarray(0)) - with pytest.raises(TypeError): - func(xp.asarray(0), 0) - with pytest.raises(TypeError): - func(xp.asarray([0]), [0]) - - -@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") -def test_assert_close_tolerance(xp): - xp_assert_close(xp.asarray([100.0]), xp.asarray([102.0]), rtol=0.03) - with pytest.raises(AssertionError): - xp_assert_close(xp.asarray([100.0]), xp.asarray([102.0]), rtol=0.01) - - xp_assert_close(xp.asarray([100.0]), xp.asarray([102.0]), atol=3) - with pytest.raises(AssertionError): - xp_assert_close(xp.asarray([100.0]), xp.asarray([102.0]), atol=1) +class TestAsNumPyArray: + def test_basic(self, xp: ModuleType): + x = xp.asarray([1, 2, 3]) + y = as_numpy_array(x, xp=xp) + xp_assert_equal(y, np.asarray([1, 2, 3])) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + + @pytest.mark.skip_xp_backend(Backend.TORCH, reason="materialize 'meta' device") + def test_device(self, xp: ModuleType, device: Device): + x = xp.asarray([1, 2, 3], device=device) + y = as_numpy_array(x, xp=xp) + xp_assert_equal(y, np.asarray([1, 2, 3])) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + + +class TestAssertEqualCloseLess: + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close]) + def test_assert_equal_close_basic(self, xp: ModuleType, func: Callable[..., None]): + func(xp.asarray(0), xp.asarray(0)) + func(xp.asarray([1, 2]), xp.asarray([1, 2])) + + with pytest.raises(AssertionError, match="Mismatched elements"): + func(xp.asarray([1, 2]), xp.asarray([2, 1])) + + with pytest.raises(AssertionError, match="hello"): + func(xp.asarray([1, 2]), xp.asarray([2, 1]), err_msg="hello") + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + def test_shape_dtype(self, xp: ModuleType, func: Callable[..., None]): + with pytest.raises(AssertionError, match="shapes do not match"): + func(xp.asarray([0]), xp.asarray([[0]])) + + with pytest.raises(AssertionError, match="dtypes do not match"): + func(xp.asarray(0, dtype=xp.float32), xp.asarray(0, dtype=xp.float64)) + + @pytest.mark.skip_xp_backend(Backend.NUMPY, reason="test other ns vs. numpy") + @pytest.mark.skip_xp_backend( + Backend.NUMPY_READONLY, reason="test other ns vs. numpy" + ) + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + def test_namespace(self, xp: ModuleType, func: Callable[..., None]): + with pytest.raises(AssertionError, match="namespaces do not match"): + func(xp.asarray(0), np.asarray(0)) + with pytest.raises(TypeError, match="Unrecognized array input"): + func(xp.asarray(0), 0) + with pytest.raises(TypeError, match="list is not a supported array type"): + func(xp.asarray([0]), [0]) + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + def test_check_shape(self, xp: ModuleType, func: Callable[..., None]): + a = xp.asarray([1] if func is xp_assert_less else [2]) + b = xp.asarray(2) + c = xp.asarray(0) + d = xp.asarray([2, 2]) + + with pytest.raises(AssertionError, match="shapes do not match"): + func(a, b) + func(a, b, check_shape=False) + with pytest.raises(AssertionError, match="Mismatched elements"): + func(a, c, check_shape=False) + with pytest.raises(AssertionError, match="sizes do not match"): + func(a, d, check_shape=False) + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + def test_check_dtype(self, xp: ModuleType, func: Callable[..., None]): + a = xp.asarray(1 if func is xp_assert_less else 2) + b = xp.asarray(2, dtype=xp.int16) + c = xp.asarray(0, dtype=xp.int16) + + with pytest.raises(AssertionError, match="dtypes do not match"): + func(a, b) + func(a, b, check_dtype=False) + with pytest.raises(AssertionError, match="Mismatched elements"): + func(a, c, check_dtype=False) + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + @pytest.mark.xfail_xp_backend( + Backend.SPARSE, reason="sparse [()] returns np.generic" + ) + def test_check_scalar( + self, xp: ModuleType, library: Backend, func: Callable[..., None] + ): + a = xp.asarray(1 if func is xp_assert_less else 2) + b = xp.asarray(2)[()] # Note: only makes a difference on NumPy + c = xp.asarray(0) + + func(a, b) + if library.like(Backend.NUMPY): + with pytest.raises(AssertionError, match="array-ness does not match"): + func(a, b, check_scalar=True) + else: + func(a, b, check_scalar=True) + with pytest.raises(AssertionError, match="Mismatched elements"): + func(a, c, check_scalar=True) + + @pytest.mark.parametrize("dtype", ["int64", "float64"]) + def test_assert_close_tolerance(self, dtype: str, xp: ModuleType): + a = xp.asarray([100], dtype=getattr(xp, dtype)) + b = xp.asarray([102], dtype=getattr(xp, dtype)) + + with pytest.raises(AssertionError, match="Mismatched elements"): + xp_assert_close(a, b) + + xp_assert_close(a, b, rtol=0.03) + with pytest.raises(AssertionError, match="Mismatched elements"): + xp_assert_close(a, b, rtol=0.01) + + xp_assert_close(a, b, atol=3) + with pytest.raises(AssertionError, match="Mismatched elements"): + xp_assert_close(a, b, atol=1) + + def test_assert_less(self, xp: ModuleType): + xp_assert_less(xp.asarray(-1), xp.asarray(0)) + xp_assert_less(xp.asarray([1, 2]), xp.asarray([2, 3])) + with pytest.raises(AssertionError, match="Mismatched elements"): + xp_assert_less(xp.asarray([1, 1]), xp.asarray([2, 1])) + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="index by sparse array") + @pytest.mark.skip_xp_backend(Backend.ARRAY_API_STRICTEST, reason="boolean indexing") + def test_none_shape(self, xp: ModuleType, func: Callable[..., None]): + """On Dask and other lazy backends, test that a shape with NaN's or None's + can be compared to a real shape. + """ + # actual has shape=(None, ) + a = xp.asarray([1] if func is xp_assert_less else [2]) + a = a[a > 0] + + func(a, xp.asarray([2])) + with pytest.raises(AssertionError, match="shapes do not match"): + func(a, xp.asarray(2)) + with pytest.raises(AssertionError, match="shapes do not match"): + func(a, xp.asarray([2, 3])) + with pytest.raises(AssertionError, match="Mismatched elements"): + func(a, xp.asarray([0])) + + # desired has shape=(None, ) + a = xp.asarray([3] if func is xp_assert_less else [2]) + a = a[a > 0] + + func(xp.asarray([2]), a) + with pytest.raises(AssertionError, match="shapes do not match"): + func(xp.asarray(2), a) + with pytest.raises(AssertionError, match="shapes do not match"): + func(xp.asarray([2, 3]), a) + with pytest.raises(AssertionError, match="Mismatched elements"): + func(xp.asarray([4]), a) + + @pytest.mark.parametrize("func", [xp_assert_equal, xp_assert_close, xp_assert_less]) + def test_device(self, xp: ModuleType, device: Device, func: Callable[..., None]): + a = xp.asarray([1] if func is xp_assert_less else [2], device=device) + b = xp.asarray([2], device=device) + c = xp.asarray([2, 2], device=device) + + func(a, b) + with pytest.raises(AssertionError, match="shapes do not match"): + func(a, c) + # This is normally performed by np.testing.assert_array_equal etc. + # but in case of torch device='meta' we have to do it manually + with pytest.raises(AssertionError, match="sizes do not match"): + func(a, c, check_shape=False) + + +def good_lazy(x: Array) -> Array: + """A function that behaves well in Dask and jax.jit""" + return x * 2.0 + + +def non_materializable(x: Array) -> Array: + """ + This function materializes the input array, so it will fail when wrapped in jax.jit + and it will trigger an expensive computation in Dask. + """ + xp = array_namespace(x) + # Crashes inside jax.jit + # On Dask, this triggers two computations of the whole graph + if xp.any(x < 0.0) or xp.any(x > 10.0): + msg = "Values must be in the [0, 10] range" + raise ValueError(msg) + return x + + +def non_materializable2(x: Array) -> Array: + return non_materializable(x) + + +def non_materializable3(x: Array) -> Array: + return non_materializable(x) + + +def non_materializable4(x: Array) -> Array: + return non_materializable(x) + + +def non_materializable5(x: Array) -> Array: + return non_materializable(x) + + +lazy_xp_function(good_lazy) +# Works on JAX and Dask +lazy_xp_function(non_materializable2, jax_jit=False, allow_dask_compute=2) +lazy_xp_function(non_materializable3, jax_jit=False, allow_dask_compute=True) +# Works on JAX, but not Dask +lazy_xp_function(non_materializable4, jax_jit=False, allow_dask_compute=1) +# Works neither on Dask nor JAX +lazy_xp_function(non_materializable5) + + +def test_lazy_xp_function(xp: ModuleType): + x = xp.asarray([1.0, 2.0]) + + xp_assert_equal(good_lazy(x), xp.asarray([2.0, 4.0])) + # Not wrapped + xp_assert_equal(non_materializable(x), xp.asarray([1.0, 2.0])) + # Wrapping explicitly disabled + xp_assert_equal(non_materializable2(x), xp.asarray([1.0, 2.0])) + xp_assert_equal(non_materializable3(x), xp.asarray([1.0, 2.0])) + + if is_jax_namespace(xp): + xp_assert_equal(non_materializable4(x), xp.asarray([1.0, 2.0])) + with pytest.raises( + TypeError, match="Attempted boolean conversion of traced array" + ): + _ = non_materializable5(x) # Wrapped + + elif is_dask_namespace(xp): + with pytest.raises( + AssertionError, + match=r"dask\.compute.* 2 times, but only up to 1 calls are allowed", + ): + _ = non_materializable4(x) + with pytest.raises( + AssertionError, + match=r"dask\.compute.* 1 times, but no calls are allowed", + ): + _ = non_materializable5(x) + + else: + xp_assert_equal(non_materializable4(x), xp.asarray([1.0, 2.0])) + xp_assert_equal(non_materializable5(x), xp.asarray([1.0, 2.0])) + + +def static_params(x: Array, n: int, flag: bool = False) -> Array: + """Function with static parameters that must not be jitted""" + if flag and n > 0: # This fails if n or flag are jitted arrays + return x * 2.0 + return x * 3.0 + + +lazy_xp_function(static_params) + + +def test_lazy_xp_function_static_params(xp: ModuleType): + x = xp.asarray([1.0, 2.0]) + xp_assert_equal(static_params(x, 1), xp.asarray([3.0, 6.0])) + xp_assert_equal(static_params(x, 1, True), xp.asarray([2.0, 4.0])) + xp_assert_equal(static_params(x, 1, False), xp.asarray([3.0, 6.0])) + xp_assert_equal(static_params(x, 0, False), xp.asarray([3.0, 6.0])) + xp_assert_equal(static_params(x, 1, flag=True), xp.asarray([2.0, 4.0])) + xp_assert_equal(static_params(x, n=1, flag=True), xp.asarray([2.0, 4.0])) + + +def test_lazy_xp_function_deprecated_static_argnames(): + with pytest.warns(DeprecationWarning, match="static_argnames"): + lazy_xp_function(static_params, static_argnames=["flag"]) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + with pytest.warns(DeprecationWarning, match="static_argnums"): + lazy_xp_function(static_params, static_argnums=[1]) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] + + +try: + # Test an arbitrary Cython ufunc (@cython.vectorize). + # When SCIPY_ARRAY_API is not set, this is the same as + # scipy.special.erf. + from scipy.special._ufuncs import erf # type: ignore[import-untyped] + + lazy_xp_function(erf) +except ImportError: + erf = None + + +@pytest.mark.skip_xp_backend(Backend.TORCH_GPU, reason="device->host copy") +@pytest.mark.filterwarnings("ignore:__array_wrap__:DeprecationWarning") # PyTorch +def test_lazy_xp_function_cython_ufuncs(xp: ModuleType, library: Backend): + pytest.importorskip("scipy") + assert erf is not None + x = xp.asarray([6.0, 7.0]) + if library.like(Backend.ARRAY_API_STRICT, Backend.JAX): + # array-api-strict arrays are auto-converted to NumPy + # which results in an assertion error for mismatched namespaces + # eager JAX arrays are auto-converted to NumPy in eager JAX + # and fail in jax.jit (which lazy_xp_function tests here) + with pytest.raises((TypeError, AssertionError)): + xp_assert_equal(cast(Array, erf(x)), xp.asarray([1.0, 1.0])) + else: + # CuPy, Dask and sparse define __array_ufunc__ and dispatch accordingly + # note that when sparse reduces to scalar it returns a np.generic, which + # would make xp_assert_equal fail. + xp_assert_equal(cast(Array, erf(x)), xp.asarray([1.0, 1.0])) + + +def dask_raises(x: Array) -> Array: + def _raises(x: Array) -> Array: + # Test that map_blocks doesn't eagerly call the function; + # dtype and meta should be sufficient to skip the trial run. + assert x.shape == (3,) + msg = "Hello world" + raise ValueError(msg) + + return x.map_blocks(_raises, dtype=x.dtype, meta=x._meta) # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] + + +lazy_xp_function(dask_raises) + + +def test_lazy_xp_function_eagerly_raises(da: ModuleType): + """Test that the pattern:: + + with pytest.raises(Exception): + func(x) + + works with Dask, even though it normally wouldn't as we're disregarding the func + output so the graph would not be ordinarily materialized. + lazy_xp_function contains ad-hoc code to materialize and reraise exceptions. + """ + x = da.arange(3) + with pytest.raises(ValueError, match="Hello world"): + _ = dask_raises(x) + + +class Wrapper: + """Trivial opaque wrapper. Must be pickleable.""" + + x: Array + + def __init__(self, x: Array): + self.x = x + + +def check_opaque_wrapper(w: Wrapper, xp: ModuleType) -> Wrapper: + assert isinstance(w, Wrapper) + assert array_namespace(w.x) == xp + return Wrapper(w.x + 1) + + +lazy_xp_function(check_opaque_wrapper) + + +def test_lazy_xp_function_opaque_wrappers(xp: ModuleType): + """ + Test that function input and output can be wrapped into arbitrary + serializable Python objects, even if jax.jit does not support them. + """ + x = xp.asarray([1, 2]) + xp2 = array_namespace(x) # Revert NUMPY_READONLY to array_api_compat.numpy + res = check_opaque_wrapper(Wrapper(x), xp2) + xp_assert_equal(res.x, xp.asarray([2, 3])) + + +def test_lazy_xp_function_opaque_wrappers_eagerly_raise(da: ModuleType): + """ + Like `test_lazy_xp_function_eagerly_raises`, but the returned object is + wrapped in an opaque wrapper. + """ + x = da.arange(3) + with pytest.raises(ValueError, match="Hello world"): + _ = Wrapper(dask_raises(x)) + + +def check_recursive(x: list[object]) -> list[object]: + assert isinstance(x, list) + assert x[1] is x + y: list[object] = [cast(Array, x[0]) + 1] + y.append(y) + return y + + +lazy_xp_function(check_recursive) + + +def test_lazy_xp_function_recursive(xp: ModuleType): + """Test that inputs and outputs can be recursive data structures.""" + x: list[object] = [xp.asarray([1, 2])] + x.append(x) + y = check_recursive(x) + assert isinstance(y, list) + xp_assert_equal(cast(Array, y[0]), xp.asarray([2, 3])) + assert y[1] is y + + +wrapped = ModuleType("wrapped") +naked = ModuleType("naked") + + +def f(x: Array) -> Array: + xp = array_namespace(x) + # Crash in jax.jit and trigger compute() on Dask + if not xp.all(x): + msg = "Values must be non-zero" + raise ValueError(msg) + return x + + +wrapped.f = f # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] +naked.f = f # type: ignore[attr-defined] # pyright: ignore[reportAttributeAccessIssue] +del f + + +lazy_xp_function(wrapped.f) +lazy_xp_modules = [wrapped] + + +def test_lazy_xp_modules(xp: ModuleType, library: Backend): + x = xp.asarray([1.0, 2.0]) + y = naked.f(x) + xp_assert_equal(y, x) + + if library.like(Backend.JAX): + with pytest.raises( + TypeError, match="Attempted boolean conversion of traced array" + ): + wrapped.f(x) + elif library.like(Backend.DASK): + with pytest.raises(AssertionError, match=r"dask\.compute"): + wrapped.f(x) + else: + y = wrapped.f(x) + xp_assert_equal(y, x) + + +def test_patch_lazy_xp_functions_deprecated_monkeypatch( + request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch +): + xp = pytest.importorskip("dask.array") + + x = xp.asarray([1.0, 2.0]) + y = non_materializable5(x) + xp_assert_equal(y, x) + + with pytest.warns(DeprecationWarning, match="`monkeypatch` parameter"): + _ = patch_lazy_xp_functions(request, monkeypatch, xp=xp) + + with pytest.raises(AssertionError, match=r"dask\.compute.* 1 times"): + _ = non_materializable5(x) + + monkeypatch.undo() + y = non_materializable5(x) + xp_assert_equal(y, x) + + +def my_iter(x: Array) -> Iterator[Array]: + yield x[0, :] + yield x[1, :] + + +lazy_xp_function(my_iter) + + +def test_patch_lazy_xp_functions_iter(xp: ModuleType): + x = xp.asarray([[1.0, 2.0], [3.0, 4.0]]) + it = my_iter(x) + + assert isinstance(it, Iterator) + xp_assert_equal(next(it), x[0, :]) + xp_assert_equal(next(it), x[1, :]) + with pytest.raises(StopIteration): + _ = next(it) diff --git a/tests/test_utils.py b/tests/test_utils.py deleted file mode 100644 index 981d5c03..00000000 --- a/tests/test_utils.py +++ /dev/null @@ -1,39 +0,0 @@ -from types import ModuleType - -import pytest - -from array_api_extra._lib import Backend -from array_api_extra._lib._testing import xp_assert_equal -from array_api_extra._lib._utils._compat import device as get_device -from array_api_extra._lib._utils._helpers import in1d -from array_api_extra._lib._utils._typing import Device - -# mypy: disable-error-code=no-untyped-usage - - -class TestIn1D: - @pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="no argsort") - @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no unique_inverse, no device") - # cover both code paths - @pytest.mark.parametrize("n", [9, 15]) - def test_no_invert_assume_unique(self, xp: ModuleType, n: int): - x1 = xp.asarray([3, 8, 20]) - x2 = xp.arange(n) - expected = xp.asarray([True, True, False]) - actual = in1d(x1, x2) - xp_assert_equal(actual, expected) - - @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") - def test_device(self, xp: ModuleType, device: Device): - x1 = xp.asarray([3, 8, 20], device=device) - x2 = xp.asarray([2, 3, 4], device=device) - assert get_device(in1d(x1, x2)) == device - - @pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY) - @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no arange, no device") - def test_xp(self, xp: ModuleType): - x1 = xp.asarray([1, 6]) - x2 = xp.arange(5) - expected = xp.asarray([True, False]) - actual = in1d(x1, x2, xp=xp) - xp_assert_equal(actual, expected) diff --git a/typos.toml b/typos.toml new file mode 100644 index 00000000..34233590 --- /dev/null +++ b/typos.toml @@ -0,0 +1,8 @@ +[files] +extend-exclude = [".git/", ".pixi/"] +ignore-hidden = false + +[default.extend-words] +nd = "nd" +typ = "typ" +cardinalis = "cardinalis" diff --git a/vendor_tests/_array_api_compat_vendor.py b/vendor_tests/_array_api_compat_vendor.py index cd31a9c4..9bc129b5 100644 --- a/vendor_tests/_array_api_compat_vendor.py +++ b/vendor_tests/_array_api_compat_vendor.py @@ -1,4 +1,5 @@ """This file is a hook imported by `src/array_api_extra/_lib/_compat.py`.""" +# pyright: reportUnknownParameterType=false, reportMissingParameterType=false from .array_api_compat import * # noqa: F403 from .array_api_compat import array_namespace as array_namespace_compat diff --git a/vendor_tests/test_vendor.py b/vendor_tests/test_vendor.py index 38249378..e43c82fb 100644 --- a/vendor_tests/test_vendor.py +++ b/vendor_tests/test_vendor.py @@ -1,3 +1,7 @@ +# pyright: reportAttributeAccessIssue=false + +from typing import Any + import array_api_strict as xp from numpy.testing import assert_array_equal @@ -6,24 +10,43 @@ def test_vendor_compat(): from ._array_api_compat_vendor import ( # type: ignore[attr-defined] array_namespace, device, + is_array_api_obj, + is_array_api_strict_namespace, + is_cupy_array, is_cupy_namespace, + is_dask_array, is_dask_namespace, is_jax_array, is_jax_namespace, + is_lazy_array, + is_numpy_array, + is_numpy_namespace, + is_pydata_sparse_array, is_pydata_sparse_namespace, + is_torch_array, is_torch_namespace, is_writeable_array, size, + to_device, ) x = xp.asarray([1, 2, 3]) assert array_namespace(x) is xp - device(x) + to_device(x, device(x)) + assert is_array_api_obj(x) + assert is_array_api_strict_namespace(xp) + assert not is_cupy_array(x) assert not is_cupy_namespace(xp) + assert not is_dask_array(x) assert not is_dask_namespace(xp) assert not is_jax_array(x) assert not is_jax_namespace(xp) + assert not is_lazy_array(x) + assert not is_numpy_array(x) + assert not is_numpy_namespace(xp) + assert not is_pydata_sparse_array(x) assert not is_pydata_sparse_namespace(xp) + assert not is_torch_array(x) assert not is_torch_namespace(xp) assert is_writeable_array(x) assert size(x) == 3 @@ -34,7 +57,16 @@ def test_vendor_extra(): x = xp.asarray(1) y = atleast_nd(x, ndim=0) - assert_array_equal(y, x) + assert_array_equal(y, x) # pyright: ignore[reportUnknownArgumentType] + + +def test_vendor_extra_testing(): + from .array_api_extra.testing import lazy_xp_function + + def f(x: Any) -> Any: + return x + + lazy_xp_function(f) def test_vendor_extra_uses_vendor_compat():