diff --git a/.all-contributorsrc b/.all-contributorsrc
index eee250a4..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",
@@ -163,6 +183,93 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "ev-br",
+ "name": "Evgeni Burovski",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2133832?v=4",
+ "profile": "https://github.com/ev-br",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "jakevdp",
+ "name": "Jake Vanderplas",
+ "avatar_url": "https://avatars.githubusercontent.com/u/781659?v=4",
+ "profile": "http://www.vanderplas.com/",
+ "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 e00708a5..7f25b0c2 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@v1.4.4
+ 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@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 50952923..8368fcd4 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,54 +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.37.0
+ pixi-version: v0.50.2
cache: true
- - name: Run Pylint, Mypy & Pyright
- run: |
- pixi run -e lint pylint
- pixi run -e lint mypy
- pixi run -e lint pyright
+ environments: lint
+
+ - 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]
+ 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.37.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.0.7
+ if: ${{ matrix.environment != 'tests-nogil' }}
+ uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00 # v5.5.0
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 1cdf221e..03eb8b0b 100644
--- a/.github/workflows/docs-build.yml
+++ b/.github/workflows/docs-build.yml
@@ -1,20 +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.37.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 5ba6577d..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@v6
+ 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/.gitignore b/.gitignore
index eccba9dc..0b377833 100644
--- a/.gitignore
+++ b/.gitignore
@@ -114,9 +114,11 @@ ENV/
env.bak/
venv.bak/
-# Spyder project settings
+# IDE project settings
+.idea/
.spyderproject
.spyproject
+.vscode/
# Rope project settings
.ropeproject
@@ -160,3 +162,12 @@ Thumbs.db
# pixi environments
.pixi
*.egg-info
+
+# Vendor tests
+vendor_tests/array_api_compat/
+vendor_tests/array_api_extra/
+
+# all-contributors
+node_modules
+package.json
+yarn.lock
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
deleted file mode 100644
index 41beb381..00000000
--- a/.pre-commit-config.yaml
+++ /dev/null
@@ -1,80 +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: "v4.6.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.3.3"
- 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.6.1"
- hooks:
- - id: ruff
- args: ["--fix", "--show-fixes"]
- - id: ruff-format
-
- - 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.19"
- hooks:
- - id: validate-pyproject
- additional_dependencies: ["validate-pyproject-schema-store[all]"]
-
- - repo: https://github.com/python-jsonschema/check-jsonschema
- rev: "0.29.1"
- hooks:
- - id: check-dependabot
- - id: check-github-workflows
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index c3f99188..b1bff184 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -9,16 +9,16 @@ This project exists thanks to the following contributors
diff --git a/README.md b/README.md
index 35521b3f..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]
-[](https://pixi.sh)
-[](#contributors)
-[](https://scientific-python.org/specs/)
-[](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]
+[](#contributors)
+
+[](https://pixi.sh)
+[](https://typing.python.org/)
+[](https://codecov.io/github/data-apis/array-api-extra)
+[](https://jacobtomlinson.dev/effver)
+[](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.
-- ...
+- [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
diff --git a/RELEASING.md b/RELEASING.md
new file mode 100644
index 00000000..9b5d4ff5
--- /dev/null
+++ b/RELEASING.md
@@ -0,0 +1,8 @@
+1. Update the version in `src/array_api_extra/__init__.py`
+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. `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 ffe68f24..61e09e2d 100644
--- a/docs/api-reference.md
+++ b/docs/api-reference.md
@@ -6,11 +6,20 @@
: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 5b2fdf05..e2cab35b 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,9 +1,11 @@
-from __future__ import annotations
+"""Sphinx config."""
import importlib.metadata
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 = [
@@ -38,7 +40,7 @@
- """,
+ """, # noqa: E501
"class": "",
},
],
@@ -53,6 +55,10 @@
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),
}
nitpick_ignore = [
diff --git a/docs/contributing.md b/docs/contributing.md
index b1f8b90d..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
@@ -49,22 +79,28 @@ pixi run tests
pixi run docs
```
-- To open and preview the locally-built docs:
+- To build and preview the docs locally:
```
pixi run open-docs
```
-- To install a [pre-commit](https://pre-commit.com) hook:
+- To install pre-commit hooks:
+
+```
+pixi run hooks
+```
+
+- To run pre-commit checks on staged files:
```
-pixi run pre-commit-install
+pixi run pre-commit
```
-- To run the lint suite:
+- To run the full lint suite:
```
-pixi run lint
+pixi run --environment=lint lint
```
- To enter an interactive Python prompt:
@@ -73,20 +109,39 @@ pixi run lint
pixi run ipython
```
-- To run individual parts of the lint suite separately:
+- To run individual parts of the lint suite separately (for example):
```
-pixi run pre-commit
-pixi run pylint
-pixi run mypy
-pixi run pyright
+pixi run --environment=lint pyright
+pixi run --environment=lint dprint
+```
+
+- To generate the coverage report:
+
+```
+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 11c29162..5168e973 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -5,25 +5,29 @@
:hidden:
self
api-reference.md
+api-lazy.md
contributing.md
contributors.md
```
This is a library housing "array-agnostic" implementations of functions built on
-top of [the Python array API standard](https://data-apis.org/array-api/).
+top of [the Python array API standard](https://data-apis.org/array-api/), as
+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.
-- ...
+- [scikit-learn](https://github.com/scikit-learn/scikit-learn) β Machine
+ Learning in Python.
+- *your library? Let us know!*
(installation)=
@@ -33,6 +37,8 @@ It is currently used by:
[on PyPI](https://pypi.org/project/array-api-extra/):
```shell
+uv add array-api-extra
+# or
python -m pip install array-api-extra
```
@@ -40,9 +46,9 @@ And
[on conda-forge](https://prefix.dev/channels/conda-forge/packages/array-api-extra):
```shell
-micromamba install -c https://repo.prefix.dev/conda-forge array-api-extra
-# or
pixi add array-api-extra
+# or
+mamba install array-api-extra
```
```{warning}
@@ -51,18 +57,74 @@ If you require stability, it is recommended to pin `array-api-extra` to
a specific version, or vendor the library inside your own.
```
+```{note}
+This library depends on `array-api-compat`. We aim for compatibility with
+the latest released version of array-api-compat, and your mileage may vary
+with older or dev versions.
+```
+
(vendoring)=
## Vendoring
To vendor the library, clone
-[the repository](https://github.com/data-apis/array-api-extra) and copy it into
-the appropriate place in your library, like:
+[the array-api-extra repository](https://github.com/data-apis/array-api-extra)
+and copy it into the appropriate place in your library, like:
+
+```
+cp -a array-api-extra/src/array_api_extra mylib/vendored/
+```
+
+You may either add a dependency to array-api-compat in your own project, or
+vendor it too:
+
+1. Clone
+ [the array-api-compat repository](https://github.com/data-apis/array-api-compat)
+ and copy it next to your vendored array-api-extra:
+
+ ```
+ cp -a array-api-compat/array_api_compat mylib/vendored/
+ ```
+
+2. Create a new hook file which array-api-extra will use instead of the
+ top-level array-api-compat if present:
+
+ ```
+ echo 'from mylib.vendored.array_api_compat import *' > mylib/vendored/_array_api_compat_vendor.py
+ ```
+This also allows overriding array-api-compat functions if you so wish. E.g. your
+`mylib/vendored/_array_api_compat_vendor.py` could look like this:
+
+```python
+from mylib.vendored.array_api_compat import *
+from mylib.vendored.array_api_compat import array_namespace as _array_namespace_orig
+
+
+def array_namespace(*xs, **kwargs):
+ import mylib
+
+ if any(isinstance(x, mylib.MyArray) for x in xs):
+ return mylib
+ else:
+ return _array_namespace_orig(*xs, **kwargs)
```
-cp -R array-api-extra/ mylib/vendored/array_api_extra
+
+```{tip}
+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
+
+## 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)=
## Usage
@@ -74,23 +136,29 @@ import array_api_extra as xpx
...
xp = array_namespace(x)
-y = xp.sum(x)
+y = xp.sum(x) # use functions from `xp` as normal
...
-return xpx.atleast_nd(y, ndim=2, xp=xp)
+return xpx.atleast_nd(y, ndim=2, xp=xp) # use functions from `xpx`, passing `xp=xp`
```
```{note}
Functions in this library assume input arrays *are arrays* (not "array-likes") and that
-the namespace passed as `xp` is compatible with the standard. This means that
-the namespace you pass as `xp` should come from array-api-compat's ``array_namespace``,
+the namespace passed as `xp` (if given) is compatible with the standard -
+this means that it should come from array-api-compat's `array_namespace`,
or otherwise be compatible with the standard.
+
+Calling functions without providing an `xp` argument means that `array_namespace`
+is called internally to determine the namespace.
```
In the examples shown in the docstrings of functions from this library,
-[`array-api-strict`](https://data-apis.org/array-api-strict/) is used as the
-array namespace `xp`. In reality, code using this library will be written to
-work with any compatible array namespace as `xp`, not any particular
-implementation.
+[array-api-strict](https://data-apis.org/array-api-strict/) is used as the array
+namespace `xp`. In reality, code using this library will be written to work with
+any compatible array namespace as `xp`, not any particular implementation.
+
+Some functions may only work with specific array libraries supported by
+array-api-compat. This should be clearly indicated in the docs - please open an
+issue if this is not the case!
(scope)=
@@ -102,35 +170,35 @@ Functions that are in-scope for this library will:
standard.
- Implement functionality which may be generally useful across various
libraries.
-- Be implemented purely in terms of the array API standard.
- Be implemented with type annotations and
[numpydoc-style docstrings](https://numpydoc.readthedocs.io/en/latest/format.html).
-- Be tested against `array-api-strict`.
+- Be tested against array-api-strict and various existing backends.
+
+Functions are implemented purely in terms of the array API standard where
+possible. Where functions must use library-specific helpers for libraries
+supported by array-api-compat, this will be clearly marked in their API
+reference page.
+
+Delegation is added for some functions to use native implementations for the
+given array type, instead of the array-agnostic implementations, as this may
+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.
The following features are currently out-of-scope for this library:
-- Delegation to known, existing array libraries.
- - It is quite simple to wrap functions in this library to also use existing
- implementations where possible. Such delegation will not live in this
- library for now, but the array-agnostic functions in this library could form
- an array-agnostic backend for such delegating functions in the future, here
- or elsewhere.
- Functions which accept "array-like" input, or standard-incompatible
namespaces.
- It is possible to prepare input arrays and a standard-compatible namespace
- via `array-api-compat` downstream in consumer libraries. Avoiding use of
- `array-api-compat` in this library makes it easier to vendor and reduces
- potential redundant calls to `xp.asarray` and `array_namespace`.
- - For proposed alternatives to the `xp=xp` interface, see
- [this issue](https://github.com/data-apis/array-api-extra/issues/6).
+ via array-api-compat downstream in consumer libraries. The `xp` argument can
+ also be omitted to infer the standard-compatible namespace using
+ `array_namespace` internally.
- Functions which are specific to a particular domain.
- These functions may belong better in an array-consuming library which is
specific to that domain.
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 e37d0d0d..d7bb01cb 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -1,6 +1,6 @@
-version: 5
+version: 6
environments:
- ci-py310:
+ default:
channels:
- url: https://prefix.dev/conda-forge/
indexes:
@@ -9,323 +9,1519 @@ 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-strict-2.2-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.8.30-hbcca054_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py310h89163eb_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-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-25_linux64_openblas.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_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-25_linux64_openblas.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.0-hadc24fc_1.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/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-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py310hd6e36ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.10.15-h4a871b0_2_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - 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-strict-2.2-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.8.30-hf0a4a13_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py310hc74094e_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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-25_osxarm64_openblas.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.0-hbaaea75_1.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/llvm-openmp-19.1.4-hdb05f8b_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py310h530be0a_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.15-hdce6c4c_2_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - 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-strict-2.2-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.8.30-h56e8100_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py310h38315fa_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.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-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_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.1-default_h8125262_1000.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-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.0-h2466b09_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_0.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.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/mkl-2024.2.2-h66d3029_14.conda
- - conda: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py310h1ec8c79_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.10.15-hfaddaf0_2_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-hc790b64_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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/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/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - pypi: .
- ci-py313:
+ - 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/
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-strict-2.2-pyhd8ed1ab_0.conda
+ - 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.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/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.8.30-hbcca054_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py313h8060acc_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-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-25_linux64_openblas.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_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-25_linux64_openblas.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.0-hadc24fc_1.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/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/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/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/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/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/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.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/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py313h4bf6692_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - pypi: .
+ - 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.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/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.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-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
+ - 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/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/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
+ - 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.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/ca-certificates-2024.8.30-hf0a4a13_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py313ha9b7d5b_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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-25_osxarm64_openblas.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.0-hbaaea75_1.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/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/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-19.1.4-hdb05f8b_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py313hca4752e_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - pypi: .
+ - 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.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/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.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
+ - 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/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/noarch/array-api-strict-2.2-pyhd8ed1ab_0.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/win-64/ca-certificates-2024.8.30-h56e8100_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py313hb4c8b1a_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-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.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/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.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/win-64/libblas-3.9.0-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_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.1-default_h8125262_1000.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-25_win64_mkl.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/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.0-h2466b09_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_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/mkl-2024.2.2-h66d3029_14.conda
- - conda: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py313hee8cc43_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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-hc790b64_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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/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/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - pypi: .
- default:
+ - 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-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
+ - 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: ./
+ 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.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.8.30-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/libmpdec-4.0.0-h4bc722e_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_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/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/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/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/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - pypi: .
+ - 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/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/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.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-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
+ - 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/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.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/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.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-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
+ - 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/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.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/ca-certificates-2024.8.30-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/libmpdec-4.0.0-h99b78c6_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.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/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/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/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - pypi: .
+ - 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.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/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.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
+ - 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/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/win-64/ca-certificates-2024.8.30-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/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/libsqlite-3.47.0-h2466b09_1.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/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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/typing_extensions-4.12.2-pyha770c72_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/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/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - pypi: .
- dev:
+ - 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:
@@ -334,377 +1530,369 @@ 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/alabaster-1.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.5-py313h78bf25f_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.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/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/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py313h8060acc_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/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/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/ipython-8.30.0-pyh707e725_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.4-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-25_linux64_openblas.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_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-25_linux64_openblas.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.0-hadc24fc_1.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/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/linux-64/markupsafe-3.0.2-py313h8060acc_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.11.0-hf235a45_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py313h4bf6692_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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_0.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_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
- - 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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.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.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
+ - 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_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.5-py313h8f79df9_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.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/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/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py313ha9b7d5b_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ - 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/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/ipython-8.30.0-pyh707e725_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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-25_osxarm64_openblas.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.0-hbaaea75_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_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/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-19.1.4-hdb05f8b_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313heb2b014_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.11.0-haa7c7e9_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py313hca4752e_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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_0.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_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
- - 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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.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.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
+ - 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_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.5-py313hfa70ccb_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.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/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/win-64/ca-certificates-2024.8.30-h56e8100_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py313hb4c8b1a_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/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/iniconfig-2.0.0-pyhd8ed1ab_0.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.30.0-pyh7428d3b_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_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.1-default_h8125262_1000.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-25_win64_mkl.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/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.47.0-h2466b09_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_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/markupsafe-3.0.2-py313hb4c8b1a_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_14.conda
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.11.0-h57928b3_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py313hee8cc43_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- - conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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_0.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_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
- - 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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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/win-64/ukkonen-1.0.1-py313h1ec8472_5.conda
- - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-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.0-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/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda
- - conda: https://prefix.dev/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
- docs:
+ - 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:
@@ -713,206 +1901,451 @@ 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/alabaster-1.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.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.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.8.30-hbcca054_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/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/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/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.4-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/libmpdec-4.0.0-h4bc722e_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.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/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/linux-64/markupsafe-3.0.2-py313h8060acc_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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_0.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_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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
+ - 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/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.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/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/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/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.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/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.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.8.30-hf0a4a13_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/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-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/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.4-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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/libmpdec-4.0.0-h99b78c6_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_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/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/markupsafe-3.0.2-py313heb2b014_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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_0.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_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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
+ - 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/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.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/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/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/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.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/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/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.8.30-h56e8100_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-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.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-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/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/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/jinja2-3.1.4-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/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/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.0-h2466b09_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/markupsafe-3.0.2-py313hb4c8b1a_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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_0.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_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_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/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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.2.3-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_7.conda
- - conda: https://prefix.dev/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - 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: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- - pypi: .
- lint:
+ - 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-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.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/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/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-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/
indexes:
@@ -921,207 +2354,1812 @@ 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-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.5-py313h78bf25f_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-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/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: ./
+ tests-backends:
+ 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/ca-certificates-2024.8.30-hbcca054_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.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/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/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-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/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-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-25_linux64_openblas.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_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-25_linux64_openblas.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.0-hadc24fc_1.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/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/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/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.11.0-hf235a45_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py313h4bf6692_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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/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/setuptools-75.6.0-pyhff2d567_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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.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/virtualenv-20.28.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - 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
- - pypi: .
+ - 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/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/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-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-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-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.5-py313h8f79df9_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-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/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.8.30-hf0a4a13_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.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/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/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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-25_osxarm64_openblas.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.0-hbaaea75_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_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-19.1.4-hdb05f8b_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.11.0-haa7c7e9_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py313hca4752e_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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/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/setuptools-75.6.0-pyhff2d567_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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.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/virtualenv-20.28.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - 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
- - pypi: .
+ - 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/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.5-py313hfa70ccb_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-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/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.8.30-h56e8100_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-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/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/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/isort-5.13.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_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.1-default_h8125262_1000.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-25_win64_mkl.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/libsqlite-3.47.0-h2466b09_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_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/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_14.conda
- - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.11.0-h57928b3_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py313hee8cc43_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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/pyyaml-6.0.2-py313ha7868ed_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.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.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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/win-64/ukkonen-1.0.1-py313h1ec8472_5.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.0-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/xz-5.2.6-h8d14728_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2
- - pypi: .
- tests:
+ - 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-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-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-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:
@@ -1130,149 +4168,849 @@ 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-strict-2.2-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/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.8.30-hbcca054_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py313h8060acc_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-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-25_linux64_openblas.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_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-25_linux64_openblas.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.0-hadc24fc_1.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/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/linux-64/ncurses-6.5-he02047a_1.conda
- - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py313h4bf6692_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- - pypi: .
+ - 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-strict-2.2-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/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.8.30-hf0a4a13_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py313ha9b7d5b_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-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-25_osxarm64_openblas.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.0-hbaaea75_1.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-19.1.4-hdb05f8b_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py313hca4752e_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- - conda: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- - pypi: .
+ - 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-strict-2.2-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/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.8.30-h56e8100_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py313hb4c8b1a_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.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-25_win64_mkl.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_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.1-default_h8125262_1000.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-25_win64_mkl.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.47.0-h2466b09_1.conda
- - conda: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_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/mkl-2024.2.2-h66d3029_14.conda
- - conda: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py313hee8cc43_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_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-hc790b64_0.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_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_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/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/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- - pypi: .
+ - 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:
-- kind: conda
- name: _libgcc_mutex
- version: '0.1'
- build: conda_forge
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
+- conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
md5: d7c89558ba9fa0495403155b64376d81
- arch: x86_64
- platform: linux
license: None
purls: []
size: 2562
timestamp: 1578324546067
-- kind: conda
- name: _openmp_mutex
- version: '4.5'
- build: 2_gnu
+- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
build_number: 16
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
md5: 73aaf86a425cc6e73fcf236a5a46396d
depends:
@@ -1280,3458 +5018,7650 @@ packages:
- libgomp >=7.5.0
constrains:
- openmp_impl 9999
- arch: x86_64
- platform: linux
license: BSD-3-Clause
license_family: BSD
purls: []
size: 23621
timestamp: 1650670423406
-- kind: conda
- name: alabaster
- version: 1.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda
- sha256: a9e1092725561d9bff12d3a4d3bb46c43d3d0db3cbb2c63c9025d1c77e84840c
- md5: 7d78a232029458d0077ede6cda30ed0c
+- conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-4_kmp_llvm.conda
+ build_number: 4
+ sha256: b5e8980dd5fd96607fcccd98217b1058ec54566845b757cc0ecef146b5f0a51e
+ md5: cc86eba730b0e87ea9990985d45e60f9
depends:
- - python >=3.9
+ - llvm-openmp >=9.0.1
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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:
+ - llvm-openmp >=9.0.1
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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:
+ - 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/linux-64/actionlint-1.7.7-hd0c01bc_0.conda
+ sha256: a6fb8bfb2ef6c7f48195ac2b7683656aecc55429f7fc3123ec6bbb1e1ce06b2b
+ md5: 4dcdf2570573cf76931efb97d14e4641
+ depends:
+ - __glibc >=2.17
+ - libgcc >=13
+ - __glibc >=2.17,<3.0.a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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
+ constrains:
+ - __osx >=10.12
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 1727363
+ timestamp: 1737388223041
+- conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.7-h2466b09_0.conda
+ sha256: bbfa6aa49bd19117fdc36efb26956a1ff57dab5fddc3579b8c30f6ceb853ba5d
+ md5: bea57e97ccf892453f8dc40f4b72d329
+ 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: 2014904
+ timestamp: 1737388233822
+- 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: 18522
- timestamp: 1722035895436
-- kind: pypi
+ 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:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/array-api-compat?source=hash-mapping
+ size: 45821
+ timestamp: 1747403732947
+- pypi: ./
name: array-api-extra
- version: 0.2.1.dev0
- path: .
- sha256: 81d59ceda4b873652fada8c13d55e7cc98840538e87ecf744e935b7d1ac3017f
+ version: 0.9.1.dev0
+ sha256: bbf9634f03b0358e6143e1824cc32bc118ddd52f1d98314c89ab94fa37492e01
requires_dist:
- - typing-extensions
- - 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'
+ - array-api-compat>=1.12.0,<2
requires_python: '>=3.10'
editable: true
-- kind: conda
- name: array-api-strict
- version: '2.2'
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_0.conda
- sha256: 3bce66da928d2a72ccad33317eac5d4a4291d498f59105b46c4d2db155580872
- md5: 5f8d3e0f6b42318772d0f1cdddfe3025
+- conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.4.1-pyhe01879c_0.conda
+ sha256: e0057ab21157b50792651c6aa7e6d16349a271b8e7e6b9a430ad9ab7b8a8dc0f
+ md5: 648e253c455718227c61e26f4a4ce701
depends:
+ - python >=3.10
- numpy
- - python >=3.9
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/array-api-strict?source=hash-mapping
- size: 53538
- timestamp: 1731523628496
-- kind: conda
- name: astroid
- version: 3.3.5
- build: py313h78bf25f_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/astroid-3.3.5-py313h78bf25f_0.conda
- sha256: 4c17372d16b9ba2c5d30f25eca17d17578d35a56f3ee3f3f54eafd29ef3c4947
- md5: 5266713116fd050a2e4d3c2de84e9fd5
- depends:
- - python >=3.13.0rc3,<3.14.0a0
+ size: 62525
+ timestamp: 1753634065508
+- conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.11-py313h78bf25f_1.conda
+ sha256: fd352800653c61b829bd3c2466628059dcef1649ddcaa9ff53cd80e39520b195
+ md5: 1351e4454619472afeed9475e451de3c
+ 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: 516864
+ timestamp: 1756814185955
+- conda: https://prefix.dev/conda-forge/osx-64/astroid-3.3.11-py313habf4b1d_1.conda
+ sha256: 7f11630057272d3357458daa5d00e5aab9d0b484d98c4c43bf5e9621c8d9686e
+ md5: 4910a369565c7977f9f473c07d048a14
+ depends:
+ - python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
- arch: x86_64
- platform: linux
license: LGPL-2.1-or-later
license_family: LGPL
purls:
- pkg:pypi/astroid?source=hash-mapping
- size: 514058
- timestamp: 1728150528308
-- kind: conda
- name: astroid
- version: 3.3.5
- build: py313h8f79df9_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.5-py313h8f79df9_0.conda
- sha256: 69d2a8d7dedf40de2a0fd994e67195d6d5d30468c279b7f342d40a9ad7aab84b
- md5: ba95e1ac8f810d08dc2242f0a20efeb5
- depends:
- - python >=3.13.0rc3,<3.14.0a0
- - python >=3.13.0rc3,<3.14.0a0 *_cp313
+ size: 516986
+ timestamp: 1756814408369
+- conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.11-py313h8f79df9_1.conda
+ sha256: 478548a3aa58abb9ec1157cb22f85990e3f74d63ad00dea805465e4480f18aeb
+ md5: 945e62efbf0f263fd71bc26a082d0e99
+ depends:
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
- python_abi 3.13.* *_cp313
- arch: arm64
- platform: osx
license: LGPL-2.1-or-later
license_family: LGPL
purls:
- pkg:pypi/astroid?source=hash-mapping
- size: 516193
- timestamp: 1728150667440
-- kind: conda
- name: astroid
- version: 3.3.5
- build: py313hfa70ccb_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/astroid-3.3.5-py313hfa70ccb_0.conda
- sha256: 5a29105c4ac2d48753d3fef492e00898542ebf08261c2116db303aa534d612fd
- md5: 405ae725eb4b0d187a58628a2a27e24c
- depends:
- - python >=3.13.0rc3,<3.14.0a0
+ size: 516868
+ timestamp: 1756814499329
+- conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.11-py313hfa70ccb_1.conda
+ sha256: c8df112b11668062c29c1c52b61feaca913e9954d8bc83157cf6565a75f265bc
+ md5: 5b50af3799aa679bd0a7a53a48e3c8ae
+ depends:
+ - python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
- arch: x86_64
- platform: win
license: LGPL-2.1-or-later
license_family: LGPL
purls:
- pkg:pypi/astroid?source=hash-mapping
- size: 515267
- timestamp: 1728150683883
-- kind: conda
- name: asttokens
- version: 2.4.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda
- sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111
- md5: 5f25798dcefd8252ce5f9dc494d5f571
+ 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.5
- - six >=1.12.0
+ - python >=3.9
+ constrains:
+ - astroid >=2,<4
license: Apache-2.0
license_family: Apache
purls:
- pkg:pypi/asttokens?source=hash-mapping
- size: 28922
- timestamp: 1698341257884
-- kind: conda
- name: babel
- version: 2.16.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_0.conda
- sha256: fce1d78e42665bb26d3f2b45ce9cacf0d9dbe4c1b2db3879a384eadee53c6231
- md5: 6d4e9ecca8d88977147e109fc7053184
+ size: 28206
+ timestamp: 1733250564754
+- conda: https://prefix.dev/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda
+ sha256: a9c114cbfeda42a226e2db1809a538929d2f118ef855372293bd188f71711c48
+ md5: 791365c5f65975051e4e017b5da3abf5
depends:
- - python >=3.8
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: GPL-2.0-or-later
+ license_family: GPL
+ purls: []
+ size: 68072
+ timestamp: 1756738968573
+- conda: https://prefix.dev/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda
+ sha256: 99c53ffbcb5dc58084faf18587b215f9ac8ced36bbfb55fa807c00967e419019
+ md5: a10d11958cadc13fdb43df75f8b1903f
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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:
+ - python >=3.9
- pytz >=2015.7
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/babel?source=hash-mapping
- size: 6525614
- timestamp: 1730878929589
-- kind: conda
- name: basedmypy
- version: 2.7.0
- build: pyhd8ed1ab_1
- build_number: 1
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/basedmypy-2.7.0-pyhd8ed1ab_1.conda
- sha256: 06bfbf1afb0aa40d86d8bd0343592612e1eb96ac28368bdf0c583dd511004e87
- md5: d8ceaa23eb660eae20aa7877992a12d6
- 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
- purls:
- - pkg:pypi/basedmypy?source=hash-mapping
- size: 1808422
- timestamp: 1732706894788
-- kind: conda
- name: basedpyright
- version: 1.22.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/basedpyright-1.22.0-pyhd8ed1ab_0.conda
- sha256: 5c0a16a9ea8b0579b7e4e737128a9345b0b3b445fdcce59c396091acb657abc3
- md5: 136a82990a3cc16a23c1bc0b45c2363b
+ 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: 7506651
- timestamp: 1732918278138
-- kind: conda
- name: basedtyping
- version: 0.1.10
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_0.conda
- sha256: 39c731bfbc0532be66bea6a5e25be13a65d1c067f871637753da60173496e5b7
- md5: 866ccb80106142a6484db78da4bfe345
+ 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.8,<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: 22514
- timestamp: 1732167819924
-- kind: conda
- name: beautifulsoup4
- version: 4.12.3
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
- sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
- md5: 332493000404d8411859539a5a630865
- depends:
- - python >=3.6
- - soupsieve >=1.2
+ - 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:
+ - 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: 118200
- timestamp: 1705564819537
-- kind: conda
- name: brotli-python
- version: 1.1.0
- build: py313h3579c5c_2
- build_number: 2
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda
- sha256: b0a66572f44570ee7cc960e223ca8600d26bb20cfb76f16b95adf13ec4ee3362
- md5: f3bee63c7b5d041d841aff05785c28b7
- depends:
- - __osx >=11.0
- - libcxx >=17
- - python >=3.13.0rc1,<3.14.0a0
- - python >=3.13.0rc1,<3.14.0a0 *_cp313
+ - 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:
+ - 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
- constrains:
- - libbrotlicommon 1.1.0 hd74edd7_2
- arch: arm64
- platform: osx
license: MIT
license_family: MIT
purls:
- - pkg:pypi/brotli?source=hash-mapping
- size: 339067
- timestamp: 1725268603536
-- kind: conda
- name: brotli-python
- version: 1.1.0
- build: py313h46c70d0_2
- build_number: 2
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda
- sha256: da92e5e904465fce33a7a55658b13caa5963cc463c430356373deeda8b2dbc46
- md5: f6bb3742e17a4af0dc3c8ca942683ef6
+ - 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:
+ - black >=22.1
+ - python >=3.10
+ license: MIT
+ purls:
+ - 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 hb03c661_4
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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 >=10.13
+ - libcxx >=19
+ - python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
constrains:
- - libbrotlicommon 1.1.0 hb9d3cd8_2
- arch: x86_64
- platform: linux
+ - libbrotlicommon 1.1.0 h1c43f85_4
license: MIT
license_family: MIT
purls:
- - pkg:pypi/brotli?source=hash-mapping
- size: 350424
- timestamp: 1725267803672
-- kind: conda
- name: brotli-python
- version: 1.1.0
- build: py313h5813708_2
- build_number: 2
- subdir: win-64
- url: 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: 369082
+ timestamp: 1756600456664
+- conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313hb4b7877_4.conda
+ sha256: a6402a7186ace5c3eb21ed4ce50eda3592c44ce38ab4e9a7ddd57d72b1e61fb3
+ md5: 9518cd948fc334d66119c16a2106a959
depends:
- - python >=3.13.0rc1,<3.14.0a0
+ - __osx >=11.0
+ - libcxx >=19
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
- python_abi 3.13.* *_cp313
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
constrains:
- - libbrotlicommon 1.1.0 h2466b09_2
- arch: x86_64
- platform: win
+ - libbrotlicommon 1.1.0 h6caf38d_4
license: MIT
license_family: MIT
purls:
- - pkg:pypi/brotli?source=hash-mapping
- size: 322309
- timestamp: 1725268431915
-- kind: conda
- name: bzip2
- version: 1.0.8
- build: h2466b09_7
- build_number: 7
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
- sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b
- md5: 276e7ffe9ffe39688abc665ef0f45596
+ - 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,<3.14.0a0
+ - python_abi 3.13.* *_cp313
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: bzip2-1.0.6
- license_family: BSD
- purls: []
- size: 54927
- timestamp: 1720974860185
-- kind: conda
- name: bzip2
- version: 1.0.8
- build: h4bc722e_7
- build_number: 7
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - libbrotlicommon 1.1.0 hfd05255_4
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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
depends:
- __glibc >=2.17,<3.0.a0
- libgcc-ng >=12
- arch: x86_64
- platform: linux
license: bzip2-1.0.6
license_family: BSD
purls: []
size: 252783
timestamp: 1720974456583
-- kind: conda
- name: bzip2
- version: 1.0.8
- build: h99b78c6_7
- build_number: 7
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
+- 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
depends:
- __osx >=11.0
- arch: arm64
- platform: osx
license: bzip2-1.0.6
license_family: BSD
purls: []
size: 122909
timestamp: 1720974522888
-- kind: conda
- name: ca-certificates
- version: 2024.8.30
- build: h56e8100_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda
- sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4
- md5: 4c4fd67c18619be5aa65dc5b6c72e490
- arch: x86_64
- platform: win
- license: ISC
+- conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
+ sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b
+ md5: 276e7ffe9ffe39688abc665ef0f45596
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ license: bzip2-1.0.6
+ license_family: BSD
+ purls: []
+ size: 54927
+ timestamp: 1720974860185
+- 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: 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 >=10.13
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
purls: []
- size: 158773
- timestamp: 1725019107649
-- kind: conda
- name: ca-certificates
- version: 2024.8.30
- build: hbcca054_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda
- sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea
- md5: c27d1c142233b5bc9ca570c6e2e0c244
- arch: x86_64
- platform: linux
+ 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: 159003
- timestamp: 1725018903918
-- kind: conda
- name: ca-certificates
- version: 2024.8.30
- build: hf0a4a13_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda
- sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709
- md5: 40dec13fd8348dbe303e57be74bd3d35
- arch: arm64
- platform: osx
+ 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: 158482
- timestamp: 1725019034582
-- kind: conda
- name: certifi
- version: 2024.8.30
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda
- sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f
- md5: 12f7d00853807b0531775e9be891cb11
+ 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.7
+ - python >=3.9
license: ISC
purls:
- - pkg:pypi/certifi?source=hash-mapping
- size: 163752
- timestamp: 1725278204397
-- kind: conda
- name: cffi
- version: 1.17.1
- build: py313ha7868ed_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda
- sha256: b19f581fe423858f1f477c52e10978be324c55ebf2e418308d30d013f4a476ff
- md5: 519a29d7ac273f8c165efc0af099da42
+ - 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.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
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
license: MIT
license_family: MIT
purls:
- pkg:pypi/cffi?source=hash-mapping
- size: 291828
- timestamp: 1725561211547
-- kind: conda
- name: cffi
- version: 1.17.1
- build: py313hc845a76_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313hc845a76_0.conda
- sha256: 50650dfa70ccf12b9c4a117d7ef0b41895815bb7328d830d667a6ba3525b60e8
- md5: 6d24d5587a8615db33c961a4ca0a8034
- 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.13.0rc1,<3.14.0a0
- - python >=3.13.0rc1,<3.14.0a0 *_cp313
+ - python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
- arch: arm64
- platform: osx
license: MIT
license_family: MIT
purls:
- pkg:pypi/cffi?source=hash-mapping
- size: 282115
- timestamp: 1725560759157
-- kind: conda
- name: cffi
- version: 1.17.1
- build: py313hfab6e84_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda
- sha256: 73cd6199b143a8a6cbf733ce124ed57defc1b9a7eab9b10fd437448caf8eaa45
- md5: ce6386a5892ef686d6d680c345c40ad1
+ size: 289490
+ timestamp: 1756808563
+- conda: https://prefix.dev/conda-forge/osx-arm64/cffi-1.17.1-py313h755b2b2_1.conda
+ sha256: 6dd0ba5c68f59eb4039399d0c51d060b89f2028acd5c2f7f6879476ab108d797
+ md5: a9024b1e15f59ce83654d542f83c23be
depends:
- - __glibc >=2.17,<3.0.a0
- - libffi >=3.4,<4.0a0
- - libgcc >=13
+ - __osx >=11.0
+ - libffi >=3.4.6,<3.5.0a0
- pycparser
- - python >=3.13.0rc1,<3.14.0a0
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
- python_abi 3.13.* *_cp313
- arch: x86_64
- platform: linux
license: MIT
license_family: MIT
purls:
- pkg:pypi/cffi?source=hash-mapping
- size: 295514
- timestamp: 1725560706794
-- kind: conda
- name: cfgv
- version: 3.3.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2
- sha256: fbc03537a27ef756162c49b1d0608bf7ab12fa5e38ceb8563d6f4859e835ac5c
- md5: ebb5f5f7dc4f1a3780ef7ea7738db08c
+ size: 289263
+ timestamp: 1756808593662
+- conda: https://prefix.dev/conda-forge/win-64/cffi-1.17.1-py313h5ea7bf4_1.conda
+ sha256: 8e2cd5b827a717d4a9f14594404a7d3693a5a7b7a9a181409ca1bd24a995d78c
+ md5: 69a537fed13191160f1a139b6d42f6c1
depends:
- - python >=3.6.1
+ - pycparser
+ - 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: MIT
license_family: MIT
purls:
- - pkg:pypi/cfgv?source=hash-mapping
- size: 10788
- timestamp: 1629909423398
-- kind: conda
- name: charset-normalizer
- version: 3.4.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda
- sha256: 1873ac45ea61f95750cb0b4e5e675d1c5b3def937e80c7eebb19297f76810be8
- md5: a374efa97290b8799046df7c5ca17164
+ - pkg:pypi/cffi?source=hash-mapping
+ 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.7
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/charset-normalizer?source=hash-mapping
- size: 47314
- timestamp: 1728479405343
-- kind: conda
- name: colorama
- version: 0.4.6
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
- sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
- md5: 3faab06a954c2a04039983f2c4a50d99
+ 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.10
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/click?source=hash-mapping
+ 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.10
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/click?source=hash-mapping
+ 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: 25870
+ timestamp: 1736947650712
+- conda: https://prefix.dev/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
+ md5: 962b9857ee8e7018c22f2776ffa0b2d7
depends:
- - python >=3.7
+ - python >=3.9
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/colorama?source=hash-mapping
- size: 25170
- timestamp: 1666700778190
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py310h38315fa_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py310h38315fa_0.conda
- sha256: 26f7df3758c5a6fbca73b76ee415eb0581fe40dd0734c99220cf88b76b18e2ba
- md5: 981d75123a07437c07181d5919a6c2af
+ size: 27011
+ timestamp: 1733218222191
+- 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 >=14
- 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
- arch: x86_64
- platform: win
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 319434
- timestamp: 1732426451111
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py310h89163eb_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py310h89163eb_0.conda
- sha256: bf344cd5cba14409c422022dcacdf030f66ed325493ecb6f6bf6f22b7e0ee39b
- md5: 1109af252e695897f5acc7c1578202cd
+ size: 307994
+ timestamp: 1756930911557
+- conda: https://prefix.dev/conda-forge/linux-64/coverage-7.10.6-py313h3dea7bd_1.conda
+ sha256: c772697f83e33baabe52f8b136f5408ea7a6a85d4f6134705b0858185d16e22b
+ md5: 7d28b9543d76f78ccb110a1fdf5a0762
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
- tomli
- arch: x86_64
- platform: linux
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 294004
- timestamp: 1732426259018
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py310hc74094e_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py310hc74094e_0.conda
- sha256: 54451c5fb41b5a3d84c7b11a798707e944a36d72964bc52ed933f5c7799271a1
- md5: 0f258154dbcc44c881025eea5e981126
+ size: 390237
+ timestamp: 1756930857246
+- conda: https://prefix.dev/conda-forge/noarch/coverage-7.10.6-pyh7db6752_1.conda
+ sha256: 146640c5c2e1d26969305a82bb0bf0abd965a7dfe17a423e882593be9ea05d74
+ md5: 1354cfd7f4ad47c8327d87f9eeb352f7
depends:
- - __osx >=11.0
+ - python >=3.10
+ - tomli
+ track_features:
+ - coverage_no_compile
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - 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:
+ - __osx >=10.13
- python >=3.10,<3.11.0a0
- - python >=3.10,<3.11.0a0 *_cpython
- python_abi 3.10.* *_cp310
- tomli
- arch: arm64
- platform: osx
license: Apache-2.0
- license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 293158
- timestamp: 1732426403407
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py313h8060acc_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/coverage-7.6.8-py313h8060acc_0.conda
- sha256: 4c6cfa6816d21dc2e799fcb7d4f2d3b7dadeb0eba948cacec84fd33b9a769b54
- md5: cf7681f6c2dc94ff8577430e4c280dc6
+ 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
- arch: x86_64
- platform: linux
+ license: Apache-2.0
+ purls:
+ - pkg:pypi/coverage?source=hash-mapping
+ 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
+ - python >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ - tomli
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 371219
- timestamp: 1732426302564
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py313ha9b7d5b_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/coverage-7.6.8-py313ha9b7d5b_0.conda
- sha256: 1747141f16821adced20f12966831ff444f06942dbecb36d443db43fa8b0dfe0
- md5: 2a72ba6a651f184a6515acfa48687d11
+ 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
- python >=3.13,<3.14.0a0 *_cp313
- python_abi 3.13.* *_cp313
- tomli
- arch: arm64
- platform: osx
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 370706
- timestamp: 1732426401447
-- kind: conda
- name: coverage
- version: 7.6.8
- build: py313hb4c8b1a_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/coverage-7.6.8-py313hb4c8b1a_0.conda
- sha256: 01b3d6d287dd34363efaa47baf93148f404af7b4f7b52f3117a3575dc6edb86a
- md5: 258641c09a12218156e1706d6bea5bf6
+ 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.13,<3.14.0a0
- - python_abi 3.13.* *_cp313
+ - 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
- arch: x86_64
- platform: win
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/coverage?source=hash-mapping
- size: 396450
- timestamp: 1732426714288
-- kind: conda
- name: decorator
- version: 5.1.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2
- sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2
- md5: 43afe5ab04e35e17ba28649471dd7364
- depends:
- - python >=3.5
- license: BSD-2-Clause
- license_family: BSD
- purls:
- - pkg:pypi/decorator?source=hash-mapping
- size: 12072
- timestamp: 1641555714315
-- kind: conda
- name: dill
- version: 0.3.9
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_0.conda
- sha256: e597a41dcfb1a3b33d01d9d231975e2a931c3e1aeb8b5f3c40abbb10061f64b2
- md5: 27faec84454995f6774786c7e5833cd6
+ 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.8
- license: BSD-3-Clause
- license_family: BSD
- purls:
- - pkg:pypi/dill?source=hash-mapping
- size: 90131
- timestamp: 1727595096161
-- kind: conda
- name: distlib
- version: 0.3.9
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda
- sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb
- md5: fe521c1608280cc2803ebd26dc252212
- depends:
- - python 2.7|>=3.6
+ - python >=3.13,<3.14.0a0
+ - python_abi 3.13.* *_cp313
+ - tomli
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: APACHE
purls:
- - pkg:pypi/distlib?source=hash-mapping
- size: 276214
- timestamp: 1728557312342
-- kind: conda
- name: docutils
- version: 0.21.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda
- sha256: 362bfe3afaac18298c48c0c6a935641544077ce5105a42a2d8ebe750ad07c574
- md5: e8cd5d629f65bdf0f3bb312cde14659e
+ - pkg:pypi/coverage?source=hash-mapping
+ size: 412900
+ timestamp: 1756930854650
+- conda: https://prefix.dev/conda-forge/noarch/cpython-3.10.18-py310hd8ed1ab_0.conda
+ noarch: generic
+ sha256: 44329b37f854a90b4b9bcf500c25c13dce91180eca26a9272f6a254725d2db8c
+ md5: 7004cb3fa62ad44d1cb70f3b080dfc8f
depends:
- - python >=3.9
- license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
- purls:
- - pkg:pypi/docutils?source=hash-mapping
- size: 403226
- timestamp: 1713930478970
-- kind: conda
- name: exceptiongroup
- version: 1.2.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
- sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5
- md5: d02ae936e42063ca46af6cdad2dbd1e0
+ - python >=3.10,<3.11.0a0
+ - python_abi * *_cp310
+ license: Python-2.0
+ purls: []
+ 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.7
- license: MIT and PSF-2.0
- purls:
- - pkg:pypi/exceptiongroup?source=hash-mapping
- size: 20418
- timestamp: 1720869435725
-- kind: conda
- name: executing
- version: 2.1.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda
- sha256: a52d7516e2e11d3eb10908e10d3eb3f8ef267fea99ed9b09d52d96c4db3441b8
- md5: d0441db20c827c11721889a241df1220
+ - 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 >=2.7
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/executing?source=hash-mapping
- size: 28337
- timestamp: 1725214501850
-- kind: conda
- name: filelock
- version: 3.16.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda
- sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4
- md5: 916f8ec5dd4128cd5f207a3c4c07b2c6
+ - 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.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:
- - python >=3.7
- license: Unlicense
- purls:
- - pkg:pypi/filelock?source=hash-mapping
- size: 17357
- timestamp: 1726613593584
-- kind: conda
- name: furo
- version: 2024.8.6
- build: pyhd8ed1ab_1
- build_number: 1
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_1.conda
- sha256: 65f527cc94ab436c7746fa048e755831d3d3808ba9073cb57696c33b58d1192f
- md5: 1de9286f68ce577064262b0071ac9b4e
+ - __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: 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-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: 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.9,<12.10.0a0
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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.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: 23260
+ timestamp: 1749218569458
+- conda: https://prefix.dev/conda-forge/linux-64/cuda-cuobjdump-12.9.82-hbd13f7d_0.conda
+ sha256: a4f37cd8823d209639bdda1eea3ee0eb01040e44e2480c2f393e684c472c2f0c
+ md5: 667a138d80047e7869f5330087772fd7
depends:
- - beautifulsoup4
- - pygments >=2.7
- - python >=3.7
- - sphinx >=6.0,<9.0
- - sphinx-basic-ng
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/furo?source=hash-mapping
- size: 83413
- timestamp: 1727407917886
-- kind: conda
- name: h2
- version: 4.1.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
- sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
- md5: b748fbf7060927a6e82df7cb5ee8f097
+ - __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:
- - hpack >=4.0,<5
- - hyperframe >=6.0,<7
- - python >=3.6.1
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/h2?source=hash-mapping
- size: 46754
- timestamp: 1634280590080
-- kind: conda
- name: hpack
- version: 4.0.0
- build: pyh9f0ad1d_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
- sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
- md5: 914d6646c4dbb1fd3ff539830a12fd71
+ - __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:
- - python
+ - 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: 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:
+ - __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: 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:
+ - __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: 27380012
+ timestamp: 1753975454194
+- conda: https://prefix.dev/conda-forge/linux-64/cuda-nvdisasm-12.9.88-hbd13f7d_0.conda
+ sha256: 6ef7c122897a9e27bc3aaed1745ea03bfecb5f553d420b0e4bf2ef6f568aab81
+ md5: 7e9e4991e5890f32e8ef3c9a971171df
+ 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: 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.9,<12.10.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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.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: 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:
+ - cudnn-jit <0a
+ license: LicenseRef-cuDNN-Software-License-Agreement
+ purls: []
+ 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,<13.0a0
+ - cupy-core 13.6.0 py310hbc0d89f_0
+ - libcublas
+ - libcufft
+ - libcurand
+ - libcusolver
+ - libcusparse
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
license: MIT
license_family: MIT
- purls:
- - pkg:pypi/hpack?source=hash-mapping
- size: 25341
- timestamp: 1598856368685
-- kind: conda
- name: hyperframe
- version: 6.0.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
- sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
- md5: 9f765cbfab6870c8435b9eefecd7a1f4
- depends:
- - python >=3.6
+ purls: []
+ 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:
- - pkg:pypi/hyperframe?source=hash-mapping
- size: 14646
- timestamp: 1619110249723
-- kind: conda
- name: icu
- version: '75.1'
- build: he02047a_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda
- sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e
- md5: 8b189310083baabfb622af68fd9d3ae3
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc-ng >=12
- - libstdcxx-ng >=12
- arch: x86_64
- platform: linux
+ 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,<13.0a0
+ - cupy-core 13.6.0 py310h867cfc4_0
+ - libcublas
+ - libcufft
+ - libcurand
+ - libcusolver
+ - libcusparse
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
license: MIT
license_family: MIT
purls: []
- size: 12129203
- timestamp: 1720853576813
-- kind: conda
- name: icu
- version: '75.1'
- build: hfee45f7_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
- sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620
- md5: 5eb22c1d7b3fc4abb50d92d621583137
- depends:
- - __osx >=11.0
- arch: arm64
- platform: osx
+ 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: 11857802
- timestamp: 1720853997952
-- kind: conda
- name: identify
- version: 2.6.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/identify-2.6.3-pyhd8ed1ab_0.conda
- sha256: 2350107285349caad1a5c5c5296a1335b8649d6b1b0e8f2bde18127c404471c5
- md5: dd3acd023fc358afab730866a0e5e3f5
+ 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:
- - python >=3.6
- - ukkonen
+ - __glibc >=2.17,<3.0.a0
+ - 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:
+ - 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
+ - __cuda >=12.0
+ - 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/identify?source=hash-mapping
- size: 78352
- timestamp: 1732589463054
-- kind: conda
- name: idna
- version: '3.10'
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda
- sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2
- md5: 7ba2ede0e7c795ff95088daf0dc59753
+ - 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:
- - python >=3.6
- license: BSD-3-Clause
- license_family: BSD
+ - __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
+ - 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/idna?source=hash-mapping
- size: 49837
- timestamp: 1726459583613
-- kind: conda
- name: imagesize
- version: 1.4.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2
- sha256: c2bfd7043e0c4c12d8b5593de666c1e81d67b83c474a0a79282cc5c4ef845460
- md5: 7de5386c8fea29e76b303f37dde4c352
- depends:
- - python >=3.4
+ - pkg:pypi/cupy?source=hash-mapping
+ 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:
+ - cuda-version >=12,<13.0a0
+ - cutensor >=2.2.0.0,<3.0a0
+ - libcusolver >=11,<12.0a0
+ - __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/imagesize?source=hash-mapping
- size: 10164
- timestamp: 1656939625410
-- kind: conda
- name: iniconfig
- version: 2.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
- sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666
- md5: f800d2da156d08e289b14e87e43c1ae5
- depends:
- - python >=3.7
+ - pkg:pypi/cupy?source=hash-mapping
+ 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
+ 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/iniconfig?source=hash-mapping
- size: 11101
- timestamp: 1673103208955
-- kind: conda
- name: intel-openmp
- version: 2024.2.1
- build: h57928b3_1083
- build_number: 1083
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda
- sha256: 0fd2b0b84c854029041b0ede8f4c2369242ee92acc0092f8407b1fe9238a8209
- md5: 2d89243bfb53652c182a7c73182cce4f
- arch: x86_64
- platform: win
- license: LicenseRef-IntelSimplifiedSoftwareOct2022
- license_family: Proprietary
- purls: []
- size: 1852356
- timestamp: 1723739573141
-- kind: conda
- name: ipython
- version: 8.30.0
- build: pyh707e725_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/ipython-8.30.0-pyh707e725_0.conda
- sha256: 65cdc105e5effea2943d3979cc1592590c923a589009b484d07672faaf047af1
- md5: 5d6e5cb3a4b820f61b2073f0ad5431f1
+ - 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:
- - __unix
- - decorator
- - exceptiongroup
- - jedi >=0.16
- - matplotlib-inline
- - pexpect >4.3
- - pickleshare
- - prompt-toolkit >=3.0.41,<3.1.0
- - pygments >=2.4.0
- python >=3.10
- - stack_data
- - traitlets >=5.13.0
- - typing_extensions >=4.6
+ - click >=8.1
+ - cloudpickle >=3.0.0
+ - fsspec >=2021.9.0
+ - packaging >=20.0
+ - partd >=1.4.0
+ - pyyaml >=5.3.1
+ - toolz >=0.10.0
+ - importlib-metadata >=4.13.0
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/ipython?source=hash-mapping
- size: 600248
- timestamp: 1732897026255
-- kind: conda
- name: ipython
- version: 8.30.0
- build: pyh7428d3b_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/ipython-8.30.0-pyh7428d3b_0.conda
- sha256: 94ee8215bd1f614c9c984437b184e8dbe61a4014eb5813c276e3dcb18aaa7f46
- md5: 6cdaebbc9e3feb2811eb9f52ed0b89e1
+ - pkg:pypi/dask?source=hash-mapping
+ size: 1058723
+ timestamp: 1752524171028
+- conda: https://prefix.dev/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda
+ sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017
+ md5: 9ce473d1d1be1cc3810856a48b3fab32
depends:
- - __win
- - colorama
- - decorator
- - exceptiongroup
- - jedi >=0.16
- - matplotlib-inline
- - pickleshare
- - prompt-toolkit >=3.0.41,<3.1.0
- - pygments >=2.4.0
- - python >=3.10
- - stack_data
- - traitlets >=5.13.0
- - typing_extensions >=4.6
- license: BSD-3-Clause
+ - python >=3.9
+ license: BSD-2-Clause
license_family: BSD
purls:
- - pkg:pypi/ipython?source=hash-mapping
- size: 600466
- timestamp: 1732897444811
-- kind: conda
- name: isort
- version: 5.13.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
- sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2
- md5: 1d25ed2b95b92b026aaa795eabec8d91
- depends:
- - python >=3.8,<4.0
- - setuptools
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/isort?source=hash-mapping
- size: 73783
- timestamp: 1702518633821
-- kind: conda
- name: jedi
- version: 0.19.2
- build: pyhff2d567_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/jedi-0.19.2-pyhff2d567_0.conda
- sha256: d37dad14c00d06d33bfb99c378d0abd7645224a9491c433af5028f24863341ab
- md5: 11ead81b00e0f7cc901fceb7ccfb92c1
+ - pkg:pypi/decorator?source=hash-mapping
+ size: 14129
+ timestamp: 1740385067843
+- conda: https://prefix.dev/conda-forge/noarch/dill-0.4.0-pyhd8ed1ab_0.conda
+ sha256: 43dca52c96fde0c4845aaff02bcc92f25e1c2e5266ddefc2eac1a3de0960a3b1
+ md5: 885745570573eb6a08e021841928297a
depends:
- - parso >=0.8.3,<0.9.0
- python >=3.9
- license: Apache-2.0 AND MIT
- purls:
- - pkg:pypi/jedi?source=compressed-mapping
- size: 842916
- timestamp: 1731317305873
-- kind: conda
- name: jinja2
- version: 3.1.4
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
- sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d
- md5: 7b86ecb7d3557821c649b3c31e3eb9f2
- depends:
- - markupsafe >=2.0
- - python >=3.7
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/jinja2?source=hash-mapping
- size: 111565
- timestamp: 1715127275924
-- kind: conda
- name: ld_impl_linux-64
- version: '2.43'
- build: h712a8e2_2
- build_number: 2
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda
- sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe
- md5: 048b02e3962f066da18efe3a21b77672
+ - pkg:pypi/dill?source=hash-mapping
+ size: 90864
+ timestamp: 1744798629464
+- conda: https://prefix.dev/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda
+ sha256: fa5966bb1718bbf6967a85075e30e4547901410cc7cb7b16daf68942e9a94823
+ md5: 24c1ca34138ee57de72a943237cde4cc
+ depends:
+ - python >=3.9
+ license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1
+ purls:
+ - pkg:pypi/docutils?source=hash-mapping
+ size: 402700
+ timestamp: 1733217860944
+- 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:
- - binutils_impl_linux-64 2.43
- arch: x86_64
- platform: linux
- license: GPL-3.0-only
- license_family: GPL
- purls: []
- size: 669211
- timestamp: 1729655358674
-- kind: conda
- name: libblas
- version: 3.9.0
- build: 25_linux64_openblas
- build_number: 25
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-25_linux64_openblas.conda
- sha256: d6d12dc437d060f838820e9e61bf73baab651f91935ac594cf10beb9ef1b4450
- md5: 8ea26d42ca88ec5258802715fe1ee10b
- depends:
- - libopenblas >=0.3.28,<0.3.29.0a0
- - libopenblas >=0.3.28,<1.0a0
- constrains:
- - liblapack 3.9.0 25_linux64_openblas
- - libcblas 3.9.0 25_linux64_openblas
- - blas * openblas
- - liblapacke 3.9.0 25_linux64_openblas
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15677
- timestamp: 1729642900350
-- kind: conda
- name: libblas
- version: 3.9.0
- build: 25_osxarm64_openblas
- build_number: 25
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda
- sha256: f1fb9a11af0b2878bd8804b4c77d3733c40076218bcbdb35f575b1c0c9fddf11
- md5: f8cf4d920ff36ce471619010eff59cac
- depends:
- - libopenblas >=0.3.28,<0.3.29.0a0
- - libopenblas >=0.3.28,<1.0a0
- constrains:
- - blas * openblas
- - liblapack 3.9.0 25_osxarm64_openblas
- - liblapacke 3.9.0 25_osxarm64_openblas
- - libcblas 3.9.0 25_osxarm64_openblas
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15913
- timestamp: 1729643265495
-- kind: conda
- name: libblas
- version: 3.9.0
- build: 25_win64_mkl
- build_number: 25
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-25_win64_mkl.conda
- sha256: 5468bb91c44b41ce060bbd997c797b2f91e2b7ce91a7cbf4ddf7e7b734a8dc98
- md5: 499208e81242efb6e5abc7366c91c816
- depends:
- - mkl 2024.2.2 h66d3029_14
- constrains:
- - blas * mkl
- - libcblas 3.9.0 25_win64_mkl
- - liblapack 3.9.0 25_win64_mkl
- - liblapacke 3.9.0 25_win64_mkl
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 3736641
- timestamp: 1729643534444
-- kind: conda
- name: libcblas
- version: 3.9.0
- build: 25_linux64_openblas
- build_number: 25
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda
- sha256: ab87b0477078837c91d9cda62a9faca18fba7c57cc77aa779ae24b3ac783b5dd
- md5: 5dbd1b0fc0d01ec5e0e1fbe667281a11
- depends:
- - libblas 3.9.0 25_linux64_openblas
- constrains:
- - liblapack 3.9.0 25_linux64_openblas
- - blas * openblas
- - liblapacke 3.9.0 25_linux64_openblas
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15613
- timestamp: 1729642905619
-- kind: conda
- name: libcblas
- version: 3.9.0
- build: 25_osxarm64_openblas
- build_number: 25
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- sha256: d9fa5b6b11252132a3383bbf87bd2f1b9d6248bef1b7e113c2a8ae41b0376218
- md5: 4df0fae81f0b5bf47d48c882b086da11
- depends:
- - libblas 3.9.0 25_osxarm64_openblas
- constrains:
- - blas * openblas
- - liblapack 3.9.0 25_osxarm64_openblas
- - liblapacke 3.9.0 25_osxarm64_openblas
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15837
- timestamp: 1729643270793
-- kind: conda
- name: libcblas
- version: 3.9.0
- build: 25_win64_mkl
- build_number: 25
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_win64_mkl.conda
- sha256: 21528cdfe67dafdb2d21925515a167f13963e002c2b6d06d68984767f731850c
- md5: 3ed189ba03a9888a8013aaee0d67c49d
- depends:
- - libblas 3.9.0 25_win64_mkl
- constrains:
- - blas * mkl
- - liblapack 3.9.0 25_win64_mkl
- - liblapacke 3.9.0 25_win64_mkl
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 3732258
- timestamp: 1729643561581
-- kind: conda
- name: libcxx
- version: 19.1.4
- build: ha82da77_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.4-ha82da77_0.conda
- sha256: 342896ebc1d6acbf022ca6df006a936b9a472579e91e3c502cb1f52f218b78e9
- md5: a2d3d484d95889fccdd09498d8f6bf9a
- depends:
- - __osx >=11.0
- arch: arm64
- platform: osx
- license: Apache-2.0 WITH LLVM-exception
- license_family: Apache
+ - __glibc >=2.17
+ license: MIT
+ license_family: MIT
purls: []
- size: 520678
- timestamp: 1732060258949
-- kind: conda
- name: libexpat
- version: 2.6.4
- build: h286801f_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda
- sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745
- md5: 38d2656dd914feb0cab8c629370768bf
+ 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 >=11.0
+ - __osx >=10.13
constrains:
- - expat 2.6.4.*
- arch: arm64
- platform: osx
+ - __osx >=10.13
license: MIT
license_family: MIT
purls: []
- size: 64693
- timestamp: 1730967175868
-- kind: conda
- name: libexpat
- version: 2.6.4
- build: h5888daf_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda
- sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26
- md5: db833e03127376d461e1e13e76f09b6c
+ size: 5938302
+ timestamp: 1747623421024
+- conda: https://prefix.dev/conda-forge/osx-arm64/dprint-0.50.0-h8dba533_0.conda
+ sha256: 6a2de866896d638c8d437f281568d272ea2726edb93556075b6145aafbe6f749
+ md5: 483a7eea67dc9053c3f3e332db34e016
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
+ - __osx >=11.0
constrains:
- - expat 2.6.4.*
- arch: x86_64
- platform: linux
+ - __osx >=11.0
license: MIT
license_family: MIT
purls: []
- size: 73304
- timestamp: 1730967041968
-- kind: conda
- name: libexpat
- version: 2.6.4
- build: he0c23c2_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libexpat-2.6.4-he0c23c2_0.conda
- sha256: 0c0447bf20d1013d5603499de93a16b6faa92d7ead870d96305c0f065b6a5a12
- md5: eb383771c680aa792feb529eaf9df82f
+ 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
- constrains:
- - expat 2.6.4.*
- arch: x86_64
- platform: win
+ - ucrt >=10.0.20348.0
license: MIT
license_family: MIT
purls: []
- size: 139068
- timestamp: 1730967442102
-- kind: conda
- name: libffi
- version: 3.4.2
- build: h3422bc3_5
- build_number: 5
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2
- sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca
- md5: 086914b672be056eb70fd4285b6783b6
- arch: arm64
- platform: osx
+ 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: 21284
+ timestamp: 1746947398083
+- conda: https://prefix.dev/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda
+ sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad
+ md5: ff9efb7f7469aed3c4a8106ffa29593c
+ depends:
+ - python >=3.10
license: MIT
license_family: MIT
- purls: []
- size: 39020
- timestamp: 1636488587153
-- kind: conda
- name: libffi
- version: 3.4.2
- build: h7f98852_5
- build_number: 5
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2
- sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e
- md5: d645c6d2ac96843a2bfaccd2d62b3ac3
- depends:
- - libgcc-ng >=9.4.0
- arch: x86_64
- platform: linux
- license: MIT
- license_family: MIT
- purls: []
- size: 58292
- timestamp: 1636488182923
-- kind: conda
- name: libffi
- version: 3.4.2
- build: h8ffe710_5
- build_number: 5
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2
- sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5
- md5: 2c96d1b6915b408893f9472569dee135
- depends:
- - vc >=14.1,<15.0a0
- - vs2015_runtime >=14.16.27012
- arch: x86_64
- platform: win
- license: MIT
- license_family: MIT
- purls: []
- size: 42063
- timestamp: 1636489106777
-- kind: conda
- name: libgcc
- version: 14.2.0
- build: h77fa898_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda
- sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569
- md5: 3cb76c3f10d3bc7f1105b2fc9db984df
+ purls:
+ - 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:
- - _libgcc_mutex 0.1 conda_forge
- - _openmp_mutex >=4.5
- constrains:
- - libgomp 14.2.0 h77fa898_1
- - libgcc-ng ==14.2.0=*_1
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 848745
- timestamp: 1729027721139
-- kind: conda
- name: libgcc-ng
- version: 14.2.0
- build: h69a702a_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda
- sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7
- md5: e39480b9ca41323497b05492a63bc35b
- depends:
- - libgcc 14.2.0 h77fa898_1
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 54142
- timestamp: 1729027726517
-- kind: conda
- name: libgfortran
- version: 5.0.0
- build: 13_2_0_hd922786_3
- build_number: 3
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda
- sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b
- md5: 4a55d9e169114b2b90d3ec4604cd7bbf
- depends:
- - libgfortran5 13.2.0 hf226fd6_3
- arch: arm64
- platform: osx
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 110233
- timestamp: 1707330749033
-- kind: conda
- name: libgfortran
- version: 14.2.0
- build: h69a702a_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda
- sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977
- md5: f1fd30127802683586f768875127a987
- depends:
- - libgfortran5 14.2.0 hd5240d6_1
- constrains:
- - libgfortran-ng ==14.2.0=*_1
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 53997
- timestamp: 1729027752995
-- kind: conda
- name: libgfortran5
- version: 13.2.0
- build: hf226fd6_3
- build_number: 3
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda
- sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a
- md5: 66ac81d54e95c534ae488726c1f698ea
+ - python
+ - libgcc >=14
+ - libstdcxx >=14
+ - libgcc >=14
+ - __glibc >=2.17,<3.0.a0
+ - python_abi 3.10.* *_cp310
+ license: MIT
+ license_family: MIT
+ 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:
- - llvm-openmp >=8.0.0
- constrains:
- - libgfortran 5.0.0 13_2_0_*_3
- arch: arm64
- platform: osx
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 997381
- timestamp: 1707330687590
-- kind: conda
- name: libgfortran5
- version: 14.2.0
- build: hd5240d6_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda
- sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d
- md5: 9822b874ea29af082e5d36098d25427d
- depends:
- - libgcc >=14.2.0
- constrains:
- - libgfortran 14.2.0
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 1462645
- timestamp: 1729027735353
-- kind: conda
- name: libgomp
- version: 14.2.0
- build: h77fa898_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda
- sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63
- md5: cc3573974587f12dda90d96e3e55a702
+ - python
+ - __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:
- - _libgcc_mutex 0.1 conda_forge
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 460992
- timestamp: 1729027639220
-- kind: conda
- name: libhwloc
- version: 2.11.1
- build: default_h8125262_1000
- build_number: 1000
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda
- sha256: 92728e292640186759d6dddae3334a1bc0b139740b736ffaeccb825fb8c07a2e
- md5: 933bad6e4658157f1aec9b171374fde2
- depends:
- - libxml2 >=2.12.7,<3.0a0
- - pthreads-win32
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 2379689
- timestamp: 1720461835526
-- kind: conda
- name: libiconv
- version: '1.17'
- build: hcfcfb64_2
- build_number: 2
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda
- sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b
- md5: e1eb10b1cca179f2baa3601e4efc8712
- depends:
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: LGPL-2.1-only
- purls: []
- size: 636146
- timestamp: 1702682547199
-- kind: conda
- name: liblapack
- version: 3.9.0
- build: 25_linux64_openblas
- build_number: 25
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-25_linux64_openblas.conda
- sha256: 9d1ff017714edb2d84868f0f931a4a0e7c289a971062b2ac66cfc8145df7e20e
- md5: 4dc03a53fc69371a6158d0ed37214cd3
- depends:
- - libblas 3.9.0 25_linux64_openblas
- constrains:
- - liblapacke 3.9.0 25_linux64_openblas
- - libcblas 3.9.0 25_linux64_openblas
- - blas * openblas
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15608
- timestamp: 1729642910812
-- kind: conda
- name: liblapack
- version: 3.9.0
- build: 25_osxarm64_openblas
- build_number: 25
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda
- sha256: fdd742407672a9af20e70764550cf18b3ab67f12e48bf04163b90492fbc401e7
- md5: 19bbddfec972d401838330453186108d
- depends:
- - libblas 3.9.0 25_osxarm64_openblas
- constrains:
- - blas * openblas
- - liblapacke 3.9.0 25_osxarm64_openblas
- - libcblas 3.9.0 25_osxarm64_openblas
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 15823
- timestamp: 1729643275943
-- kind: conda
- name: liblapack
- version: 3.9.0
- build: 25_win64_mkl
- build_number: 25
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-25_win64_mkl.conda
- sha256: 98c13a28596389539abe3f608c6fbd2826df47671f77c58a331df878c6140c53
- md5: f716ef84564c574e8e74ae725f5d5f93
- depends:
- - libblas 3.9.0 25_win64_mkl
- constrains:
- - blas * mkl
- - libcblas 3.9.0 25_win64_mkl
- - liblapacke 3.9.0 25_win64_mkl
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 3736560
- timestamp: 1729643588182
-- kind: conda
- name: libmpdec
- version: 4.0.0
- build: h2466b09_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda
- sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf
- md5: 74860100b2029e2523cf480804c76b9b
+ - python_abi 3.10.* *_cp310
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: BSD-2-Clause
- license_family: BSD
- purls: []
- size: 88657
- timestamp: 1723861474602
-- kind: conda
- name: libmpdec
- version: 4.0.0
- build: h4bc722e_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda
- sha256: d02d1d3304ecaf5c728e515eb7416517a0b118200cd5eacbe829c432d1664070
- md5: aeb98fdeb2e8f25d43ef71fbacbeec80
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc-ng >=12
- arch: x86_64
- platform: linux
- license: BSD-2-Clause
- license_family: BSD
- purls: []
- size: 89991
- timestamp: 1723817448345
-- kind: conda
- name: libmpdec
- version: 4.0.0
- build: h99b78c6_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda
- sha256: f7917de9117d3a5fe12a39e185c7ce424f8d5010a6f97b4333e8a1dcb2889d16
- md5: 7476305c35dd9acef48da8f754eedb40
- depends:
- - __osx >=11.0
- arch: arm64
- platform: osx
- license: BSD-2-Clause
- license_family: BSD
- purls: []
- size: 69263
- timestamp: 1723817629767
-- kind: conda
- name: libnsl
- version: 2.0.1
- build: hd590300_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda
- sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6
- md5: 30fd6e37fe21f86f4bd26d6ee73eeec7
- depends:
- - libgcc-ng >=12
- arch: x86_64
- platform: linux
- license: LGPL-2.1-only
- license_family: GPL
- purls: []
- size: 33408
- timestamp: 1697359010159
-- kind: conda
- name: libopenblas
- version: 0.3.28
- build: openmp_hf332438_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda
- sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373
- md5: 40803a48d947c8639da6704e9a44d3ce
- depends:
- - __osx >=11.0
- - libgfortran 5.*
- - libgfortran5 >=13.2.0
- - llvm-openmp >=18.1.8
- constrains:
- - openblas >=0.3.28,<0.3.29.0a0
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 4165774
- timestamp: 1730772154295
-- kind: conda
- name: libopenblas
- version: 0.3.28
- build: pthreads_h94d23a6_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda
- sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe
- md5: 62857b389e42b36b686331bec0922050
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=14
- - libgfortran
- - libgfortran5 >=14.2.0
- constrains:
- - openblas >=0.3.28,<0.3.29.0a0
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
- purls: []
- size: 5578513
- timestamp: 1730772671118
-- kind: conda
- name: libsqlite
- version: 3.47.0
- build: h2466b09_1
- build_number: 1
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.0-h2466b09_1.conda
- sha256: 3342d6fe787f5830f7e8466d9c65c914bfd8d67220fb5673041b338cbba47afe
- md5: 5b1f36012cc3d09c4eb9f24ad0e2c379
- depends:
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: Unlicense
- purls: []
- size: 892175
- timestamp: 1730208431651
-- kind: conda
- name: libsqlite
- version: 3.47.0
- build: hadc24fc_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_1.conda
- sha256: 8a9aadf996a2399f65b679c6e7f29139d5059f699c63e6d7b50e20db10c00508
- md5: b6f02b52a174e612e89548f4663ce56a
- depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
- - libzlib >=1.3.1,<2.0a0
- arch: x86_64
- platform: linux
- license: Unlicense
- purls: []
- size: 875349
- timestamp: 1730208050020
-- kind: conda
- name: libsqlite
- version: 3.47.0
- build: hbaaea75_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda
- sha256: 5a96caa566c11e5a5ebdcdb86a0759a7fb27d3c5f42e6a0fd0d6023c1e935d9e
- md5: 07a14fbe439eef078cc479deca321161
+ - 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:
- - __osx >=11.0
- - libzlib >=1.3.1,<2.0a0
- arch: arm64
- platform: osx
+ - python >=3.9
license: Unlicense
- purls: []
- size: 837683
- timestamp: 1730208293578
-- kind: conda
- name: libstdcxx
- version: 14.2.0
- build: hc0a3c3a_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda
- sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462
- md5: 234a5554c53625688d51062645337328
- depends:
- - libgcc 14.2.0 h77fa898_1
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 3893695
- timestamp: 1729027746910
-- kind: conda
- name: libstdcxx-ng
- version: 14.2.0
- build: h4852527_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda
- sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8
- md5: 8371ac6457591af2cf6159439c1fd051
- depends:
- - libstdcxx 14.2.0 hc0a3c3a_1
- arch: x86_64
- platform: linux
- license: GPL-3.0-only WITH GCC-exception-3.1
- license_family: GPL
- purls: []
- size: 54105
- timestamp: 1729027780628
-- kind: conda
- name: libuuid
- version: 2.38.1
- build: h0b41bf4_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
- sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18
- md5: 40b61aab5c7ba9ff276c41cfffe6b80b
+ 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:
- - libgcc-ng >=12
- arch: x86_64
- platform: linux
+ - python >=3.10
license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 33601
- timestamp: 1680112270483
-- kind: conda
- name: libuv
- version: 1.49.2
- build: h7ab814d_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda
- sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02
- md5: 4bc348e3a1a74d20a3f9beb866d75e0a
- depends:
- - __osx >=11.0
- arch: arm64
- platform: osx
- license: MIT
- license_family: MIT
- purls: []
- size: 410500
- timestamp: 1729322654121
-- kind: conda
- name: libuv
- version: 1.49.2
- build: hb9d3cd8_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda
- sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31
- md5: 070e3c9ddab77e38799d5c30b109c633
+ purls:
+ - pkg:pypi/fsspec?source=hash-mapping
+ size: 145678
+ timestamp: 1756908673345
+- conda: https://prefix.dev/conda-forge/noarch/furo-2024.8.6-pyhd8ed1ab_2.conda
+ sha256: 3d6e42c5c22ea3c3b8d35b6582f544bc5fc08df37c394f5a30d6644b626a7be6
+ md5: a4ffdb4a5370e427f0ad980df69bbdbc
depends:
- - __glibc >=2.17,<3.0.a0
- - libgcc >=13
- arch: x86_64
- platform: linux
+ - beautifulsoup4
+ - pygments >=2.7
+ - python >=3.9
+ - sphinx >=6.0,<9.0
+ - sphinx-basic-ng
license: MIT
license_family: MIT
- purls: []
- size: 884647
- timestamp: 1729322566955
-- kind: conda
- name: libxcrypt
- version: 4.4.36
- build: hd590300_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
- sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c
- md5: 5aa797f8787fe7a17d1b0821485b5adc
+ purls:
+ - pkg:pypi/furo?source=hash-mapping
+ size: 82395
+ timestamp: 1735043817924
+- conda: https://prefix.dev/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda
+ sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c
+ md5: c94a5994ef49749880a8139cf9afcbe1
depends:
- libgcc-ng >=12
- arch: x86_64
- platform: linux
- license: LGPL-2.1-or-later
- purls: []
- size: 100393
- timestamp: 1702724383534
-- kind: conda
- name: libxml2
- version: 2.13.5
- build: h442d1da_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libxml2-2.13.5-h442d1da_0.conda
- sha256: 020466b17c143190bd5a6540be2ceef4c1f8d514408bd5f0adaafcd9d0057b5c
- md5: 1fbabbec60a3c7c519a5973b06c3b2f4
- depends:
- - libiconv >=1.17,<2.0a0
- - libzlib >=1.3.1,<2.0a0
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
- license: MIT
- license_family: MIT
+ - libstdcxx-ng >=12
+ license: GPL-2.0-or-later OR LGPL-3.0-or-later
purls: []
- size: 1511585
- timestamp: 1731489892312
-- kind: conda
- name: libzlib
- version: 1.3.1
- build: h2466b09_2
- build_number: 2
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
- md5: 41fbfac52c601159df6c01f875de31b9
- depends:
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- constrains:
- - zlib 1.3.1 *_2
- arch: x86_64
- platform: win
- license: Zlib
- license_family: Other
+ 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: 55476
- timestamp: 1727963768015
-- kind: conda
- name: libzlib
- version: 1.3.1
- build: h8359307_2
- build_number: 2
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
- sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b
- md5: 369964e85dc26bfe78f41399b366c435
+ size: 428919
+ timestamp: 1718981041839
+- conda: https://prefix.dev/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda
+ sha256: 76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd
+ md5: eed7278dfbab727b56f2c0b64330814b
depends:
- __osx >=11.0
- constrains:
- - zlib 1.3.1 *_2
- arch: arm64
- platform: osx
- license: Zlib
- license_family: Other
+ - libcxx >=16
+ license: GPL-2.0-or-later OR LGPL-3.0-or-later
purls: []
- size: 46438
- timestamp: 1727963202283
-- kind: conda
- name: libzlib
- version: 1.3.1
- build: hb9d3cd8_2
- build_number: 2
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
- sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4
- md5: edb0dca6bc32e4f4789199455a1dbeb8
+ size: 365188
+ timestamp: 1718981343258
+- 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
- - libgcc >=13
- constrains:
- - zlib 1.3.1 *_2
- arch: x86_64
- platform: linux
- license: Zlib
- license_family: Other
- purls: []
- size: 60963
- timestamp: 1727963148474
-- kind: conda
- name: llvm-openmp
- version: 19.1.4
- build: hdb05f8b_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.4-hdb05f8b_0.conda
- sha256: dfdcd8de37899d984326f9734b28f46f80b88c068e44c562933a8b3117f2401a
- md5: 76ca179ec970bea6e275e2fa477c2d3c
- depends:
- - __osx >=11.0
- constrains:
- - openmp 19.1.4|19.1.4.*
- arch: arm64
- platform: osx
- license: Apache-2.0 WITH LLVM-exception
- license_family: APACHE
- purls: []
- size: 281554
- timestamp: 1732102484807
-- kind: pypi
- name: markdown-it-py
- version: 3.0.0
- url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl
- sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1
- requires_dist:
- - mdurl~=0.1
- - psutil ; extra == 'benchmarking'
- - pytest ; extra == 'benchmarking'
- - pytest-benchmark ; extra == 'benchmarking'
- - pre-commit~=3.0 ; extra == 'code-style'
- - commonmark~=0.9 ; extra == 'compare'
- - markdown~=3.4 ; extra == 'compare'
- - mistletoe~=1.0 ; extra == 'compare'
- - mistune~=2.0 ; extra == 'compare'
- - panflute~=2.3 ; extra == 'compare'
- - linkify-it-py>=1,<3 ; extra == 'linkify'
- - mdit-py-plugins ; extra == 'plugins'
- - gprof2dot ; extra == 'profiling'
- - mdit-py-plugins ; extra == 'rtd'
- - myst-parser ; extra == 'rtd'
- - pyyaml ; extra == 'rtd'
- - sphinx ; extra == 'rtd'
- - sphinx-copybutton ; extra == 'rtd'
- - sphinx-design ; extra == 'rtd'
- - sphinx-book-theme ; extra == 'rtd'
- - jupyter-sphinx ; extra == 'rtd'
- - coverage ; extra == 'testing'
- - pytest ; extra == 'testing'
- - pytest-cov ; extra == 'testing'
- - pytest-regressions ; extra == 'testing'
- requires_python: '>=3.8'
-- kind: conda
- name: markupsafe
- version: 3.0.2
- build: py313h8060acc_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_0.conda
- sha256: 9158873dbd5b715d5683dd9241b3eab35e896e31ea7842052f1b4e8c3945bf45
- md5: ab825f8b676368beb91350c6a2da6e11
+ - 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
- - libgcc >=13
+ - 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
- constrains:
- - jinja2 >=3.0.0
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
+ license: LGPL-3.0-or-later
+ license_family: LGPL
purls:
- - pkg:pypi/markupsafe?source=hash-mapping
- size: 25104
- timestamp: 1729351477153
-- kind: conda
- name: markupsafe
- version: 3.0.2
- build: py313hb4c8b1a_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_0.conda
- sha256: 2b7500300aba9726f785781ded5fb1205c76d3047a93cd30868712e1e02f8c6e
- md5: 4ab654528518cea7e94f53af79bd3171
- depends:
+ - 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:
+ - __osx >=10.13
+ - gmp >=6.3.0,<7.0a0
+ - 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: 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
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- constrains:
- - jinja2 >=3.0.0
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
+ license: LGPL-3.0-or-later
+ license_family: LGPL
purls:
- - pkg:pypi/markupsafe?source=hash-mapping
- size: 27813
- timestamp: 1729351491668
-- kind: conda
- name: markupsafe
- version: 3.0.2
- build: py313heb2b014_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313heb2b014_0.conda
- sha256: 749b1f081ba6d327df6056387f54a7b1234e4bce483a809f44ea7882cbba0a0f
- md5: 6d41ed5825393b6d408bae2c966c391a
+ - 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
+ - mpc >=1.3.1,<2.0a0
+ - mpfr >=4.2.1,<5.0a0
+ - python >=3.10,<3.11.0a0
+ - python >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ license: LGPL-3.0-or-later
+ license_family: LGPL
+ purls:
+ - pkg:pypi/gmpy2?source=hash-mapping
+ 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
- constrains:
- - jinja2 >=3.0.0
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
+ license: LGPL-3.0-or-later
+ license_family: LGPL
purls:
- - pkg:pypi/markupsafe?source=hash-mapping
- size: 24620
- timestamp: 1729351507962
-- kind: conda
- name: matplotlib-inline
- version: 0.1.7
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
- sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab
- md5: 779345c95648be40d22aaa89de7d4254
+ - 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.6
- - traitlets
- license: BSD-3-Clause
- license_family: BSD
+ - python >=3.10
+ - hyperframe >=6.1,<7
+ - hpack >=4.1,<5
+ - python
+ license: MIT
+ license_family: MIT
purls:
- - pkg:pypi/matplotlib-inline?source=hash-mapping
- size: 14599
- timestamp: 1713250613726
-- kind: conda
- name: mccabe
- version: 0.7.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
- sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b
- md5: 34fc335fc50eef0b5ea708f2b5f54e0c
+ - 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.6
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- - pkg:pypi/mccabe?source=hash-mapping
- size: 10909
- timestamp: 1643049714491
-- kind: pypi
- name: mdit-py-plugins
- version: 0.4.2
- url: https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl
- sha256: 0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636
- requires_dist:
- - markdown-it-py>=1.0.0,<4.0.0
- - pre-commit ; extra == 'code-style'
- - myst-parser ; extra == 'rtd'
- - sphinx-book-theme ; extra == 'rtd'
- - coverage ; extra == 'testing'
- - pytest ; extra == 'testing'
- - pytest-cov ; extra == 'testing'
- - pytest-regressions ; extra == 'testing'
- requires_python: '>=3.8'
-- kind: pypi
- name: mdurl
- version: 0.1.2
- url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl
- sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8
- requires_python: '>=3.7'
-- kind: conda
- name: mkl
- version: 2024.2.2
- build: h66d3029_14
- build_number: 14
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_14.conda
- sha256: 098ba4a3cb82f627bc79dc0ab1111b44859c9ef4aaa8d75ce043bce107770cb3
- md5: f011e7cc21918dc9d1efe0209e27fa16
- depends:
- - intel-openmp 2024.*
- - tbb 2021.*
- arch: x86_64
- platform: win
- license: LicenseRef-IntelSimplifiedSoftwareOct2022
- license_family: Proprietary
- purls: []
- size: 103019089
- timestamp: 1727378392081
-- kind: conda
- name: mypy_extensions
- version: 1.0.0
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda
- sha256: f240217476e148e825420c6bc3a0c0efb08c0718b7042fae960400c02af858a3
- md5: 4eccaeba205f0aed9ac3a9ea58568ca3
+ - pkg:pypi/hpack?source=hash-mapping
+ 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.5
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- - pkg:pypi/mypy-extensions?source=hash-mapping
- size: 10492
- timestamp: 1675543414256
-- kind: pypi
- name: myst-parser
- version: 4.0.0
- url: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl
- sha256: b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d
- requires_dist:
- - docutils>=0.19,<0.22
- - jinja2
- - markdown-it-py~=3.0
- - mdit-py-plugins~=0.4,>=0.4.1
- - pyyaml
- - sphinx>=7,<9
- - pre-commit~=3.0 ; extra == 'code-style'
- - linkify-it-py~=2.0 ; extra == 'linkify'
- - sphinx>=7 ; extra == 'rtd'
- - ipython ; extra == 'rtd'
- - sphinx-book-theme~=1.1 ; extra == 'rtd'
- - sphinx-design ; extra == 'rtd'
- - sphinx-copybutton ; extra == 'rtd'
- - sphinxext-rediraffe~=0.2.7 ; extra == 'rtd'
- - sphinxext-opengraph~=0.9.0 ; extra == 'rtd'
- - sphinx-pyscript ; extra == 'rtd'
- - sphinx-tippy>=0.4.3 ; extra == 'rtd'
- - sphinx-autodoc2~=0.5.0 ; extra == 'rtd'
- - sphinx-togglebutton ; extra == 'rtd'
- - beautifulsoup4 ; extra == 'testing'
- - coverage[toml] ; extra == 'testing'
- - defusedxml ; extra == 'testing'
- - pytest>=8,<9 ; extra == 'testing'
- - pytest-cov ; extra == 'testing'
- - pytest-regressions ; extra == 'testing'
- - pytest-param-files~=0.6.0 ; extra == 'testing'
- - sphinx-pytest ; extra == 'testing'
- - pygments ; extra == 'testing-docutils'
- - pytest>=8,<9 ; extra == 'testing-docutils'
- - pytest-param-files~=0.6.0 ; extra == 'testing-docutils'
- requires_python: '>=3.10'
-- kind: conda
- name: ncurses
- version: '6.5'
- build: h7bae524_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda
- sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc
- md5: cb2b0ea909b97b3d70cd3921d1445e1a
- depends:
- - __osx >=11.0
- arch: arm64
- platform: osx
- license: X11 AND BSD-3-Clause
- purls: []
- size: 802321
- timestamp: 1724658775723
-- kind: conda
- name: ncurses
- version: '6.5'
- build: he02047a_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
- sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a
- md5: 70caf8bb6cf39a0b6b7efc885f51c0fe
+ - pkg:pypi/hyperframe?source=hash-mapping
+ 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
depends:
- __glibc >=2.17,<3.0.a0
- libgcc-ng >=12
- arch: x86_64
- platform: linux
- license: X11 AND BSD-3-Clause
+ - libstdcxx-ng >=12
+ license: MIT
+ license_family: MIT
purls: []
- size: 889086
- timestamp: 1724658547447
-- kind: conda
- name: nodeenv
- version: 1.9.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_0.conda
- sha256: 85ee07342ab055dc081f3de8292c5e7195e43e046db9c5750f242f928f6bb8f2
- md5: dfe0528d0f1c16c1f7c528ea5536ab30
+ size: 12129203
+ timestamp: 1720853576813
+- conda: https://prefix.dev/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda
+ sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7
+ md5: d68d48a3060eb5abdc1cdc8e2a3a5966
depends:
- - python 2.7|>=3.7
- - setuptools
- license: BSD-3-Clause
- license_family: BSD
- purls:
- - pkg:pypi/nodeenv?source=hash-mapping
- size: 34489
- timestamp: 1717585382642
-- kind: conda
- name: nodejs
- version: 22.11.0
- build: h57928b3_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/nodejs-22.11.0-h57928b3_0.conda
- sha256: b182be51b98ee410d9065c2e202dfb86bb7cb6f1db958790e34836bb99e9ad4b
- md5: 902548b1eaf4fec280a98c13c3d8cf3e
- arch: x86_64
- platform: win
+ - __osx >=10.13
license: MIT
license_family: MIT
purls: []
- size: 25685624
- timestamp: 1731917625548
-- kind: conda
- name: nodejs
- version: 22.11.0
- build: haa7c7e9_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.11.0-haa7c7e9_0.conda
- sha256: 304a2bf558f262a8e29f6b6abcc5fabde3b31d903bc699381b1b57f41e7c34d0
- md5: 34da600f0addaef949d28953e23482b4
+ size: 11761697
+ timestamp: 1720853679409
+- conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
+ sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620
+ md5: 5eb22c1d7b3fc4abb50d92d621583137
depends:
- __osx >=11.0
- - 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
- arch: arm64
- platform: osx
license: MIT
license_family: MIT
purls: []
- size: 14965601
- timestamp: 1731936621771
-- kind: conda
- name: nodejs
- version: 22.11.0
- build: hf235a45_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/nodejs-22.11.0-hf235a45_0.conda
- sha256: b90c26267d12d5dd97ef09b4393235be3a3cbe5eef07c5a2ada4230623f0b0b1
- md5: 64cd0bde7dffac5baa4d9fb0ac3ae713
+ size: 11857802
+ timestamp: 1720853997952
+- conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
+ sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87
+ md5: 39a4f67be3286c86d696df570b1201b7
depends:
- - __glibc >=2.28,<3.0.a0
- - icu >=75.1,<76.0a0
- - libgcc >=13
- - libstdcxx >=13
- - libuv >=1.49.2,<2.0a0
- - libzlib >=1.3.1,<2.0a0
- - openssl >=3.4.0,<4.0a0
- - zlib
- arch: x86_64
- platform: linux
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/idna?source=hash-mapping
+ size: 49765
+ timestamp: 1733211921194
+- conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2
+ sha256: c2bfd7043e0c4c12d8b5593de666c1e81d67b83c474a0a79282cc5c4ef845460
+ md5: 7de5386c8fea29e76b303f37dde4c352
+ depends:
+ - python >=3.4
license: MIT
license_family: MIT
- purls: []
- size: 21336234
- timestamp: 1731921762943
-- kind: conda
- name: nodejs-wheel
- version: 22.11.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.11.0-pyhd8ed1ab_0.conda
- sha256: 7a1fdbb9617f712b14189d44257eb42634e1c47050dc93d4cc4ea9d124def92b
- md5: 31ebf648339310a0a4db3314595c3521
+ purls:
+ - pkg:pypi/imagesize?source=hash-mapping
+ size: 10164
+ timestamp: 1656939625410
+- conda: https://prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda
+ sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745
+ md5: 63ccfdc3a3ce25b027b8767eb722fca8
+ depends:
+ - python >=3.9
+ - zipp >=3.20
+ - python
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/importlib-metadata?source=hash-mapping
+ size: 34641
+ timestamp: 1747934053147
+- conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
+ sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca
+ md5: 6837f3eff7dcea42ecd714ce1ac2b108
depends:
- - nodejs
- python >=3.9
license: MIT
license_family: MIT
purls:
- - pkg:pypi/nodejs-wheel-binaries?source=hash-mapping
- size: 11699
- timestamp: 1732885085867
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py310h1ec8c79_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py310h1ec8c79_0.conda
- sha256: 5c47cabe3da23a791b6163acbc6ff8c4b4debd6a72e41f9f4f5294738bc3b321
- md5: 478874a4b6f52f275e71641284343488
+ - pkg:pypi/iniconfig?source=hash-mapping
+ size: 11474
+ timestamp: 1733223232820
+- conda: https://prefix.dev/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda
+ sha256: 0fd2b0b84c854029041b0ede8f4c2369242ee92acc0092f8407b1fe9238a8209
+ md5: 2d89243bfb53652c182a7c73182cce4f
+ license: LicenseRef-IntelSimplifiedSoftwareOct2022
+ license_family: Proprietary
+ purls: []
+ size: 1852356
+ timestamp: 1723739573141
+- conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyh6be1c34_0.conda
+ sha256: 658c547dafb10cd0989f2cdf72f8ee9fe8f66240307b64555ee43f6908e9d0ad
+ md5: aec1868dd4cbe028b2c8cb11377895a6
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
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- constrains:
- - numpy-base <0a0
- arch: x86_64
- platform: win
+ - __win
+ - colorama
+ - 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.11
+ - stack_data
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 6513869
- timestamp: 1730588869612
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py310h530be0a_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py310h530be0a_0.conda
- sha256: 006b3a60d912f53c244e2b2a1062b4b092be631191204b2502e1f3e45e7decca
- md5: 197700c4ca191088c1d47bab613020a4
+ - pkg:pypi/ipython?source=hash-mapping
+ size: 630157
+ timestamp: 1756474536497
+- conda: https://prefix.dev/conda-forge/noarch/ipython-9.5.0-pyhfa0c392_0.conda
+ sha256: e9ca009d3aab9d8a85f0241d6ada2c7fbc84072008e95f803fa59da3294aa863
+ md5: c0916cc4b733577cd41df93884d857b0
depends:
- - __osx >=11.0
- - libblas >=3.9.0,<4.0a0
- - libcblas >=3.9.0,<4.0a0
- - libcxx >=18
- - liblapack >=3.9.0,<4.0a0
- - python >=3.10,<3.11.0a0
- - python >=3.10,<3.11.0a0 *_cpython
- - python_abi 3.10.* *_cp310
- constrains:
- - numpy-base <0a0
- arch: arm64
- platform: osx
+ - __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.11
+ - stack_data
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 5934307
- timestamp: 1730588442975
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py310hd6e36ab_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py310hd6e36ab_0.conda
- sha256: f75a5ffd197be7b4f965307770d89234c7ea42431ecd4a72a584a8be29bc3616
- md5: b67f4f02236b75765deec42f5cf2b35b
+ - pkg:pypi/ipython?source=hash-mapping
+ 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
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/isort?source=hash-mapping
+ 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.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.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.8,<10.0
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/jax?source=hash-mapping
+ 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
- - libblas >=3.9.0,<4.0a0
- - libcblas >=3.9.0,<4.0a0
+ - 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 >=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
- - liblapack >=3.9.0,<4.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.5.0,<4.0a0
- python >=3.10,<3.11.0a0
- python_abi 3.10.* *_cp310
+ - scipy >=1.9
constrains:
- - numpy-base <0a0
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
+ - jax >=0.6.0
+ license: Apache-2.0
+ license_family: APACHE
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 7879497
- timestamp: 1730588558893
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py313h4bf6692_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/numpy-2.1.3-py313h4bf6692_0.conda
- sha256: e2e7451083c143cd61227d663e55712a7432239e9a9c758db0b66a26bc89a7f8
- md5: 17bcf851cceab793dad11ab8089d4bc4
- depends:
+ - pkg:pypi/jax-cuda12-pjrt?source=hash-mapping
+ - pkg:pypi/jax-cuda12-plugin?source=hash-mapping
+ - pkg:pypi/jaxlib?source=hash-mapping
+ size: 146820753
+ timestamp: 1748663708635
+- conda: https://prefix.dev/conda-forge/linux-64/jaxlib-0.6.0-cuda126py313hb1b46e1_200.conda
+ sha256: a844966afa3cf9af2ec3a08fd31f605cf10db14217c93ff9877308718adfcf83
+ md5: 8d7e109d11f32a6aab5fc954970f8687
+ depends:
+ - __cuda
- __glibc >=2.17,<3.0.a0
- - libblas >=3.9.0,<4.0a0
- - libcblas >=3.9.0,<4.0a0
+ - 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 >=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
- - liblapack >=3.9.0,<4.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.21,<3
+ - openssl >=3.5.0,<4.0a0
- python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
+ - scipy >=1.9
constrains:
- - numpy-base <0a0
- arch: x86_64
- platform: linux
- license: BSD-3-Clause
- license_family: BSD
+ - jax >=0.6.0
+ license: Apache-2.0
+ license_family: APACHE
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 8404824
- timestamp: 1730588549941
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py313hca4752e_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/numpy-2.1.3-py313hca4752e_0.conda
- sha256: 3e8bb3474fc90e8c5c1799f4a4e8b887d31b50a0e94fd9f63e2725f7be2e3d4f
- md5: c9d17b236cff44f7a24f19808842ec39
+ - pkg:pypi/jax-cuda12-pjrt?source=hash-mapping
+ - pkg:pypi/jax-cuda12-plugin?source=hash-mapping
+ - pkg:pypi/jaxlib?source=hash-mapping
+ 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:
- - __osx >=11.0
- - libblas >=3.9.0,<4.0a0
- - libcblas >=3.9.0,<4.0a0
- - libcxx >=18
- - liblapack >=3.9.0,<4.0a0
- - python >=3.13,<3.14.0a0
- - python >=3.13,<3.14.0a0 *_cp313
- - python_abi 3.13.* *_cp313
+ - __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:
- - numpy-base <0a0
- arch: arm64
- platform: osx
- license: BSD-3-Clause
- license_family: BSD
+ - jax >=0.6.2
+ license: Apache-2.0
+ license_family: APACHE
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 6468921
- timestamp: 1730588494311
-- kind: conda
- name: numpy
- version: 2.1.3
- build: py313hee8cc43_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/numpy-2.1.3-py313hee8cc43_0.conda
- sha256: 79b8493c839cd4cc22e2a7024f289067b029ef2b09212973a98a39e5bbeecc03
- md5: 083a90ad306f544f6eeb9ad00c4d9879
+ - 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:
- - libblas >=3.9.0,<4.0a0
- - libcblas >=3.9.0,<4.0a0
- - liblapack >=3.9.0,<4.0a0
+ - __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.23,<3
+ - openssl >=3.5.1,<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
+ - scipy >=1.9
constrains:
- - numpy-base <0a0
- arch: x86_64
- platform: win
- license: BSD-3-Clause
- license_family: BSD
+ - jax >=0.7.0
+ license: Apache-2.0
+ license_family: APACHE
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 7072965
- timestamp: 1730588905304
-- kind: conda
- name: openssl
- version: 3.4.0
- build: h2466b09_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda
- sha256: e03045a0837e01ff5c75e9273a572553e7522290799807f918c917a9826a6484
- md5: d0d805d9b5524a14efb51b3bff965e83
- depends:
- - ca-certificates
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
+ - 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 >=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:
+ - jax >=0.6.2
license: Apache-2.0
- license_family: Apache
- purls: []
- size: 8491156
- timestamp: 1731379715927
-- kind: conda
- name: openssl
- version: 3.4.0
- build: h39f12f2_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda
- sha256: bd1d58ced46e75efa3b842c61642fd12272c69e9fe4d7261078bc082153a1d53
- md5: df307bbc703324722df0293c9ca2e418
- depends:
- - __osx >=11.0
- - ca-certificates
- arch: arm64
- platform: osx
+ 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:
+ - __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:
+ - jax >=0.7.0
license: Apache-2.0
- license_family: Apache
- purls: []
- size: 2935176
- timestamp: 1731377561525
-- kind: conda
- name: openssl
- version: 3.4.0
- build: hb9d3cd8_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda
- sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705
- md5: 23cc74f77eb99315c0360ec3533147a9
+ 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
- - ca-certificates
- - libgcc >=13
- arch: x86_64
- platform: linux
+ - __osx >=11.0
+ - 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 >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ - scipy >=1.9
+ constrains:
+ - jax >=0.6.2
license: Apache-2.0
- license_family: Apache
- purls: []
- size: 2947466
- timestamp: 1731377666602
-- kind: conda
- name: packaging
- version: '24.2'
- build: pyhff2d567_1
- build_number: 1
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhff2d567_1.conda
- sha256: 74843f871e5cd8a1baf5ed8c406c571139c287141efe532f8ffbdafa3664d244
- md5: 8508b703977f4c4ada34d657d051972c
+ license_family: APACHE
+ 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:
- - python >=3.8
+ - __osx >=11.0
+ - 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.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:
+ - jax >=0.7.0
license: Apache-2.0
- license_family: APACHE
purls:
- - pkg:pypi/packaging?source=hash-mapping
- size: 60380
- timestamp: 1731802602808
-- kind: conda
- name: parso
- version: 0.8.4
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
- sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae
- md5: 81534b420deb77da8833f2289b8d47ac
+ - 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:
- - python >=3.6
- license: MIT
- license_family: MIT
+ - parso >=0.8.3,<0.9.0
+ - python >=3.9
+ license: Apache-2.0 AND MIT
purls:
- - pkg:pypi/parso?source=hash-mapping
- size: 75191
- timestamp: 1712320447201
-- kind: conda
- name: pexpect
- version: 4.9.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda
- sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e
- md5: 629f3203c99b32e0988910c93e77f3b6
+ - 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:
- - ptyprocess >=0.5
- - python >=3.7
- license: ISC
+ - markupsafe >=2.0
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
purls:
- - pkg:pypi/pexpect?source=hash-mapping
- size: 53600
- timestamp: 1706113273252
-- kind: conda
- name: pickleshare
- version: 0.7.5
- build: py_1003
- build_number: 1003
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
- sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738
- md5: 415f0ebb6198cc2801c73438a9fb5761
+ - 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:
- - python >=3
+ - __glibc >=2.17,<3.0.a0
+ constrains:
+ - binutils_impl_linux-64 2.44
+ license: GPL-3.0-only
+ license_family: GPL
+ purls: []
+ 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:
- - pkg:pypi/pickleshare?source=hash-mapping
- size: 9332
- timestamp: 1602536313357
-- kind: conda
- name: platformdirs
- version: 4.3.6
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda
- sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f
- md5: fd8f2b18b65bbf62e8f653100690c8d2
- depends:
- - python >=3.8
+ purls: []
+ 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:
- - pkg:pypi/platformdirs?source=hash-mapping
- size: 20625
- timestamp: 1726613611845
-- kind: conda
- name: pluggy
- version: 1.5.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
- sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26
- md5: d3483c8fc2dc2cc3f5cf43e26d60cabf
- depends:
- - python >=3.8
+ purls: []
+ 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:
- - pkg:pypi/pluggy?source=hash-mapping
- size: 23815
- timestamp: 1713667175451
-- kind: conda
- name: pre-commit
- version: 4.0.1
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pre-commit-4.0.1-pyha770c72_0.conda
- sha256: 2490b18ec802d8f085f2de8298a3d275451f7db17769353080dfb121fe386675
- md5: 5971cc64048943605f352f7f8612de6c
- depends:
- - cfgv >=2.0.0
- - identify >=1.0.0
- - nodeenv >=0.11.1
- - python >=3.9
- - pyyaml >=5.1
- - virtualenv >=20.10.0
+ 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:
- - pkg:pypi/pre-commit?source=hash-mapping
- size: 194633
- timestamp: 1728420305558
-- kind: conda
- name: prompt-toolkit
- version: 3.0.48
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda
- sha256: 44e4e6108d425a666856a52d1523e5d70890256a8920bb0dcd3d55cc750f3207
- md5: 4c05134c48b6a74f33bbb9938e4a115e
+ 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:
- - python >=3.7
- - wcwidth
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
constrains:
- - prompt_toolkit 3.0.48
+ - abseil-cpp =20250127.1
+ - libabseil-static =20250127.1=cxx17*
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ 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 >=10.13
+ - libcxx >=18
+ constrains:
+ - libabseil-static =20250127.1=cxx17*
+ - abseil-cpp =20250127.1
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ 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
+ - libcxx >=18
+ constrains:
+ - abseil-cpp =20250127.1
+ - libabseil-static =20250127.1=cxx17*
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 1192962
+ timestamp: 1742369814061
+- conda: https://prefix.dev/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda
+ sha256: 78790771f44e146396d9ae92efbe1022168295afd8d174f653a1fa16f0f0fa32
+ md5: d6a4cd236fc1c69a1cfc9698fb5e391f
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.42.34438
+ constrains:
+ - libabseil-static =20250512.1=cxx17*
+ - abseil-cpp =20250512.1
+ license: Apache-2.0
+ 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: 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:
+ - 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: 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:
+ - mkl >=2023.2.0,<2024.0a0
+ constrains:
+ - 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: 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.30,<0.3.31.0a0
+ - libopenblas >=0.3.30,<1.0a0
+ constrains:
+ - 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: 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:
+ - libopenblas >=0.3.30,<0.3.31.0a0
+ - libopenblas >=0.3.30,<1.0a0
+ constrains:
+ - 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: 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:
+ - 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: 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
+ - attr >=2.5.1,<2.6.0a0
+ - libgcc >=13
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 35_hfdb39a5_mkl
+ constrains:
+ - 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: 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 35_h59b9bed_openblas
+ constrains:
+ - 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: 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 20_osx64_mkl
+ constrains:
+ - 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: 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:
+ - 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: 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:
+ - 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: 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:
+ - 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: 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.28,<3.0.a0
+ - cuda-nvrtc
+ - cuda-version >=12.9,<12.10.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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.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: 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.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: 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-nvrtc
+ - cuda-version >=12,<13.0a0
+ - libcublas
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - libcudnn-jit <0a
+ license: LicenseRef-cuDNN-Software-License-Agreement
+ purls: []
+ 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.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: 36268949
+ timestamp: 1753302377524
+- conda: https://prefix.dev/conda-forge/win-64/libcudss-0.6.0.5-hca898b4_0.conda
+ sha256: d2dc8f68904d232c916903a87caf64055bddcded9545685aac8190fe45827425
+ md5: 08481b1082ff6ea0b0b0780ab20b5091
+ depends:
+ - _openmp_mutex >=4.5
+ - cuda-version >=12,<13.0a0
+ - libcublas
+ - libgomp >=15.1.0
+ - ucrt >=10.0.20348.0
+ - 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: 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
+ - cuda-version >=12.9,<12.10.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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:
+ - 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: 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.9,<12.10.0a0
+ - libcufft 11.4.1.4 h5888daf_0
+ - libgcc >=13
+ - libstdcxx >=13
+ constrains:
+ - libcufft-static >=11.4.1.4
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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:
+ - __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: 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.28,<3.0.a0
+ - cuda-version >=12.9,<12.10.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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.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: 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:
+ - __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: 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.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
+ - libnvjitlink >=12.9.86,<13.0a0
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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:
+ - 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: 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:
+ - __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: 60980
+ timestamp: 1752012578026
+- conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.10.65-h5888daf_1.conda
+ sha256: 4424d0fe2a30c2d8622d466264d5a45f319d5a6b82212d4dcc43832e7be569d4
+ md5: 68f6a483f51c8ed3732d50662cf6769d
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - cuda-version >=12.9,<12.10.0a0
+ - libgcc >=13
+ - libnvjitlink >=12.9.86,<13.0a0
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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:
+ - 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: 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:
+ - __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: 52958
+ timestamp: 1752012194858
+- conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.0-h3d58e20_1.conda
+ sha256: ff2c82c14232cc0ff8038b3d43dace4a792c05a9b01465448445ac52539dee40
+ md5: d5bb255dcf8d208f30089a5969a0314b
+ depends:
+ - __osx >=10.13
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ purls: []
+ size: 572463
+ timestamp: 1756698407882
+- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-21.1.0-hf598326_1.conda
+ sha256: 58427116dc1b58b13b48163808daa46aacccc2c79d40000f8a3582938876fed7
+ md5: 0fb2c0c9b1c1259bc7db75c1342b1d99
+ depends:
+ - __osx >=11.0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ purls: []
+ size: 568692
+ timestamp: 1756698505599
+- conda: https://prefix.dev/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda
+ sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2
+ md5: 4211416ecba1866fab0c6470986c22d6
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ constrains:
+ - expat 2.7.1.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 74811
+ timestamp: 1752719572741
+- conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda
+ sha256: 689862313571b62ee77ee01729dc093f2bf25a2f99415fcfe51d3a6cd31cce7b
+ md5: 9fdeae0b7edda62e989557d645769515
+ depends:
+ - __osx >=10.13
+ constrains:
+ - expat 2.7.1.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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.7.1.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - expat 2.7.1.*
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 141322
+ timestamp: 1752719767870
+- conda: https://prefix.dev/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda
+ sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab
+ md5: ede4673863426c0883c0063d853bbd85
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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: 51216
+ timestamp: 1743434595269
+- conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda
+ sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60
+ md5: c215a60c2935b517dcda8cad4705734d
+ depends:
+ - __osx >=11.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 39839
+ timestamp: 1743434670405
+- conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.6-h537db12_1.conda
+ sha256: d3b0b8812eab553d3464bbd68204f007f1ebadf96ce30eb0cbc5159f72e353f5
+ md5: 85d8fa5e55ed8f93f874b3b23ed54ec6
+ depends:
+ - 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 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: 824191
+ timestamp: 1757042543820
+- conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_5.conda
+ sha256: f54bb9c3be12b24be327f4c1afccc2969712e0b091cdfbd1d763fb3e61cda03f
+ md5: 069afdf8ea72504e48d23ae1171d951c
+ depends:
+ - 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:
+ - libgfortran-ng ==15.1.0=*_5
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 29169
+ timestamp: 1757042575979
+- conda: https://prefix.dev/conda-forge/osx-64/libgfortran-15.1.0-h5f6db21_1.conda
+ sha256: 844500c9372d455f6ae538ffd3cdd7fda5f53d25a2a6b3ba33060a302c37bc3e
+ md5: 07cfad6b37da6e79349c6e3a0316a83b
+ depends:
+ - libgfortran5 15.1.0 hfa3c126_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ 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 15.1.0 hb74de2c_1
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 134383
+ timestamp: 1756239485494
+- conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_5.conda
+ sha256: 9d06adc6d8e8187ddc1cad87525c690bc8202d8cb06c13b76ab2fc80a35ed565
+ md5: fbd4008644add05032b6764807ee2cba
+ depends:
+ - __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: 1564589
+ timestamp: 1757042559498
+- conda: https://prefix.dev/conda-forge/osx-64/libgfortran5-15.1.0-hfa3c126_1.conda
+ sha256: c4bb79d9e9be3e3a335282b50d18a7965e2a972b95508ea47e4086f1fd699342
+ md5: 696e408f36a5a25afdb23e862053ca82
+ depends:
+ - llvm-openmp >=8.0.0
+ constrains:
+ - libgfortran 15.1.0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ 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 15.1.0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 759679
+ timestamp: 1756238772083
+- conda: https://prefix.dev/conda-forge/linux-64/libgomp-15.1.0-h767d61c_5.conda
+ sha256: 125051d51a8c04694d0830f6343af78b556dd88cc249dfec5a97703ebfb1832d
+ md5: dcd5ff1940cd38f6df777cac86819d60
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ 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:
+ - msys2-conda-epoch <0.0a0
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ size: 535560
+ timestamp: 1757042749206
+- conda: https://prefix.dev/conda-forge/linux-64/libgpg-error-1.55-h3f2d84a_0.conda
+ sha256: 697334de4786a1067ea86853e520c64dd72b11a05137f5b318d8a444007b5e60
+ md5: 2bd47db5807daade8500ed7ca4c512a4
+ depends:
+ - libstdcxx >=13
+ - libgcc >=13
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: LGPL-2.1-only
+ purls: []
+ 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.5,<2.0a0
+ - libabseil * cxx17*
+ - libabseil >=20250127.1,<20250128.0a0
+ - libgcc >=13
+ - libprotobuf >=5.29.3,<5.29.4.0a0
+ - libre2-11 >=2024.7.2
+ - libstdcxx >=13
+ - libzlib >=1.3.1,<2.0a0
+ - openssl >=3.5.0,<4.0a0
+ - re2
+ constrains:
+ - grpc-cpp =1.71.0
+ license: Apache-2.0
+ license_family: APACHE
+ purls: []
+ 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 >=10.14
+ - c-ares >=1.34.5,<2.0a0
+ - libabseil * cxx17*
+ - 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.5.0,<4.0a0
+ - re2
+ constrains:
+ - grpc-cpp =1.71.0
+ license: Apache-2.0
+ license_family: APACHE
+ purls: []
+ size: 5510897
+ timestamp: 1745201273719
+- conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.71.0-h857da87_1.conda
+ sha256: 082668830025c2a2842165724b44d4f742688353932a6705cd61aa4ecb9aa173
+ md5: 59fe16787c94d3dc92f2dfa533de97c6
+ depends:
+ - __osx >=11.0
+ - c-ares >=1.34.5,<2.0a0
+ - libabseil * cxx17*
+ - 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.5.0,<4.0a0
+ - re2
+ constrains:
+ - grpc-cpp =1.71.0
+ license: Apache-2.0
+ license_family: APACHE
+ purls: []
+ 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 >=14
+ - libstdcxx >=14
+ - libxml2
+ - libxml2-16 >=2.14.5
+ license: BSD-3-Clause
+ purls: []
+ 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
+ - libxml2-16 >=2.14.5
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSD-3-Clause
+ purls: []
+ size: 2413164
+ timestamp: 1757305758742
+- conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
+ sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f
+ md5: 915f5995e94f60e9a4826e0b0920ee88
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ license: LGPL-2.1-only
+ purls: []
+ 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: 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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: LGPL-2.1-only
+ purls: []
+ 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:
+ - libblas 3.9.0 35_h59b9bed_openblas
+ constrains:
+ - 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: 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:
+ - libblas 3.9.0 35_hfdb39a5_mkl
+ constrains:
+ - 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: 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 20_osx64_mkl
+ constrains:
+ - blas * 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: 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 34_h7f60823_openblas
+ constrains:
+ - 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: 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 35_h10e41b3_openblas
+ constrains:
+ - 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: 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 35_h5709861_mkl
+ constrains:
+ - 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: 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: 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: 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: 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
+ - _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: 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: 71829
+ timestamp: 1748393749336
+- conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda
+ sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf
+ md5: 74860100b2029e2523cf480804c76b9b
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ license: BSD-2-Clause
+ license_family: BSD
+ purls: []
+ size: 88657
+ timestamp: 1723861474602
+- 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
+ - libgcc >=13
+ license: LGPL-2.1-or-later
+ license_family: LGPL
+ purls: []
+ size: 741323
+ timestamp: 1731846827427
+- conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda
+ sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5
+ md5: d864d34357c3b65a4b731f78c0801dc4
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ license: LGPL-2.1-only
+ license_family: GPL
+ purls: []
+ 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.10.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: LicenseRef-NVIDIA-End-User-License-Agreement
+ purls: []
+ 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.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: 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.3.0
+ constrains:
+ - openblas >=0.3.30,<0.3.31.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=10.13
+ - 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: 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
+ - 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: 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
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 3475015
+ timestamp: 1753801238063
+- conda: https://prefix.dev/conda-forge/osx-64/libprotobuf-5.29.3-h14f6895_2.conda
+ sha256: c0b766c87a50098685f43d57424eebae35f1c4b812fc6d025cbb15a8c0a2800e
+ md5: 8abbe99f9b80602f94a801321ec06ace
+ depends:
+ - __osx >=10.14
+ - libabseil * cxx17*
+ - libabseil >=20250127.1,<20250128.0a0
+ - libcxx >=19
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=20250127.1,<20250128.0a0
+ - libcxx >=19
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=20250512.1,<20250513.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=20250127.1,<20250128.0a0
+ - libgcc >=13
+ - libstdcxx >=13
+ constrains:
+ - re2 2025.06.26.*
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=10.13
+ - libabseil * cxx17*
+ - libabseil >=20250127.1,<20250128.0a0
+ - libcxx >=18
+ constrains:
+ - re2 2025.06.26.*
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=20250127.1,<20250128.0a0
+ - libcxx >=18
+ constrains:
+ - re2 2025.06.26.*
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=14
+ - libzlib >=1.3.1,<2.0a0
+ license: blessing
+ purls: []
+ size: 932581
+ timestamp: 1753948484112
+- conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda
+ sha256: 466366b094c3eb4b1d77320530cbf5400e7a10ab33e4824c200147488eebf7a6
+ md5: 156bfb239b6a67ab4a01110e6718cbc4
+ depends:
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
+ license: blessing
+ purls: []
+ 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
+ license: blessing
+ purls: []
+ size: 902645
+ timestamp: 1753948599139
+- conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.50.4-hf5d6505_0.conda
+ sha256: 5dc4f07b2d6270ac0c874caec53c6984caaaa84bc0d3eb593b0edf3dc8492efa
+ md5: ccb20d946040f86f0c05b644d5eadeca
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: blessing
+ purls: []
+ size: 1288499
+ timestamp: 1753948889360
+- conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_5.conda
+ sha256: 0f5f61cab229b6043541c13538d75ce11bd96fb2db76f94ecf81997b1fde6408
+ md5: 4e02a49aaa9d5190cb630fa43528fbe6
+ depends:
+ - __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: 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 15.1.0 h8f9b012_5
+ license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
+ purls: []
+ 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
+ - libcap >=2.75,<2.76.0a0
+ - libgcc >=13
+ - 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: 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:
+ - __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
+ - 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: 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
+ - _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
+ - libmagma >=2.9.0,<2.9.1.0a0
+ - libprotobuf >=5.29.3,<5.29.4.0a0
+ - libstdcxx >=13
+ - 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
+ - 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: 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 >=10.15
+ - 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
+ - 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.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: 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:
+ - __osx >=10.15
+ - 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
+ - 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.7.1
+ - pytorch-gpu <0.0a0
+ - pytorch 2.7.1 cpu_mkl_*_102
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 >=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.23,<3
+ - python >=3.13,<3.14.0a0 *_cp313
+ - python_abi 3.13.* *_cp313
+ - sleef >=3.8,<4.0a0
+ constrains:
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
+ - pytorch 2.7.1 cpu_generic_*_2
+ - openblas * openmp_*
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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
+ - 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: 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.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: 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:
+ - 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: 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: LGPL-2.1-or-later
+ purls: []
+ size: 143533
+ timestamp: 1750949902296
+- conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.41.1-he9a06e4_0.conda
+ sha256: 776e28735cee84b97e4d05dd5d67b95221a3e2c09b8b13e3d6dbe6494337d527
+ md5: af930c65e9a79a3423d6d36e265cef65
+ depends:
+ - __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: 895108
+ timestamp: 1753948278280
+- conda: https://prefix.dev/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda
+ sha256: d90dd0eee6f195a5bd14edab4c5b33be3635b674b0b6c010fb942b956aa2254c
+ md5: fbfc6cf607ae1e1e498734e256561dc3
+ depends:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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:
+ - pthreads-win32 <0.0a0
+ - msys2-conda-epoch <0.0a0
+ license: MIT AND BSD-3-Clause-Clear
+ purls: []
+ 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 >=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: 47472
+ timestamp: 1757361123591
+- conda: https://prefix.dev/conda-forge/linux-64/libxml2-2.14.6-h26afc86_0.conda
+ sha256: e93a8a52243805c39d793567bffbf29bd7690f212ccb6442276d231f535746c1
+ md5: 02bfa78f26c105d0e5f36cd58dfcc397
+ depends:
+ - __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: 47655
+ timestamp: 1757360772873
+- conda: https://prefix.dev/conda-forge/osx-64/libxml2-2.14.6-h23bb396_0.conda
+ sha256: d341a989da7875feedf4e2b3f493c84d6ab5ba1e24c5afdb13cbfcc61e5df060
+ md5: ac4f36eb87b8b253a7fe6ea4b437a430
+ depends:
+ - __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
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - icu <0.0a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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:
+ - __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: 565189
+ timestamp: 1757361108132
+- conda: https://prefix.dev/conda-forge/osx-64/libxml2-16-2.14.6-h0ad03eb_0.conda
+ sha256: b8a2e90f975becfdf347187fd7896e45104ef933f30681096136f4dbdd378dde
+ md5: 70398b4454cf9136630fd289ef1e103c
+ depends:
+ - __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: 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 >=10.13
+ - icu >=75.1,<76.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: 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.18,<2.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libzlib >=1.3.1,<2.0a0
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - icu <0.0a0
+ - libxml2 2.14.6
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 525005
+ timestamp: 1757361198773
+- conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda
+ sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4
+ md5: edb0dca6bc32e4f4789199455a1dbeb8
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ 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
+ depends:
+ - __osx >=11.0
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ purls: []
+ size: 46438
+ timestamp: 1727963202283
+- conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
+ sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
+ md5: 41fbfac52c601159df6c01f875de31b9
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ constrains:
+ - zlib 1.3.1 *_2
+ license: Zlib
+ license_family: Other
+ purls: []
+ size: 55476
+ timestamp: 1727963768015
+- 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 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: 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:
+ - intel-openmp <0.0a0
+ - openmp 21.1.0|21.1.0.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ purls: []
+ 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 >=14
+ - libstdcxx >=14
+ - libzlib >=1.3.1,<2.0a0
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/llvmlite?source=hash-mapping
+ size: 29982450
+ timestamp: 1756303853510
+- conda: https://prefix.dev/conda-forge/linux-64/llvmlite-0.44.0-py313hfdae721_2.conda
+ sha256: 04d493d696a4d5dfef213b28b8f88c37e5ba90e24c8a913d9fbc5c02ea0637d1
+ md5: dd0d7947635c0c524608eab7db55dcc9
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=14
+ - libstdcxx >=14
+ - 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/llvmlite?source=hash-mapping
+ 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
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/llvmlite?source=hash-mapping
+ 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/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:
+ - __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-2-Clause
+ license_family: BSD
+ purls:
+ - 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
+ - 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/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:
+ - libzlib >=1.3.1,<2.0a0
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
+ - 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: 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/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
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ license: BSD-2-Clause
+ license_family: BSD
+ purls: []
+ size: 167055
+ timestamp: 1733741040117
+- conda: https://prefix.dev/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda
+ sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a
+ md5: fee3164ac23dfca50cfcc8b85ddefb81
+ depends:
+ - mdurl >=0.1,<1
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/markdown-it-py?source=hash-mapping
+ size: 64430
+ timestamp: 1733250550053
+- conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda
+ sha256: 0bed20ec27dcbcaf04f02b2345358e1161fb338f8423a4ada1cf0f4d46918741
+ md5: 8ce3f0332fd6de0d737e2911d329523f
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=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: 23091
+ timestamp: 1733219814479
+- conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda
+ sha256: d812caf52efcea7c9fd0eafb21d45dadfd0516812f667b928bee50e87634fae5
+ md5: 21b62c55924f01b6eef6827167b46acb
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=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: 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
+ depends:
+ - __osx >=11.0
+ - python >=3.10,<3.11.0a0
+ - python >=3.10,<3.11.0a0 *_cpython
+ - 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: 22681
+ timestamp: 1733219957702
+- conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda
+ sha256: 81759af8a9872c8926af3aa59dc4986eee90a0956d1ec820b42ac4f949a71211
+ md5: 3acf05d8e42ff0d99820d2d889776fff
+ depends:
+ - __osx >=11.0
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
+ - 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: 24757
+ timestamp: 1733219916634
+- conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda
+ sha256: deb8505b7ef76d363174d133e2ff814ae75b91ac4c3ae5550a7686897392f4d0
+ md5: 79dfc050ae5a7dd4e63e392c984e2576
+ 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:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 25941
+ timestamp: 1733220087179
+- conda: https://prefix.dev/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_1.conda
+ sha256: f16cb398915f52d582bcea69a16cf69a56dab6ea2fab6f069da9c2c10f09534c
+ md5: ec9ecf6ee4cceb73a0c9a8cdfdf58bed
+ depends:
+ - 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:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 27930
+ timestamp: 1733220059655
+- conda: https://prefix.dev/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda
+ sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6
+ md5: af6ab708897df59bd6e7283ceab1b56b
+ depends:
+ - python >=3.9
+ - traitlets
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/matplotlib-inline?source=hash-mapping
+ size: 14467
+ timestamp: 1733417051523
+- conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda
+ sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1
+ md5: 827064ddfe0de2917fb29f1da4f8f533
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/mccabe?source=hash-mapping
+ size: 12934
+ timestamp: 1733216573915
+- conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda
+ sha256: 123cc004e2946879708cdb6a9eff24acbbb054990d6131bb94bca7a374ebebfc
+ md5: 1997a083ef0b4c9331f9191564be275e
+ depends:
+ - 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: 43805
+ timestamp: 1754946862113
+- conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
+ sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7
+ md5: 592132998493b3ff25fd7479396e8351
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/mdurl?source=hash-mapping
+ size: 14465
+ timestamp: 1733255681319
+- 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 >=20.1.8
+ - tbb 2021.*
+ license: LicenseRef-IntelSimplifiedSoftwareOct2022
+ license_family: Proprietary
+ purls: []
+ 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: 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 >=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: 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 >=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: 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
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - gmp >=6.3.0,<7.0a0
+ - libgcc >=13
+ - mpfr >=4.2.1,<5.0a0
+ license: LGPL-3.0-or-later
+ license_family: LGPL
+ 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
+ depends:
+ - __osx >=11.0
+ - gmp >=6.3.0,<7.0a0
+ - mpfr >=4.2.1,<5.0a0
+ license: LGPL-3.0-or-later
+ license_family: LGPL
+ purls: []
+ size: 104766
+ timestamp: 1725629165420
+- conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda
+ sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0
+ md5: 2eeb50cab6652538eee8fc0bc3340c81
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - gmp >=6.3.0,<7.0a0
+ - libgcc >=13
+ license: LGPL-3.0-only
+ license_family: LGPL
+ 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
+ depends:
+ - __osx >=11.0
+ - gmp >=6.3.0,<7.0a0
+ license: LGPL-3.0-only
+ license_family: LGPL
+ purls: []
+ size: 345517
+ timestamp: 1725746730583
+- conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda
+ sha256: 7d7aa3fcd6f42b76bd711182f3776a02bef09a68c5f117d66b712a6d81368692
+ md5: 3585aa87c43ab15b167b574cd73b057b
+ depends:
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/mpmath?source=hash-mapping
+ size: 439705
+ timestamp: 1733302781386
+- 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 >=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/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
+ - 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/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:
+ - 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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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: 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
+ - markdown-it-py >=3.0.0,<4.0.0
+ - mdit-py-plugins >=0.4.1,<1
+ - python >=3.10
+ - pyyaml
+ - sphinx >=7,<9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/myst-parser?source=hash-mapping
+ 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: 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: 797030
+ timestamp: 1738196177597
+- conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda
+ sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117
+ md5: fd40bf7f7f4bc4b647dc8512053d9873
+ depends:
+ - python >=3.10
+ - python
+ constrains:
+ - numpy >=1.24
+ - scipy >=1.10,!=1.11.0,!=1.11.1
+ - matplotlib >=3.7
+ - pandas >=2.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/networkx?source=hash-mapping
+ size: 1265008
+ timestamp: 1731521053408
+- conda: https://prefix.dev/conda-forge/noarch/networkx-3.5-pyhe01879c_0.conda
+ sha256: 02019191a2597865940394ff42418b37bc585a03a1c643d7cea9981774de2128
+ md5: 16bff3d37a4f99e3aa089c36c2b8d650
+ depends:
+ - 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/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
+ - 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
+ - icu >=75.1,<76.0a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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
+ - libzlib >=1.3.1,<2.0a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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: 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
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/nodejs-wheel-binaries?source=hash-mapping
+ size: 12388
+ timestamp: 1754049967477
+- conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2
+ sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b
+ md5: 9a66894dfd07c4510beb6b3f9672ccc0
+ constrains:
+ - mkl <0.a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 3843
+ timestamp: 1582593857545
+- 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 >=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: 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 >=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
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numba?source=hash-mapping
+ 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.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:
+ - 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: 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
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc >=13
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx >=13
+ - 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: 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
+ - libcblas >=3.9.0,<4.0a0
+ - 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:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ size: 6861771
+ timestamp: 1642633197594
+- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.2.6-py310h07c5b4d_0.conda
+ sha256: f1851c5726ff1a4de246e385ba442d749a68ef39316c834933ee9b980dbe62df
+ md5: d79253493dcc76b95221588b98e1eb3c
+ depends:
+ - __osx >=10.13
+ - libblas >=3.9.0,<4.0a0
+ - libcblas >=3.9.0,<4.0a0
+ - 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
+ - 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: 7596354
+ timestamp: 1747545051328
+- conda: https://prefix.dev/conda-forge/osx-64/numpy-2.3.2-py313h6157c7f_2.conda
+ sha256: 0acfc9d69a0a67c84b3eeab1e1f87c0fa39f06f809aa335b3147b2fda138afb4
+ md5: ddd9ef05c608889df1c5fb5bdfda4172
+ depends:
+ - 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
+ 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
+ - python_abi 3.10.* *_cp310
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ 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
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=18
+ - liblapack >=3.9.0,<4.0a0
+ - python >=3.10,<3.11.0a0
+ - python >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ 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
+ - libcblas >=3.9.0,<4.0a0
+ - libcxx >=18
+ - liblapack >=3.9.0,<4.0a0
+ - python >=3.13,<3.14.0a0
+ - python >=3.13,<3.14.0a0 *_cp313
+ - python_abi 3.13.* *_cp313
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ 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/prompt-toolkit?source=hash-mapping
- size: 270271
- timestamp: 1727341744544
-- kind: conda
- name: pthreads-win32
- version: 2.9.1
- build: h2466b09_4
- build_number: 4
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
- sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45
- md5: cf98a67a1ec8040b42455002a24f0b0b
+ - 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
+ - liblapack >=3.9.0,<4.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
- arch: x86_64
- platform: win
- license: LGPL-2.1-or-later
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ 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.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: 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
+ constrains:
+ - numpy-base <0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpy?source=hash-mapping
+ 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
+ - tomli >=1.1.0
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/numpydoc?source=hash-mapping
+ 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
+ - ca-certificates
+ - libgcc >=14
+ license: Apache-2.0
+ license_family: Apache
purls: []
- size: 265827
- timestamp: 1728400965968
-- kind: conda
- name: ptyprocess
- version: 0.7.0
- build: pyhd3deb0d_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
- sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a
- md5: 359eeb6536da0e687af562ed265ec263
+ size: 3128847
+ timestamp: 1754465526100
+- conda: https://prefix.dev/conda-forge/osx-64/openssl-3.5.2-h6e31bce_0.conda
+ sha256: 8be57a11019666aa481122c54e29afd604405b481330f37f918e9fbcd145ef89
+ md5: 22f5d63e672b7ba467969e9f8b740ecd
+ depends:
+ - __osx >=10.13
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ 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: 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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Apache-2.0
+ license_family: Apache
+ purls: []
+ size: 9275175
+ timestamp: 1754467904482
+- conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda
+ sha256: af71aabb2bfa4b2c89b7b06403e5cec23b418452cae9f9772bd7ac3f9ea1ff44
+ md5: 52919815cd35c4e1a0298af658ccda04
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/opt-einsum?source=hash-mapping
+ size: 62479
+ timestamp: 1733688053334
+- 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 >=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:
+ - 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:
+ - __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:
+ - 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:
+ - __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:
+ - 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:
+ - __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
+ purls:
+ - 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:
+ - __osx >=11.0
+ - libcxx >=19
+ - python >=3.10,<3.11.0a0
+ - python >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ - typing-extensions >=4.6
+ license: Apache-2.0
+ license_family: Apache
+ purls:
+ - 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 >=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/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:
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
+ - 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: 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.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: 81562
+ timestamp: 1755974222274
+- conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda
+ sha256: 472fc587c63ec4f6eba0cc0b06008a6371e0a08a5986de3cf4e8024a47b4fe6c
+ md5: 0badf9c54e24cecfb0ad2f99d680c163
+ depends:
+ - locket
+ - python >=3.9
+ - toolz
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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
+ depends:
+ - ptyprocess >=0.5
+ - python >=3.9
+ license: ISC
+ purls:
+ - pkg:pypi/pexpect?source=hash-mapping
+ size: 53561
+ timestamp: 1733302019362
+- conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda
+ sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b
+ md5: 11a9d1d09a3615fc07c3faf79bc0b943
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pickleshare?source=hash-mapping
+ size: 11748
+ timestamp: 1733327448200
+- conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.4.0-pyhcf101f3_0.conda
+ sha256: dfe0fa6e351d2b0cef95ac1a1533d4f960d3992f9e0f82aeb5ec3623a699896b
+ md5: cc9d9a3929503785403dbfad9f707145
+ depends:
+ - python >=3.10
- python
+ license: MIT
+ license_family: MIT
+ purls:
+ - 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: 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.10
+ - wcwidth
+ constrains:
+ - prompt_toolkit 3.0.52
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/prompt-toolkit?source=hash-mapping
+ 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 >=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: 474571
+ timestamp: 1755851494108
+- conda: https://prefix.dev/conda-forge/osx-64/psutil-7.0.0-py313h585f44e_1.conda
+ sha256: df943fa46f030b043ca28bd939d7e4110273aa41197080a598da467cbd300c6b
+ md5: a1457ea8cfd6104cea63410320772abc
+ depends:
+ - __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: 480270
+ timestamp: 1755851507696
+- conda: https://prefix.dev/conda-forge/osx-arm64/psutil-7.0.0-py313hcdf3177_1.conda
+ sha256: 4964c94067fdf290d4790095ead992b2a3afb438bff8bd9b51c444d97fb63914
+ md5: 1ce8cf644e210b54665d8e46850d7567
+ depends:
+ - __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: 484934
+ timestamp: 1755851718841
+- conda: https://prefix.dev/conda-forge/win-64/psutil-7.0.0-py313h5ea7bf4_1.conda
+ sha256: 9e63542ffd8ac4104cff34e722019fc3eb6eef274c77740eef1d73056c56cade
+ md5: 00c2580acce9c51004818c6981c586d9
+ depends:
+ - 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-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
+ depends:
+ - python >=3.9
license: ISC
purls:
- pkg:pypi/ptyprocess?source=hash-mapping
- size: 16546
- timestamp: 1609419417991
-- kind: conda
- name: pure_eval
- version: 0.2.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
- sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8
- md5: 0f051f09d992e0d08941706ad519ee0e
+ size: 19457
+ timestamp: 1733302371990
+- conda: https://prefix.dev/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
+ sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0
+ md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04
depends:
- - python >=3.5
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/pure-eval?source=hash-mapping
- size: 16551
- timestamp: 1721585805256
-- kind: conda
- name: pycparser
- version: '2.22'
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
- sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64
- md5: 844d9eb3b43095b031874477f7d70088
+ size: 16668
+ timestamp: 1733569518868
+- conda: https://prefix.dev/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda
+ sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be
+ md5: 70ece62498c769280f791e836ac53fff
+ depends:
+ - python >=3.8
+ - pybind11-global ==3.0.1 *_0
+ - python
+ constrains:
+ - pybind11-abi ==11
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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:
+ - python >=3.8
+ - __win
+ - python
+ constrains:
+ - pybind11-abi ==11
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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:
- python >=3.8
+ - __unix
+ - python
+ constrains:
+ - pybind11-abi ==11
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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
+ depends:
+ - python >=3.9
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/pycparser?source=hash-mapping
- size: 105098
- timestamp: 1711811634025
-- kind: conda
- name: pygments
- version: 2.18.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
- sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b
- md5: b7f5c092b8f9800150d998a71b76d5a1
+ size: 110100
+ timestamp: 1733195786147
+- conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
+ sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a
+ md5: 6b6ece66ebcae2d5f326c77ef2c5a066
depends:
- - python >=3.8
+ - python >=3.9
license: BSD-2-Clause
license_family: BSD
purls:
- pkg:pypi/pygments?source=hash-mapping
- size: 879295
- timestamp: 1714846885370
-- kind: conda
- name: pylint
- version: 3.3.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pylint-3.3.1-pyhd8ed1ab_0.conda
- sha256: 35c0b0f3b8b0585fee0966f5a09b7bd43519a5bca58a9f29f502dd8442a9b14c
- md5: 2a3426f75e2172c932131f4e3d51bcf4
+ 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.4,<3.4.0-dev0
+ - 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.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: 352873
- timestamp: 1727266530261
-- kind: conda
- name: pysocks
- version: 1.7.1
- build: pyh0701188_6
- build_number: 6
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2
- sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7
- md5: 56cd9fe388baac0e90c7149cfac95b60
+ size: 381472
+ timestamp: 1754751762506
+- conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
+ sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca
+ md5: e2fd202833c4a981ce8a65974fe4abd1
depends:
- __win
- - python >=3.8
+ - python >=3.9
- win_inet_pton
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/pysocks?source=hash-mapping
- size: 19348
- timestamp: 1661605138291
-- kind: conda
- name: pysocks
- version: 1.7.1
- build: pyha2e5f31_6
- build_number: 6
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
- sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b
- md5: 2a7de29fb590ca14b5243c4c812c8025
+ size: 21784
+ timestamp: 1733217448189
+- conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda
+ sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8
+ md5: 461219d1a5bd61342293efa2c0c90eac
depends:
- __unix
- - python >=3.8
+ - python >=3.9
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/pysocks?source=hash-mapping
- size: 18981
- timestamp: 1661604969727
-- kind: conda
- name: pytest
- version: 8.3.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda
- sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815
- md5: c03d61f31f38fdb9facf70c29958bf7a
- depends:
- - colorama
- - exceptiongroup >=1.0.0rc8
- - iniconfig
- - packaging
- - pluggy <2,>=1.5
- - python >=3.8
+ size: 21085
+ timestamp: 1733217331982
+- 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: 258293
- timestamp: 1725977334143
-- kind: conda
- name: pytest-cov
- version: 6.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_0.conda
- sha256: 915323edaee9f6f3ebd8c2e5450b4865700edf2c85eb2bba61980e66c6f03c5d
- md5: cb8a11b6d209e3d85e5094bdbd9ebd9c
+ - 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: 26218
- timestamp: 1730284385470
-- kind: conda
- name: python
- version: 3.10.15
- build: h4a871b0_2_cpython
- build_number: 2
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/python-3.10.15-h4a871b0_2_cpython.conda
- sha256: c1e5e93b887d8cd1aa31d24b9620cb7eb6645c08c97b15ffc844fd6c29051420
- md5: 98059097f62e97be9aed7ec904055825
+ 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.8.1,<6.0a0
- libnsl >=2.0.1,<2.1.0a0
- - libsqlite >=3.46.1,<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.3.2,<4.0a0
+ - openssl >=3.5.0,<4.0a0
- readline >=8.2,<9.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- - xz >=5.2.6,<6.0a0
constrains:
- python_abi 3.10.* *_cp310
- arch: x86_64
- platform: linux
license: Python-2.0
purls: []
- size: 25321141
- timestamp: 1729042931665
-- kind: conda
- name: python
- version: 3.10.15
- build: hdce6c4c_2_cpython
- build_number: 2
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/python-3.10.15-hdce6c4c_2_cpython.conda
- sha256: 50dbbcc5efacaa05906cdc6b42bbdda17cee7910386bef8d737edffe7f5a7f2f
- md5: b6a5e688170f1301a858f6001c32822d
+ 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:
- - __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.* *_cp313
+ - readline >=8.2,<9.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - tzdata
+ license: Python-2.0
+ purls: []
+ 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:
+ - __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
- - libsqlite >=3.46.1,<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.3.2,<4.0a0
+ - openssl >=3.5.0,<4.0a0
- readline >=8.2,<9.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- - xz >=5.2.6,<6.0a0
constrains:
- python_abi 3.10.* *_cp310
- arch: arm64
- platform: osx
license: Python-2.0
purls: []
- size: 12411616
- timestamp: 1729042103758
-- kind: conda
- name: python
- version: 3.10.15
- build: hfaddaf0_2_cpython
- build_number: 2
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/python-3.10.15-hfaddaf0_2_cpython.conda
- sha256: ee5af019e5d7140ad2d40b5f772fcd68ded056853a478a2b54f417855977e99b
- md5: 52a45ce756c062994b25738288c8ab62
+ 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.7.0,<3.0a0
- libffi >=3.4,<4.0a0
- - libsqlite >=3.46.1,<4.0a0
+ - liblzma >=5.8.1,<6.0a0
+ - libsqlite >=3.50.0,<4.0a0
- libzlib >=1.3.1,<2.0a0
- - openssl >=3.3.2,<4.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
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- - xz >=5.2.6,<6.0a0
constrains:
- python_abi 3.10.* *_cp310
- arch: x86_64
- platform: win
license: Python-2.0
purls: []
- size: 15933377
- timestamp: 1729041771524
-- kind: conda
- name: python
- version: 3.13.0
- build: h9ebbce0_101_cp313
- build_number: 101
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/python-3.13.0-h9ebbce0_101_cp313.conda
- sha256: 66a7997b24b2dca636df11402abec7bd2199ddf6971eb47a3ee6b1d27d4faee9
- md5: f4fea9d5bb3f2e61a39950a7ab70ee4e
+ 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:
- - __glibc >=2.17,<3.0.a0
+ - __osx >=11.0
- 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
+ - 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.0,<4.0a0
- - libuuid >=2.38.1,<3.0a0
+ - libsqlite >=3.50.4,<4.0a0
- libzlib >=1.3.1,<2.0a0
- ncurses >=6.5,<7.0a0
- - openssl >=3.4.0,<4.0a0
- - python_abi 3.13.* *_cp313
+ - openssl >=3.5.2,<4.0a0
+ - python_abi 3.13.* *_cp313t
- readline >=8.2,<9.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- - xz >=5.2.6,<6.0a0
- arch: x86_64
- platform: linux
+ track_features:
+ - py_freethreading
license: Python-2.0
purls: []
- size: 33054218
- timestamp: 1732736838043
-- kind: conda
- name: python
- version: 3.13.0
- build: hbbac1ca_101_cp313
- build_number: 101
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/python-3.13.0-hbbac1ca_101_cp313.conda
- sha256: 742544a4cf9a10cf2c16d35d96fb696c27d58b9df0cc29fbef5629283aeca941
- md5: e972e146a1e0cfb1f26da42cb6f6648c
+ 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.6.4,<3.0a0
- - libffi >=3.4,<4.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.0,<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
- - xz >=5.2.6,<6.0a0
- arch: arm64
- platform: osx
license: Python-2.0
purls: []
- size: 12806496
- timestamp: 1732735488999
-- kind: conda
- name: python
- version: 3.13.0
- build: hf5aa216_101_cp313
- build_number: 101
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/python-3.13.0-hf5aa216_101_cp313.conda
- sha256: b8eba57bd86c7890b27e67b477b52b5bd547946c354f29b9dbbc70ad83f2863b
- md5: 158d6077a635cf0c0c23bec3955a4833
+ 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.6.4,<3.0a0
+ - libexpat >=2.7.0,<3.0a0
- libffi >=3.4,<4.0a0
- - libmpdec >=4.0.0,<5.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
- - python_abi 3.13.* *_cp313
+ - openssl >=3.5.0,<4.0a0
- tk >=8.6.13,<8.7.0a0
- tzdata
- ucrt >=10.0.20348.0
- vc >=14.2,<15
- vc14_runtime >=14.29.30139
- - xz >=5.2.6,<6.0a0
- arch: x86_64
- platform: win
+ constrains:
+ - python_abi 3.10.* *_cp310
+ license: Python-2.0
+ purls: []
+ 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.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.50.4,<4.0a0
+ - libzlib >=1.3.1,<2.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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Python-2.0
+ purls: []
+ 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
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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:
+ - cpython 3.13.7.*
+ - python_abi * *_cp313t
license: Python-2.0
purls: []
- size: 16697406
- timestamp: 1732734725404
-- kind: conda
- name: python_abi
- version: '3.10'
- build: 5_cp310
- build_number: 5
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda
- sha256: 074d2f0b31f0333b7e553042b17ea54714b74263f8adda9a68a4bd8c7e219971
- md5: 2921c34715e74b3587b4cff4d36844f9
+ 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
- arch: x86_64
- platform: linux
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 6227
- timestamp: 1723823165457
-- kind: conda
- name: python_abi
- version: '3.10'
- build: 5_cp310
- build_number: 5
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda
- sha256: 15a1e37da3e52c9250eac103858aad494ce23501d72fb78f5a2126046c9a9e2d
- md5: e33836c9096802b29d28981765becbee
+ 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.10.* *_cpython
- arch: arm64
- platform: osx
+ - python 3.13.* *_cp313
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 6324
- timestamp: 1723823147856
-- kind: conda
- name: python_abi
- version: '3.10'
- build: 5_cp310
- build_number: 5
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/python_abi-3.10-5_cp310.conda
- sha256: 0671bea4d5c5b8618ee7e2b1117d5a90901348ac459db57b654007f1644fa087
- md5: 3c510f4c4383f5fbdb12fdd971b30d49
+ 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:
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
+ license: BSD-3-Clause
+ license_family: BSD
+ 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:
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
+ license: BSD-3-Clause
+ license_family: BSD
+ 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:
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
+ license: BSD-3-Clause
+ license_family: BSD
+ 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
- arch: x86_64
- platform: win
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 6715
- timestamp: 1723823141288
-- kind: conda
- name: python_abi
- version: '3.13'
- build: 5_cp313
- build_number: 5
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda
- sha256: 438225b241c5f9bddae6f0178a97f5870a89ecf927dfca54753e689907331442
- md5: 381bbd2a92c863f640a55b6ff3c35161
+ 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
- arch: x86_64
- platform: linux
+ - pytorch-gpu <0.0a0
+ - pytorch-cpu 2.7.1
license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 6217
- timestamp: 1723823393322
-- kind: conda
- name: python_abi
- version: '3.13'
- build: 5_cp313
- build_number: 5
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda
- sha256: 4437198eae80310f40b23ae2f8a9e0a7e5c2b9ae411a8621eb03d87273666199
- md5: b8e82d0a5c1664638f87f63cc5d241fb
+ 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 >=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
+ - 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.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.13.* *_cp313
- arch: arm64
- platform: osx
+ - pytorch-gpu 2.7.1
+ - pytorch-cpu <0.0a0
license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 6322
- timestamp: 1723823058879
-- kind: conda
- name: python_abi
- version: '3.13'
- build: 5_cp313
- build_number: 5
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda
- sha256: 0c12cc1b84962444002c699ed21e815fb9f686f950d734332a1b74d07db97756
- md5: 44b4fe6f22b57103afb2299935c8b68e
+ purls:
+ - pkg:pypi/torch?source=hash-mapping
+ 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 >=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
+ - 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.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
- arch: x86_64
- platform: win
+ - pytorch-gpu 2.7.1
+ - pytorch-cpu <0.0a0
license: BSD-3-Clause
license_family: BSD
- purls: []
- size: 6716
- timestamp: 1723823166911
-- kind: conda
- name: pytz
- version: '2024.2'
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda
- sha256: 81c16d9183bb4a6780366ce874e567ee5fc903722f85b2f8d1d9479ef1dafcc9
- md5: 260009d03c9d5c0f111904d851f053dc
+ purls:
+ - pkg:pypi/torch?source=hash-mapping
+ 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: 186995
- timestamp: 1726055625738
-- kind: conda
- name: pyyaml
- version: 6.0.2
- build: py313h20a7fcf_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda
- sha256: f9fbafcf30cfab591c67f7550c0fd58e2bff394b53864dcdc658f5abd27ce5d6
- md5: bf2ddf70a9ce8f899b1082d17cbb3d1d
+ size: 189015
+ timestamp: 1742920947249
+- conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310h89163eb_2.conda
+ sha256: 5fba7f5babcac872c72f6509c25331bcfac4f8f5031f0102530a41b41336fce6
+ md5: fd343408e64cf1e273ab7c710da374db
depends:
- - __osx >=11.0
- - python >=3.13.0rc1,<3.14.0a0
- - python >=3.13.0rc1,<3.14.0a0 *_cp313
- - python_abi 3.13.* *_cp313
+ - __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
- arch: arm64
- platform: osx
license: MIT
license_family: MIT
purls:
- pkg:pypi/pyyaml?source=hash-mapping
- size: 187550
- timestamp: 1725456463634
-- kind: conda
- name: pyyaml
- version: 6.0.2
- build: py313h536fd9c_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda
- sha256: 86ae34bf2bab82c0fff2e31a37318c8977297776436df780a83c6efa5f84749d
- md5: 3789f360de131c345e96fbfc955ca80b
+ 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.0rc1,<3.14.0a0
+ - 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
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 168613
+ timestamp: 1737454886846
+- conda: https://prefix.dev/conda-forge/osx-64/pyyaml-6.0.2-py313h717bdf5_2.conda
+ sha256: 27501e9b3b5c6bfabb3068189fd40c650356a258e4a82b0cfe31c60f568dcb85
+ md5: b7f2984724531d2233b77c89c54be594
+ depends:
+ - __osx >=10.13
+ - python >=3.13,<3.14.0a0
- python_abi 3.13.* *_cp313
- yaml >=0.2.5,<0.3.0a0
- arch: x86_64
- platform: linux
license: MIT
license_family: MIT
purls:
- pkg:pypi/pyyaml?source=hash-mapping
- size: 205855
- timestamp: 1725456273924
-- kind: conda
- name: pyyaml
- version: 6.0.2
- build: py313ha7868ed_1
- build_number: 1
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda
- sha256: ffa21c4715aa139d20c96ae7274fbb7de12a546f3332eb8d07cc794741fcbde6
- md5: c1743e5c4c7402a14b515cf276778e59
- depends:
- - python >=3.13.0rc1,<3.14.0a0
+ 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
+ - python >=3.10,<3.11.0a0 *_cpython
+ - python_abi 3.10.* *_cp310
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ 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,<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: 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
- ucrt >=10.0.20348.0
- vc >=14.2,<15
- vc14_runtime >=14.29.30139
- yaml >=0.2.5,<0.3.0a0
- arch: x86_64
- platform: win
license: MIT
license_family: MIT
purls:
- pkg:pypi/pyyaml?source=hash-mapping
- size: 181722
- timestamp: 1725456802746
-- kind: conda
- name: readline
- version: '8.2'
- build: h8228510_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda
- sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7
- md5: 47d31b792659ce70f470b5c82fdfb7a4
+ size: 157941
+ timestamp: 1737455030235
+- conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313hb4c8b1a_2.conda
+ sha256: 5b496c96e48f495de41525cb1b603d0147f2079f88a8cf061aaf9e17a2fe1992
+ md5: d14f685b5d204b023c641b188a8d0d7c
depends:
- - libgcc-ng >=12
- - ncurses >=6.3,<7.0a0
- arch: x86_64
- platform: linux
+ - 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
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ 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 2025.06.26 hba17884_0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 2025.06.26 hfc00f1c_0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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 2025.06.26 hd41c47c_0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 27423
+ timestamp: 1751053372858
+- conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda
+ sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c
+ md5: 283b96675859b20a825f8fa30f311446
+ depends:
+ - libgcc >=13
+ - ncurses >=6.5,<7.0a0
license: GPL-3.0-only
license_family: GPL
purls: []
- size: 281456
- timestamp: 1679532220005
-- kind: conda
- name: readline
- version: '8.2'
- build: h92ec313_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda
- sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884
- md5: 8cbb776a2f641b943d413b3e19df71f4
- depends:
- - ncurses >=6.3,<7.0a0
- arch: arm64
- platform: osx
+ 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: 250351
- timestamp: 1679532511311
-- kind: conda
- name: requests
- version: 2.32.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda
- sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc
- md5: 5ede4753180c7a550a443c430dc8ab52
+ 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.5,<7.0a0
+ license: GPL-3.0-only
+ license_family: GPL
+ purls: []
+ 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
- idna >=2.5,<4
- - python >=3.8
+ - python >=3.9
- urllib3 >=1.21.1,<3
constrains:
- chardet >=3.0.2,<6
license: Apache-2.0
license_family: APACHE
purls:
- - pkg:pypi/requests?source=hash-mapping
- size: 58810
- timestamp: 1717057174842
-- kind: conda
- name: setuptools
- version: 75.6.0
- build: pyhff2d567_1
- build_number: 1
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda
- sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111
- md5: fc80f7995e396cbaeabd23cf46c413dc
+ - 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
+ 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
+ - libcblas >=3.9.0,<4.0a0
+ - libgcc >=13
+ - libgfortran
+ - libgfortran5 >=13.3.0
+ - liblapack >=3.9.0,<4.0a0
+ - libstdcxx >=13
+ - numpy <2.5
+ - numpy >=1.19,<3
+ - numpy >=1.23.5
+ - python >=3.10,<3.11.0a0
+ - python_abi 3.10.* *_cp310
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/scipy?source=hash-mapping
+ size: 16417101
+ timestamp: 1739791865060
+- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda
+ sha256: 75c751b8594b810d9c3735641aed6d6c13706e97e5c2ae0cdb49fa7d2da915dd
+ md5: 270039a4640693aab11ee3c05385f149
+ depends:
+ - __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
+ - 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_abi 3.10.* *_cp310
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/scipy?source=hash-mapping
+ 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
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/scipy?source=hash-mapping
+ size: 13507343
+ timestamp: 1739792089317
+- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.16.1-py313h7d0615d_1.conda
+ sha256: 9d365a0ec5f3e710d13fb3497cc6549c0b3153b2fa1ac27476f32ada81c4deca
+ md5: cfa5f5e690bacf0b2aef1b0ba2c67391
+ depends:
+ - __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/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/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 >=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: 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 >=19
+ - llvm-openmp >=19.1.7
+ license: BSL-1.0
+ purls: []
+ 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.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSL-1.0
+ purls: []
+ size: 2294375
+ timestamp: 1756275262440
+- conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda
+ sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2
+ md5: 755cf22df8693aa0d1aec1c123fa5863
+ depends:
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/snowballstemmer?source=hash-mapping
+ size: 73009
+ timestamp: 1747749529809
+- conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_1.conda
+ sha256: d1e3e06b5cf26093047e63c8cc77b70d970411c5cbc0cb1fad461a8a8df599f7
+ md5: 0401a17ae845fa72c7210e206ec5647d
depends:
- python >=3.9
- license: MIT
- license_family: MIT
+ license: Apache-2.0
+ license_family: APACHE
purls:
- - pkg:pypi/setuptools?source=hash-mapping
- size: 774252
- timestamp: 1732632769210
-- kind: conda
- name: six
- version: 1.16.0
- build: pyh6c4a22f_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
- sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6
- md5: e5f25f8dbc060e9a8d912e432202afc2
+ - pkg:pypi/sortedcontainers?source=hash-mapping
+ size: 28657
+ timestamp: 1738440459037
+- conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.8-pyhd8ed1ab_0.conda
+ sha256: c978576cf9366ba576349b93be1cfd9311c00537622a2f9e14ba2b90c97cae9c
+ md5: 18c019ccf43769d211f2cf78e9ad46c2
depends:
- - python
+ - python >=3.10
license: MIT
license_family: MIT
purls:
- - pkg:pypi/six?source=hash-mapping
- size: 14259
- timestamp: 1620240338595
-- kind: conda
- name: snowballstemmer
- version: 2.2.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2
- sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228
- md5: 4d22a9315e78c6827f806065957d566e
+ - 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 >=2
+ - python >=3.10
+ - numpy >=1.17
+ - numba >=0.49
+ - python
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/snowballstemmer?source=hash-mapping
- size: 58824
- timestamp: 1637143137377
-- kind: conda
- name: soupsieve
- version: '2.5'
- build: pyhd8ed1ab_1
- build_number: 1
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda
- sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c
- md5: 3f144b2c34f8cb5a9abd9ed23a39c561
- depends:
- - python >=3.8
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/soupsieve?source=hash-mapping
- size: 36754
- timestamp: 1693929424267
-- kind: conda
- name: sphinx
- version: 8.1.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_0.conda
- sha256: e9e3eaa7277934ba20314ffb92c941c4ec12c0c440e608b7b495c5ce579af1f7
- md5: 05706dd5a145a9c91861495cd435409a
+ - 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
@@ -4741,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
@@ -4750,73 +12681,51 @@ 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: 1401233
- timestamp: 1728874101851
-- kind: pypi
- name: sphinx-autodoc-typehints
- version: 2.5.0
- url: https://files.pythonhosted.org/packages/fa/ae/322d05bec884977b89eced3af811c228652a9e25f9646ee6236890987214/sphinx_autodoc_typehints-2.5.0-py3-none-any.whl
- sha256: 53def4753239683835b19bfa8b68c021388bd48a096efcb02cdab508ece27363
- requires_dist:
- - sphinx>=8.0.2
- - furo>=2024.8.6 ; extra == 'docs'
- - nptyping>=2.5 ; extra == 'numpy'
- - covdefaults>=2.3 ; extra == 'testing'
- - coverage>=7.6.1 ; extra == 'testing'
- - defusedxml>=0.7.1 ; extra == 'testing'
- - diff-cover>=9.1.1 ; extra == 'testing'
- - pytest-cov>=5 ; extra == 'testing'
- - pytest>=8.3.2 ; extra == 'testing'
- - sphobjinv>=2.3.1.1 ; extra == 'testing'
- - typing-extensions>=4.12.2 ; extra == 'testing'
- requires_python: '>=3.10'
-- kind: conda
- name: sphinx-basic-ng
- version: 1.0.0b2
- build: pyhd8ed1ab_2
- build_number: 2
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinx-basic-ng-1.0.0b2-pyhd8ed1ab_2.conda
- sha256: 091293964075ed1905731d09ff2691e053cd9d5335d99501f05683da29de0ee7
- md5: 463d989a8f1506bcf51cc37d7beebdf1
+ 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.11
+ - sphinx >=8.2
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/sphinx-autodoc-typehints?source=hash-mapping
+ 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
-- kind: pypi
- name: sphinx-copybutton
- version: 0.5.2
- url: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl
- sha256: fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e
- requires_dist:
- - sphinx>=1.8
- - pre-commit==2.12.1 ; extra == 'code-style'
- - sphinx ; extra == 'rtd'
- - ipython ; extra == 'rtd'
- - myst-nb ; extra == 'rtd'
- - sphinx-book-theme ; extra == 'rtd'
- - sphinx-examples ; extra == 'rtd'
- requires_python: '>=3.7'
-- kind: conda
- name: sphinxcontrib-applehelp
- version: 2.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
- sha256: 8ac476358cf26098e3a360b2a9037bd809243f72934c103953e25f4fda4b9f31
- md5: 9075bd8c033f0257122300db914e49c9
+ size: 20495
+ timestamp: 1737748706101
+- conda: https://prefix.dev/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda
+ sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19
+ md5: bf22cb9c439572760316ce0748af3713
+ depends:
+ - python >=3.9
+ - sphinx >=1.8
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/sphinx-copybutton?source=hash-mapping
+ size: 17893
+ timestamp: 1734573117732
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda
+ sha256: d7433a344a9ad32a680b881c81b0034bc61618d12c39dd6e3309abeffa9577ba
+ md5: 16e3f039c0aa6446513e94ab18a8784b
depends:
- python >=3.9
- sphinx >=5
@@ -4824,17 +12733,11 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-applehelp?source=hash-mapping
- size: 29617
- timestamp: 1722244567894
-- kind: conda
- name: sphinxcontrib-devhelp
- version: 2.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
- sha256: 6790efe55f168816dfc9c14235054d5156e5150d28546c5baf2ff4973eff8f6b
- md5: b3bcc38c471ebb738854f52a36059b48
+ size: 29752
+ timestamp: 1733754216334
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda
+ sha256: 55d5076005d20b84b20bee7844e686b7e60eb9f683af04492e598a622b12d53d
+ md5: 910f28a05c178feba832f842155cbfff
depends:
- python >=3.9
- sphinx >=5
@@ -4842,17 +12745,11 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-devhelp?source=hash-mapping
- size: 24138
- timestamp: 1722245127289
-- kind: conda
- name: sphinxcontrib-htmlhelp
- version: 2.1.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
- sha256: 55e14b77ed786ab6ff752b8d75f8448536f385ed250f432bd408d2eff5ea4a9e
- md5: e25640d692c02e8acfff0372f547e940
+ size: 24536
+ timestamp: 1733754232002
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda
+ sha256: c1492c0262ccf16694bdcd3bb62aa4627878ea8782d5cd3876614ffeb62b3996
+ md5: e9fb3fe8a5b758b4aff187d434f94f03
depends:
- python >=3.9
- sphinx >=5
@@ -4860,34 +12757,22 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-htmlhelp?source=hash-mapping
- size: 32798
- timestamp: 1722248429933
-- kind: conda
- name: sphinxcontrib-jsmath
- version: 1.0.1
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
- sha256: d4337d83b8edba688547766fc80f1ac86d6ec86ceeeda93f376acc04079c5ce2
- md5: da1d979339e2714c30a8e806a33ec087
+ size: 32895
+ timestamp: 1733754385092
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda
+ sha256: 578bef5ec630e5b2b8810d898bbbf79b9ae66d49b7938bcc3efc364e679f2a62
+ md5: fa839b5ff59e192f411ccc7dae6588bb
depends:
- - python >=3.5
+ - python >=3.9
license: BSD-2-Clause
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-jsmath?source=hash-mapping
- size: 10431
- timestamp: 1691604844204
-- kind: conda
- name: sphinxcontrib-qthelp
- version: 2.0.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
- sha256: 7ae639b729844de2ec74dbaf1acccc14843868a82fa46cd2ceb735bc8266af5b
- md5: d6e5ea5fe00164ac6c2dcc5d76a42192
+ size: 10462
+ timestamp: 1733753857224
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda
+ sha256: c664fefae4acdb5fae973bdde25836faf451f41d04342b64a358f9a7753c92ca
+ md5: 00534ebcc0375929b45c3039b5ba7636
depends:
- python >=3.9
- sphinx >=5
@@ -4895,17 +12780,11 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-qthelp?source=hash-mapping
- size: 26794
- timestamp: 1722245959953
-- kind: conda
- name: sphinxcontrib-serializinghtml
- version: 1.1.10
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
- sha256: bf80e4c0ff97d5e8e5f6db0831ba60007e820a3a438e8f1afd868aa516d67d6f
- md5: e507335cb4ca9cff4c3d0fa9cdab255e
+ size: 26959
+ timestamp: 1733753505008
+- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
+ sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557
+ md5: 3bc61f7161d28137797e038263c04c54
depends:
- python >=3.9
- sphinx >=5
@@ -4913,711 +12792,589 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sphinxcontrib-serializinghtml?source=hash-mapping
- size: 28776
- timestamp: 1705118378942
-- kind: conda
- name: stack_data
- version: 0.6.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda
- sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec
- md5: e7df0fdd404616638df5ece6e69ba7af
+ size: 28669
+ timestamp: 1733750596111
+- conda: https://prefix.dev/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
+ sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41
+ md5: b1b505328da7a6b246787df4b5a49fbc
depends:
- asttokens
- executing
- pure_eval
- - python >=3.5
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/stack-data?source=hash-mapping
- size: 26205
- timestamp: 1669632203115
-- kind: conda
- name: tbb
- version: 2021.13.0
- build: hc790b64_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda
- sha256: 990dbe4fb42f14700c22bd434d8312607bf8d0bd9f922b054e51fda14c41994c
- md5: 28496a1e6af43c63927da4f80260348d
- depends:
- - libhwloc >=2.11.1,<2.11.2.0a0
+ size: 26988
+ timestamp: 1733569565672
+- conda: https://prefix.dev/conda-forge/noarch/sympy-1.14.0-pyh04b8f61_5.conda
+ sha256: 60f18c60f6518254f0d28e4892e94c851cdbd650f7bd49899a6169f76cf6796b
+ md5: d814547f1cbcb6f8397ca5686fee8175
+ depends:
+ - mpmath >=0.19
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/sympy?source=hash-mapping
+ 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: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - 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 >=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: 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.12.1,<2.12.2.0a0
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: APACHE
purls: []
- size: 151494
- timestamp: 1725532984828
-- kind: conda
- name: tk
- version: 8.6.13
- build: h5083fa2_1
- build_number: 1
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
- sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8
- md5: b50a57ba89c32b62428b71a875291c9b
- depends:
- - libzlib >=1.2.13,<2.0.0a0
- arch: arm64
- platform: osx
+ 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:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libzlib >=1.3.1,<2.0a0
license: TCL
license_family: BSD
purls: []
- size: 3145523
- timestamp: 1699202432999
-- kind: conda
- name: tk
- version: 8.6.13
- build: h5226925_1
- build_number: 1
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda
- sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1
- md5: fc048363eb8f03cd1737600a5d08aafe
+ size: 3285204
+ timestamp: 1748387766691
+- conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-hf689a15_2.conda
+ sha256: b24468006a96b71a5f4372205ea7ec4b399b0f2a543541e86f883de54cd623fc
+ md5: 9864891a6946c2fe037c02fca7392ab4
depends:
- - ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
license: TCL
license_family: BSD
purls: []
- size: 3503410
- timestamp: 1699202577803
-- kind: conda
- name: tk
- version: 8.6.13
- build: noxft_h4845f30_101
- build_number: 101
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
- sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e
- md5: d453b98d9c83e71da0741bb0ff4d76bc
+ size: 3259809
+ timestamp: 1748387843735
+- conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda
+ sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e
+ md5: 7362396c170252e7b7b0c8fb37fe9c78
depends:
- - libgcc-ng >=12
- - libzlib >=1.2.13,<2.0.0a0
- arch: x86_64
- platform: linux
+ - __osx >=11.0
+ - libzlib >=1.3.1,<2.0a0
license: TCL
license_family: BSD
purls: []
- size: 3318875
- timestamp: 1699202167581
-- kind: conda
- name: toml
- version: 0.10.2
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2
- sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1
- md5: f832c45a477c78bebd107098db465095
+ 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
+ - vc14_runtime >=14.29.30139
+ license: TCL
+ license_family: BSD
+ purls: []
+ size: 3466348
+ timestamp: 1748388121356
+- conda: https://prefix.dev/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda
+ sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938
+ md5: b0dd904de08b7db706167240bf37b164
depends:
- - python >=2.7
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/toml?source=hash-mapping
- size: 18433
- timestamp: 1604308660817
-- kind: conda
- name: tomli
- version: 2.1.0
- build: pyhff2d567_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/tomli-2.1.0-pyhff2d567_0.conda
- sha256: 354b8a64d4f3311179d85aefc529ca201a36afc1af090d0010c46be7b79f9a47
- md5: 3fa1089b4722df3a900135925f4519d9
+ size: 22132
+ timestamp: 1734091907682
+- 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: 18741
- timestamp: 1731426862834
-- kind: conda
- name: tomlkit
- version: 0.13.2
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda
- sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12
- md5: 0062a5f3347733f67b0f33ca48cc21dd
+ - 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.8
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/tomlkit?source=hash-mapping
- size: 37279
- timestamp: 1723631592742
-- kind: conda
- name: traitlets
- version: 5.14.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
- sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592
- md5: 3df84416a021220d8b5700c613af2dc5
+ size: 38777
+ timestamp: 1749127286558
+- conda: https://prefix.dev/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda
+ sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87
+ md5: 40d0ed782a8aaa16ef248e68c06c168d
depends:
- - python >=3.8
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/toolz?source=hash-mapping
+ size: 52475
+ timestamp: 1733736126261
+- conda: https://prefix.dev/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
+ sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959
+ md5: 019a7385be9af33791c989871317e1ed
+ depends:
+ - python >=3.9
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/traitlets?source=hash-mapping
- size: 110187
- timestamp: 1713535244513
-- kind: conda
- name: typing-extensions
- version: 4.12.2
- build: hd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
- sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73
- md5: 52d648bd608f5737b123f510bb5514b5
+ size: 110051
+ timestamp: 1733367480074
+- 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:
- - typing_extensions 4.12.2 pyha770c72_0
+ - 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.15.0 pyhcf101f3_0
license: PSF-2.0
license_family: PSF
purls: []
- size: 10097
- timestamp: 1717802659025
-- kind: conda
- name: typing_extensions
- version: 4.12.2
- build: pyha770c72_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
- sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb
- md5: ebe6952715e1d5eb567eeebf25250fa7
+ 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.8
+ - python >=3.10
+ - python
license: PSF-2.0
license_family: PSF
purls:
- - pkg:pypi/typing-extensions?source=hash-mapping
- size: 39888
- timestamp: 1717802653893
-- kind: conda
- name: tzdata
- version: 2024b
- build: hc8b5060_0
- subdir: noarch
- noarch: generic
- url: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
- md5: 8ac3367aafb1cc0a068483c580af8015
- license: LicenseRef-Public-Domain
- purls: []
- size: 122354
- timestamp: 1728047496079
-- kind: conda
- name: ucrt
- version: 10.0.22621.0
- build: h57928b3_1
- build_number: 1
- subdir: win-64
- url: 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
- arch: x86_64
- platform: win
- license: LicenseRef-MicrosoftWindowsSDK10
- purls: []
- size: 559710
- timestamp: 1728377334097
-- kind: conda
- name: ukkonen
- version: 1.0.1
- build: py313h1ec8472_5
- build_number: 5
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/ukkonen-1.0.1-py313h1ec8472_5.conda
- sha256: 4f57f2eccd5584421f1b4d8c96c167c1008cba660d7fab5bdec1de212a0e0ff0
- md5: 97337494471e4265a203327f9a194234
- 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
- arch: x86_64
- platform: win
+ - __glibc >=2.17
license: MIT
license_family: MIT
- purls:
- - pkg:pypi/ukkonen?source=hash-mapping
- size: 17210
- timestamp: 1725784604368
-- kind: conda
- name: ukkonen
- version: 1.0.1
- build: py313h33d0bda_5
- build_number: 5
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/ukkonen-1.0.1-py313h33d0bda_5.conda
- sha256: 4edcb6a933bb8c03099ab2136118d5e5c25285e3fd2b0ff0fa781916c53a1fb7
- md5: 5bcffe10a500755da4a71cc0fb62a420
+ purls: []
+ 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
- arch: x86_64
- platform: linux
+ - __osx >=10.13
+ constrains:
+ - __osx >=10.13
license: MIT
license_family: MIT
- purls:
- - pkg:pypi/ukkonen?source=hash-mapping
- size: 13916
- timestamp: 1725784177558
-- kind: conda
- name: ukkonen
- version: 1.0.1
- build: py313hf9c7212_5
- build_number: 5
- subdir: osx-arm64
- url: 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
- arch: arm64
- platform: osx
+ constrains:
+ - __osx >=11.0
license: MIT
license_family: MIT
- purls:
- - pkg:pypi/ukkonen?source=hash-mapping
- size: 13689
- timestamp: 1725784235751
-- kind: conda
- name: urllib3
- version: 2.2.3
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda
- sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5
- md5: 6b55867f385dd762ed99ea687af32a69
+ 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:
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: MIT
+ license_family: MIT
+ 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
- pysocks >=1.5.6,<2.0,!=1.5.7
- - python >=3.8
+ - python >=3.9
- zstandard >=0.18.0
license: MIT
license_family: MIT
purls:
- pkg:pypi/urllib3?source=hash-mapping
- size: 98076
- timestamp: 1726496531769
-- kind: conda
- name: vc
- version: '14.3'
- build: ha32ba9b_23
- build_number: 23
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda
- sha256: 986ddaf8feec2904eac9535a7ddb7acda1a1dfb9482088fdb8129f1595181663
- md5: 7c10ec3158d1eb4ddff7007c9101adb0
- depends:
- - vc14_runtime >=14.38.33135
- arch: x86_64
- platform: win
+ 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.44.35208
track_features:
- vc14
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 17479
- timestamp: 1731710827215
-- kind: conda
- name: vc14_runtime
- version: 14.42.34433
- build: he29a5d6_23
- build_number: 23
- subdir: win-64
- url: 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
- arch: x86_64
- platform: win
+ - vs2015_runtime 14.44.35208.* *_31
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
license_family: Proprietary
purls: []
- size: 754247
- timestamp: 1731710681163
-- kind: conda
- name: virtualenv
- version: 20.28.0
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/virtualenv-20.28.0-pyhd8ed1ab_0.conda
- sha256: 82776f74e90a296b79415361faa6b10f360755c1fb8e6d59ca68509e6fe7e115
- md5: 1d601bc1d28b5ce6d112b90f4b9b8ede
+ 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: 3350255
- timestamp: 1732609542072
-- kind: conda
- name: vs2015_runtime
- version: 14.42.34433
- build: hdffcdeb_23
- build_number: 23
- subdir: win-64
- url: 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
- arch: x86_64
- platform: win
+ - vc14_runtime >=14.44.35208
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 17572
- timestamp: 1731710685291
-- kind: conda
- name: wcwidth
- version: 0.2.13
- build: pyhd8ed1ab_0
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
- sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3
- md5: 68f0738df502a14213624b288c60c9ad
+ size: 18249
+ timestamp: 1753739241918
+- conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda
+ sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5
+ md5: b68980f2495d096e71c7fd9d7ccf63e6
depends:
- - python >=3.8
+ - python >=3.9
license: MIT
license_family: MIT
purls:
- pkg:pypi/wcwidth?source=hash-mapping
- size: 32709
- timestamp: 1704731373922
-- kind: conda
- name: win_inet_pton
- version: 1.1.0
- build: pyh7428d3b_7
- build_number: 7
- subdir: noarch
- noarch: python
- url: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda
- sha256: c5297692ab34aade5e21107abaf623d6f93847662e25f655320038d2bfa1a812
- md5: c998c13b2f998af57c3b88c7a47979e0
+ size: 32581
+ timestamp: 1733231433877
+- conda: https://prefix.dev/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
+ sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f
+ md5: 46e441ba871f524e2b067929da3051c2
depends:
- __win
- - python >=3.6
+ - python >=3.9
license: LicenseRef-Public-Domain
purls:
- pkg:pypi/win-inet-pton?source=hash-mapping
- size: 9602
- timestamp: 1727796413384
-- kind: conda
- name: xz
- version: 5.2.6
- build: h166bdaf_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2
- sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162
- md5: 2161070d867d1b1204ea749c8eec4ef0
- depends:
- - libgcc-ng >=12
- arch: x86_64
- platform: linux
- license: LGPL-2.1 and GPL-2.0
- purls: []
- size: 418368
- timestamp: 1660346797927
-- kind: conda
- name: xz
- version: 5.2.6
- build: h57fd34a_0
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
- sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec
- md5: 39c6b54e94014701dd157f4f576ed211
- arch: arm64
- platform: osx
- license: LGPL-2.1 and GPL-2.0
- purls: []
- size: 235693
- timestamp: 1660346961024
-- kind: conda
- name: xz
- version: 5.2.6
- build: h8d14728_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2
- sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0
- md5: 515d77642eaa3639413c6b1bc3f94219
+ size: 9555
+ timestamp: 1733130678956
+- conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda
+ sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad
+ md5: a77f85f77be52ff59391544bfe73390a
depends:
- - vc >=14.1,<15
- - vs2015_runtime >=14.16.27033
- arch: x86_64
- platform: win
- license: LGPL-2.1 and GPL-2.0
- purls: []
- size: 217804
- timestamp: 1660346976440
-- kind: conda
- name: yaml
- version: 0.2.5
- build: h3422bc3_2
- build_number: 2
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2
- sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7
- md5: 4bb3f014845110883a3c5ee811fd84b4
- arch: arm64
- platform: osx
- license: MIT
- license_family: MIT
- purls: []
- size: 88016
- timestamp: 1641347076660
-- kind: conda
- name: yaml
- version: 0.2.5
- build: h7f98852_2
- build_number: 2
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
- sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535
- md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae
+ - libgcc >=14
+ - __glibc >=2.17,<3.0.a0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 85189
+ timestamp: 1753484064210
+- conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda
+ sha256: a335161bfa57b64e6794c3c354e7d49449b28b8d8a7c4ed02bf04c3f009953f9
+ md5: a645bb90997d3fc2aea0adf6517059bd
depends:
- - libgcc-ng >=9.4.0
- arch: x86_64
- platform: linux
- license: MIT
- license_family: MIT
- purls: []
- size: 89141
- timestamp: 1641346969816
-- kind: conda
- name: yaml
- version: 0.2.5
- build: h8ffe710_2
- build_number: 2
- subdir: win-64
- url: 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
- arch: x86_64
- platform: win
- license: MIT
- license_family: MIT
- purls: []
- size: 63274
- timestamp: 1641347623319
-- kind: conda
- name: zlib
- version: 1.3.1
- build: h8359307_2
- build_number: 2
- subdir: osx-arm64
- url: https://prefix.dev/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda
- sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430
- md5: e3170d898ca6cb48f1bb567afb92f775
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ purls: []
+ 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
- - libzlib 1.3.1 h8359307_2
- arch: arm64
- platform: osx
- license: Zlib
- license_family: Other
+ license: MIT
+ license_family: MIT
purls: []
- size: 77606
- timestamp: 1727963209370
-- kind: conda
- name: zlib
- version: 1.3.1
- build: hb9d3cd8_2
- build_number: 2
- subdir: linux-64
- url: 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
- arch: x86_64
- platform: linux
- license: Zlib
- license_family: Other
+ size: 83386
+ timestamp: 1753484079473
+- conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda
+ sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309
+ md5: 433699cba6602098ae8957a323da2664
+ depends:
+ - 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: 92286
- timestamp: 1727963153079
-- kind: conda
- name: zstandard
- version: 0.23.0
- build: py313h574b89f_1
- build_number: 1
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda
- sha256: 1d2744ec0e91da267ce749e19142081472539cb140a7dad0646cd249246691fe
- md5: 8e017aca933f4dd25491151edd3e7820
+ 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: 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
- - python >=3.13.0rc1,<3.14.0a0
+ - libgcc >=14
+ - 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
- arch: x86_64
- platform: win
+ - 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: 325703
- timestamp: 1725305947138
-- kind: conda
- name: zstandard
- version: 0.23.0
- build: py313h80202fe_1
- build_number: 1
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda
- sha256: ea82f2b8964150a3aa7373b4697e48e64f2200fe68ae554ee85c641c692d1c97
- md5: c178558ff516cd507763ffee230c20b2
+ size: 428554
+ timestamp: 1756841112889
+- conda: https://prefix.dev/conda-forge/osx-64/zstandard-0.24.0-py313h4b03fa9_1.conda
+ sha256: f674b7fcf016a63018cbe35b1e489d9ee66ec75ce26a118a3451584f496fc923
+ md5: 5d19d0e2227af7e02e5475c76260ec18
depends:
- - __glibc >=2.17,<3.0.a0
+ - __osx >=10.13
- cffi >=1.11
- - libgcc >=13
- - python >=3.13.0rc1,<3.14.0a0
+ - 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
- arch: x86_64
- platform: linux
+ - 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
-- kind: conda
- name: zstandard
- version: 0.23.0
- build: py313hf2da073_1
- build_number: 1
- subdir: osx-arm64
- url: 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
- arch: arm64
- platform: osx
+ - 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
-- kind: conda
- name: zstd
- version: 1.5.6
- build: h0ea2cb4_0
- subdir: win-64
- url: https://prefix.dev/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda
- sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3
- md5: 9a17230f95733c04dc40a2b1e5491d74
- depends:
- - libzlib >=1.2.13,<2.0.0a0
+ 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.13,<3.14.0a0
+ - python_abi 3.13.* *_cp313
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
- arch: x86_64
- platform: win
+ - 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: 351525
+ timestamp: 1756841550515
+- conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda
+ sha256: a4166e3d8ff4e35932510aaff7aa90772f84b4d07e9f6f83c614cba7ceefe0eb
+ md5: 6432cb5d4ac0046c3ac0a8a0f95842f9
+ depends:
+ - __glibc >=2.17,<3.0.a0
+ - libgcc >=13
+ - libstdcxx >=13
+ - libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 349143
- timestamp: 1714723445995
-- kind: conda
- name: zstd
- version: 1.5.6
- build: ha6fb4c9_0
- subdir: linux-64
- url: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
- sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b
- md5: 4d056880988120e29d75bfff282e0f45
+ 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
- arch: x86_64
- platform: linux
+ - __osx >=10.13
+ - libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 554846
- timestamp: 1714722996770
-- kind: conda
- name: zstd
- version: 1.5.6
- build: hb46c0d2_0
- subdir: osx-arm64
- url: 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
- arch: arm64
- platform: osx
+ - libzlib >=1.3.1,<2.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ 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.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: 405089
- timestamp: 1714723101397
+ size: 354697
+ timestamp: 1742433568506
diff --git a/pyproject.toml b/pyproject.toml
index abe1a87d..45de5968 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,116 +5,136 @@ build-backend = "hatchling.build"
[project]
name = "array-api-extra"
authors = [
- { name = "Lucas Colley", email = "lucas.colley8@gmail.com" },
- { name = "Open Source Contributors" },
+ { 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 = ["typing-extensions"]
-
-[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"
-Discussions = "https://github.com/data-apis/array-api-extra/discussions"
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.15,<3.14"
-typing_extensions = ">=4.12.2,<4.13"
+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 = "*"
+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.35.7,<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 = { cmd = "pre-commit install" }
-pre-commit = { cmd = "pre-commit run -v --all-files --show-diff-on-failure" }
-mypy = { cmd = "mypy", cwd = "." }
-pylint = { cmd = ["pylint", "array_api_extra"], cwd = "src" }
-pyright = { cmd = "basedpyright", cwd = "." }
-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 = { cmd = "pytest" }
-tests-ci = { cmd = "pytest -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" }
-[tool.pixi.feature.docs.dependencies]
-sphinx = ">=7.0"
-furo = ">=2023.08.17"
+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"], 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.pypi-dependencies]
-myst_parser = ">=0.13"
-sphinx_copybutton = "*"
-sphinx_autodoc_typehints = "*"
+[tool.pixi.feature.docs.dependencies]
+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" }
+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"
@@ -122,15 +142,95 @@ python = "~=3.10.0"
[tool.pixi.feature.py313.dependencies]
python = "~=3.13.0"
-[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"]
+[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]
+# 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]
+jax = ">=0.6.0"
+
+[tool.pixi.feature.backends.target.win-64.dependencies]
+# 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" }
+
+[tool.pixi.feature.cuda-backends.target.linux-64.dependencies]
+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 = "*" # unavailable
+# jaxlib = { version = "*", build = "cuda12*" } # unavailable
+# pytorch = { version = "*", build = "cuda12*" } # unavailable
+
+[tool.pixi.feature.cuda-backends.target.win-64.dependencies]
+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 = { 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
@@ -138,24 +238,18 @@ ci-py313 = ["py313", "tests"]
minversion = "6.0"
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
xfail_strict = true
-filterwarnings = [
- "error",
-]
+filterwarnings = ["error"]
log_cli_level = "INFO"
-testpaths = [
- "tests",
+testpaths = ["tests"]
+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:',
-]
-
# mypy
@@ -164,18 +258,17 @@ files = ["src", "tests"]
python_version = "3.10"
warn_unused_configs = true
strict = true
-enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
-warn_unreachable = true
-disallow_untyped_defs = false
-disallow_incomplete_defs = false
-# data-apis/array-api#589
-disallow_any_expr = false
+enable_error_code = ["ignore-without-code", "truthy-bool"]
+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
@@ -185,65 +278,99 @@ 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; 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, reportUnknownArgumentType = false },
+ { root = "src" },
+]
# Ruff
[tool.ruff]
-target-version = "py39"
+target-version = "py310"
[tool.ruff.lint]
extend-select = [
- "B", # flake8-bugbear
- "I", # isort
- "ARG", # flake8-unused-arguments
- "C4", # flake8-comprehensions
- "EM", # flake8-errmsg
- "ICN", # flake8-import-conventions
- "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
+ "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
+ "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
]
-isort.required-imports = ["from __future__ import annotations"]
-
-[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",
- "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", # 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_*',
]
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 46b1388f..0b4bd5e2 100644
--- a/src/array_api_extra/__init__.py
+++ b/src/array_api_extra/__init__.py
@@ -1,17 +1,42 @@
-from __future__ import annotations
+"""Extra array functions built on top of the array API standard."""
-from ._funcs import atleast_nd, cov, create_diagonal, expand_dims, kron, setdiff1d, sinc
+from ._delegation import isclose, nan_to_num, one_hot, pad
+from ._lib._at import at
+from ._lib._funcs import (
+ 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.2.1.dev0"
+__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
new file mode 100644
index 00000000..2c061e36
--- /dev/null
+++ b/src/array_api_extra/_delegation.py
@@ -0,0 +1,328 @@
+"""Delegation to existing implementations for Public API Functions."""
+
+from collections.abc import Sequence
+from types import ModuleType
+from typing import Literal
+
+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__ = ["isclose", "nan_to_num", "one_hot", "pad"]
+
+
+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:
+ """
+ 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
+ ----------
+ 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
+ -------
+ 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.
+ """
+ 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] | Sequence[tuple[int, int]],
+ mode: Literal["constant"] = "constant",
+ *,
+ constant_values: complex = 0,
+ xp: ModuleType | None = None,
+) -> Array:
+ """
+ Pad the input array.
+
+ Parameters
+ ----------
+ x : array
+ Input array.
+ 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 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.
+ mode : str, optional
+ Only "constant" mode is currently supported, which pads with
+ the value passed to `constant_values`.
+ constant_values : python scalar, optional
+ Use this value to pad the input. Default is zero.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `x`. Default: infer.
+
+ Returns
+ -------
+ array
+ The input array,
+ padded with ``pad_width`` elements equal to ``constant_values``.
+ """
+ xp = array_namespace(x) if xp is None else xp
+
+ if mode != "constant":
+ 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 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]
+
+ return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp)
diff --git a/src/array_api_extra/_funcs.py b/src/array_api_extra/_funcs.py
deleted file mode 100644
index 4062c56f..00000000
--- a/src/array_api_extra/_funcs.py
+++ /dev/null
@@ -1,541 +0,0 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
-import warnings
-
-if typing.TYPE_CHECKING:
- from ._lib._typing import Array, ModuleType
-
-from ._lib import _utils
-
-__all__ = [
- "atleast_nd",
- "cov",
- "create_diagonal",
- "expand_dims",
- "kron",
- "setdiff1d",
- "sinc",
-]
-
-
-def atleast_nd(x: Array, /, *, ndim: int, xp: ModuleType) -> Array:
- """
- Recursively expand the dimension of an array to at least `ndim`.
-
- Parameters
- ----------
- x : array
- ndim : int
- The minimum number of dimensions for the result.
- xp : array_namespace
- The standard-compatible namespace for `x`.
-
- Returns
- -------
- res : array
- An array with ``res.ndim`` >= `ndim`.
- If ``x.ndim`` >= `ndim`, `x` is returned.
- If ``x.ndim`` < `ndim`, `x` is expanded by prepending new axes
- until ``res.ndim`` equals `ndim`.
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
- >>> x = xp.asarray([1])
- >>> xpx.atleast_nd(x, ndim=3, xp=xp)
- Array([[[1]]], dtype=array_api_strict.int64)
-
- >>> x = xp.asarray([[[1, 2],
- ... [3, 4]]])
- >>> xpx.atleast_nd(x, ndim=1, xp=xp) is x
- True
-
- """
- if x.ndim < ndim:
- x = xp.expand_dims(x, axis=0)
- x = atleast_nd(x, ndim=ndim, xp=xp)
- return x
-
-
-def cov(m: Array, /, *, xp: ModuleType) -> Array:
- """
- Estimate a covariance matrix.
-
- Covariance indicates the level to which two variables vary together.
- If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,
- then the covariance matrix element :math:`C_{ij}` is the covariance of
- :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance
- of :math:`x_i`.
-
- This provides a subset of the functionality of ``numpy.cov``.
-
- Parameters
- ----------
- m : array
- A 1-D or 2-D array containing multiple variables and observations.
- Each row of `m` represents a variable, and each column a single
- observation of all those variables.
- xp : array_namespace
- The standard-compatible namespace for `m`.
-
- Returns
- -------
- res : array
- The covariance matrix of the variables.
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
-
- Consider two variables, :math:`x_0` and :math:`x_1`, which
- correlate perfectly, but in opposite directions:
-
- >>> x = xp.asarray([[0, 2], [1, 1], [2, 0]]).T
- >>> x
- Array([[0, 1, 2],
- [2, 1, 0]], dtype=array_api_strict.int64)
-
- Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance
- matrix shows this clearly:
-
- >>> xpx.cov(x, xp=xp)
- Array([[ 1., -1.],
- [-1., 1.]], dtype=array_api_strict.float64)
-
-
- Note that element :math:`C_{0,1}`, which shows the correlation between
- :math:`x_0` and :math:`x_1`, is negative.
-
- Further, note how `x` and `y` are combined:
-
- >>> x = xp.asarray([-2.1, -1, 4.3])
- >>> y = xp.asarray([3, 1.1, 0.12])
- >>> X = xp.stack((x, y), axis=0)
- >>> xpx.cov(X, xp=xp)
- Array([[11.71 , -4.286 ],
- [-4.286 , 2.14413333]], dtype=array_api_strict.float64)
-
- >>> xpx.cov(x, xp=xp)
- Array(11.71, dtype=array_api_strict.float64)
-
- >>> xpx.cov(y, xp=xp)
- Array(2.14413333, dtype=array_api_strict.float64)
-
- """
- m = xp.asarray(m, copy=True)
- dtype = (
- xp.float64 if xp.isdtype(m.dtype, "integral") else xp.result_type(m, xp.float64)
- )
-
- m = atleast_nd(m, ndim=2, xp=xp)
- m = xp.astype(m, dtype)
-
- avg = _mean(m, axis=1, xp=xp)
- fact = m.shape[1] - 1
-
- if fact <= 0:
- warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning, stacklevel=2)
- fact = 0.0
-
- m -= avg[:, None]
- m_transpose = m.T
- if xp.isdtype(m_transpose.dtype, "complex floating"):
- m_transpose = xp.conj(m_transpose)
- c = m @ m_transpose
- c /= fact
- axes = tuple(axis for axis, length in enumerate(c.shape) if length == 1)
- return xp.squeeze(c, axis=axes)
-
-
-def create_diagonal(x: Array, /, *, offset: int = 0, xp: ModuleType) -> Array:
- """
- Construct a diagonal array.
-
- Parameters
- ----------
- x : array
- A 1-D array
- offset : int, optional
- Offset from the leading diagonal (default is ``0``).
- Use positive ints for diagonals above the leading diagonal,
- and negative ints for diagonals below the leading diagonal.
- xp : array_namespace
- The standard-compatible namespace for `x`.
-
- Returns
- -------
- res : array
- A 2-D array with `x` on the diagonal (offset by `offset`).
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
- >>> x = xp.asarray([2, 4, 8])
-
- >>> xpx.create_diagonal(x, xp=xp)
- Array([[2, 0, 0],
- [0, 4, 0],
- [0, 0, 8]], dtype=array_api_strict.int64)
-
- >>> xpx.create_diagonal(x, offset=-2, xp=xp)
- Array([[0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0],
- [2, 0, 0, 0, 0],
- [0, 4, 0, 0, 0],
- [0, 0, 8, 0, 0]], dtype=array_api_strict.int64)
-
- """
- if x.ndim != 1:
- err_msg = "`x` must be 1-dimensional."
- raise ValueError(err_msg)
- n = x.shape[0] + abs(offset)
- diag = xp.zeros(n**2, dtype=x.dtype)
- i = offset if offset >= 0 else abs(offset) * n
- diag[i : min(n * (n - offset), diag.shape[0]) : n + 1] = x
- return xp.reshape(diag, (n, n))
-
-
-def _mean(
- x: Array,
- /,
- *,
- axis: int | tuple[int, ...] | None = None,
- keepdims: bool = False,
- xp: ModuleType,
-) -> Array:
- """
- Complex mean, https://github.com/data-apis/array-api/issues/846.
- """
- if xp.isdtype(x.dtype, "complex floating"):
- x_real = xp.real(x)
- x_imag = xp.imag(x)
- mean_real = xp.mean(x_real, axis=axis, keepdims=keepdims)
- 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 expand_dims(
- a: Array, /, *, axis: int | tuple[int, ...] = (0,), xp: ModuleType
-) -> Array:
- """
- Expand the shape of an array.
-
- Insert (a) new axis/axes that will appear at the position(s) specified by
- `axis` in the expanded array shape.
-
- This is ``xp.expand_dims`` for `axis` an int *or a tuple of ints*.
- Roughly equivalent to ``numpy.expand_dims`` for NumPy arrays.
-
- Parameters
- ----------
- a : array
- axis : int or tuple of ints, optional
- Position(s) in the expanded axes where the new axis (or axes) is/are placed.
- If multiple positions are provided, they should be unique (note that a position
- given by a positive index could also be referred to by a negative index -
- that will also result in an error).
- Default: ``(0,)``.
- xp : array_namespace
- The standard-compatible namespace for `a`.
-
- Returns
- -------
- res : array
- `a` with an expanded shape.
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
- >>> x = xp.asarray([1, 2])
- >>> x.shape
- (2,)
-
- The following is equivalent to ``x[xp.newaxis, :]`` or ``x[xp.newaxis]``:
-
- >>> y = xpx.expand_dims(x, axis=0, xp=xp)
- >>> y
- Array([[1, 2]], dtype=array_api_strict.int64)
- >>> y.shape
- (1, 2)
-
- The following is equivalent to ``x[:, xp.newaxis]``:
-
- >>> y = xpx.expand_dims(x, axis=1, xp=xp)
- >>> y
- Array([[1],
- [2]], dtype=array_api_strict.int64)
- >>> y.shape
- (2, 1)
-
- ``axis`` may also be a tuple:
-
- >>> y = xpx.expand_dims(x, axis=(0, 1), xp=xp)
- >>> y
- Array([[[1, 2]]], dtype=array_api_strict.int64)
-
- >>> y = xpx.expand_dims(x, axis=(2, 0), xp=xp)
- >>> y
- Array([[[1],
- [2]]], dtype=array_api_strict.int64)
-
- """
- if not isinstance(axis, tuple):
- axis = (axis,)
- ndim = a.ndim + len(axis)
- if axis != () and (min(axis) < -ndim or max(axis) >= ndim):
- err_msg = (
- f"a provided axis position is out of bounds for array of dimension {a.ndim}"
- )
- raise IndexError(err_msg)
- axis = tuple(dim % ndim for dim in axis)
- if len(set(axis)) != len(axis):
- err_msg = "Duplicate dimensions specified in `axis`."
- raise ValueError(err_msg)
- for i in sorted(axis):
- a = xp.expand_dims(a, axis=i)
- return a
-
-
-def kron(a: Array, b: Array, /, *, xp: ModuleType) -> Array:
- """
- Kronecker product of two arrays.
-
- Computes the Kronecker product, a composite array made of blocks of the
- second array scaled by the first.
-
- Equivalent to ``numpy.kron`` for NumPy arrays.
-
- Parameters
- ----------
- a, b : array
- xp : array_namespace
- The standard-compatible namespace for `a` and `b`.
-
- Returns
- -------
- res : array
- The Kronecker product of `a` and `b`.
-
- Notes
- -----
- The function assumes that the number of dimensions of `a` and `b`
- are the same, if necessary prepending the smallest with ones.
- If ``a.shape = (r0,r1,..,rN)`` and ``b.shape = (s0,s1,...,sN)``,
- the Kronecker product has shape ``(r0*s0, r1*s1, ..., rN*SN)``.
- The elements are products of elements from `a` and `b`, organized
- explicitly by::
-
- kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
-
- where::
-
- kt = it * st + jt, t = 0,...,N
-
- In the common 2-D case (N=1), the block structure can be visualized::
-
- [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
- [ ... ... ],
- [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
-
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
- >>> xpx.kron(xp.asarray([1, 10, 100]), xp.asarray([5, 6, 7]), xp=xp)
- Array([ 5, 6, 7, 50, 60, 70, 500,
- 600, 700], dtype=array_api_strict.int64)
-
- >>> xpx.kron(xp.asarray([5, 6, 7]), xp.asarray([1, 10, 100]), xp=xp)
- Array([ 5, 50, 500, 6, 60, 600, 7,
- 70, 700], dtype=array_api_strict.int64)
-
- >>> xpx.kron(xp.eye(2), xp.ones((2, 2)), xp=xp)
- Array([[1., 1., 0., 0.],
- [1., 1., 0., 0.],
- [0., 0., 1., 1.],
- [0., 0., 1., 1.]], dtype=array_api_strict.float64)
-
-
- >>> a = xp.reshape(xp.arange(100), (2, 5, 2, 5))
- >>> b = xp.reshape(xp.arange(24), (2, 3, 4))
- >>> c = xpx.kron(a, b, xp=xp)
- >>> c.shape
- (2, 10, 6, 20)
- >>> I = (1, 3, 0, 2)
- >>> J = (0, 2, 1)
- >>> J1 = (0,) + J # extend to ndim=4
- >>> S1 = (1,) + b.shape
- >>> K = tuple(xp.asarray(I) * xp.asarray(S1) + xp.asarray(J1))
- >>> c[K] == a[I]*b[J]
- Array(True, dtype=array_api_strict.bool)
-
- """
-
- b = xp.asarray(b)
- singletons = (1,) * (b.ndim - a.ndim)
- a = xp.broadcast_to(xp.asarray(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
-
- # Equalise the shapes by prepending smaller one with 1s
- a_shape = (1,) * max(0, nd_b - nd_a) + a_shape
- b_shape = (1,) * max(0, nd_a - nd_b) + b_shape
-
- # Insert empty dimensions
- a_arr = expand_dims(a, axis=tuple(range(nd_b - nd_a)), xp=xp)
- b_arr = expand_dims(b, axis=tuple(range(nd_a - nd_b)), xp=xp)
-
- # Compute the product
- a_arr = expand_dims(a_arr, axis=tuple(range(1, nd_max * 2, 2)), xp=xp)
- b_arr = expand_dims(b_arr, axis=tuple(range(0, nd_max * 2, 2)), xp=xp)
- result = xp.multiply(a_arr, b_arr)
-
- # Reshape back and return
- a_shape = xp.asarray(a_shape)
- b_shape = xp.asarray(b_shape)
- return xp.reshape(result, tuple(xp.multiply(a_shape, b_shape)))
-
-
-def setdiff1d(
- x1: Array, x2: Array, /, *, assume_unique: bool = False, xp: ModuleType
-) -> Array:
- """
- Find the set difference of two arrays.
-
- Return the unique values in `x1` that are not in `x2`.
-
- Parameters
- ----------
- x1 : array
- Input array.
- x2 : array
- Input comparison array.
- assume_unique : bool
- If ``True``, the input arrays are both assumed to be unique, which
- can speed up the calculation. Default is ``False``.
- xp : array_namespace
- The standard-compatible namespace for `x1` and `x2`.
-
- Returns
- -------
- res : array
- 1D array of values in `x1` that are not in `x2`. The result
- is sorted when `assume_unique` is ``False``, but otherwise only sorted
- if the input is sorted.
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
-
- >>> x1 = xp.asarray([1, 2, 3, 2, 4, 1])
- >>> x2 = xp.asarray([3, 4, 5, 6])
- >>> xpx.setdiff1d(x1, x2, xp=xp)
- Array([1, 2], dtype=array_api_strict.int64)
-
- """
-
- if assume_unique:
- x1 = xp.reshape(x1, (-1,))
- else:
- x1 = xp.unique_values(x1)
- x2 = xp.unique_values(x2)
- return x1[_utils.in1d(x1, x2, assume_unique=True, invert=True, xp=xp)]
-
-
-def sinc(x: Array, /, *, xp: ModuleType) -> Array:
- r"""
- Return the normalized sinc function.
-
- The sinc function is equal to :math:`\sin(\pi x)/(\pi x)` for any argument
- :math:`x\ne 0`. ``sinc(0)`` takes the limit value 1, making ``sinc`` not
- only everywhere continuous but also infinitely differentiable.
-
- .. note::
-
- Note the normalization factor of ``pi`` used in the definition.
- This is the most commonly used definition in signal processing.
- Use ``sinc(x / xp.pi)`` to obtain the unnormalized sinc function
- :math:`\sin(x)/x` that is more common in mathematics.
-
- Parameters
- ----------
- x : array
- Array (possibly multi-dimensional) of values for which to calculate
- ``sinc(x)``. Must have a real floating point dtype.
- xp : array_namespace
- The standard-compatible namespace for `x`.
-
- Returns
- -------
- res : array
- ``sinc(x)`` calculated elementwise, which has the same shape as the input.
-
- Notes
- -----
- The name sinc is short for "sine cardinal" or "sinus cardinalis".
-
- The sinc function is used in various signal processing applications,
- including in anti-aliasing, in the construction of a Lanczos resampling
- filter, and in interpolation.
-
- For bandlimited interpolation of discrete-time signals, the ideal
- interpolation kernel is proportional to the sinc function.
-
- References
- ----------
- #. Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web
- Resource. https://mathworld.wolfram.com/SincFunction.html
- #. Wikipedia, "Sinc function",
- https://en.wikipedia.org/wiki/Sinc_function
-
- Examples
- --------
- >>> import array_api_strict as xp
- >>> import array_api_extra as xpx
- >>> x = xp.linspace(-4, 4, 41)
- >>> xpx.sinc(x, xp=xp)
- Array([-3.89817183e-17, -4.92362781e-02,
- -8.40918587e-02, -8.90384387e-02,
- -5.84680802e-02, 3.89817183e-17,
- 6.68206631e-02, 1.16434881e-01,
- 1.26137788e-01, 8.50444803e-02,
- -3.89817183e-17, -1.03943254e-01,
- -1.89206682e-01, -2.16236208e-01,
- -1.55914881e-01, 3.89817183e-17,
- 2.33872321e-01, 5.04551152e-01,
- 7.56826729e-01, 9.35489284e-01,
- 1.00000000e+00, 9.35489284e-01,
- 7.56826729e-01, 5.04551152e-01,
- 2.33872321e-01, 3.89817183e-17,
- -1.55914881e-01, -2.16236208e-01,
- -1.89206682e-01, -1.03943254e-01,
- -3.89817183e-17, 8.50444803e-02,
- 1.26137788e-01, 1.16434881e-01,
- 6.68206631e-02, 3.89817183e-17,
- -5.84680802e-02, -8.90384387e-02,
- -8.40918587e-02, -4.92362781e-02,
- -3.89817183e-17], dtype=array_api_strict.float64)
-
- """
- if not xp.isdtype(x.dtype, "real floating"):
- err_msg = "`x` must have a real floating data type."
- raise ValueError(err_msg)
- # no scalars in `where` - array-api#807
- y = xp.pi * xp.where(
- x, x, xp.asarray(xp.finfo(x.dtype).smallest_normal, dtype=x.dtype)
- )
- return xp.sin(y) / y
diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py
new file mode 100644
index 00000000..d7b32033
--- /dev/null
+++ b/src/array_api_extra/_lib/__init__.py
@@ -0,0 +1 @@
+"""Internals of array-api-extra."""
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
new file mode 100644
index 00000000..936f5dd0
--- /dev/null
+++ b/src/array_api_extra/_lib/_backends.py
@@ -0,0 +1,72 @@
+"""Backends against which array-api-extra runs its tests."""
+
+from __future__ import annotations
+
+from enum import Enum
+from typing import Any
+
+import numpy as np
+import pytest
+
+__all__ = ["NUMPY_VERSION", "Backend"]
+
+NUMPY_VERSION = tuple(int(v) for v in np.__version__.split(".")[:3]) # pyright: ignore[reportUnknownArgumentType]
+
+
+class Backend(Enum): # numpydoc ignore=PR02
+ """
+ All array library backends explicitly tested by array-api-extra.
+
+ Parameters
+ ----------
+ value : str
+ Tag of the backend's module, in the format ``[:]``.
+ """
+
+ # 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/_compat.py b/src/array_api_extra/_lib/_compat.py
deleted file mode 100644
index b9577ff3..00000000
--- a/src/array_api_extra/_lib/_compat.py
+++ /dev/null
@@ -1,168 +0,0 @@
-### Helpers borrowed from array-api-compat
-
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import inspect
-import sys
-import typing
-
-from typing_extensions import override
-
-if typing.TYPE_CHECKING:
- from ._typing import Array, Device
-
-__all__ = ["device"]
-
-
-# Placeholder object to represent the dask device
-# when the array backend is not the CPU.
-# (since it is not easy to tell which device a dask array is on)
-class _dask_device: # pylint: disable=invalid-name
- @override
- def __repr__(self) -> str:
- return "DASK_DEVICE"
-
-
-_DASK_DEVICE = _dask_device()
-
-
-# device() is not on numpy.ndarray or dask.array and to_device() is not on numpy.ndarray
-# or cupy.ndarray. They are not included in array objects of this library
-# because this library just reuses the respective ndarray classes without
-# wrapping or subclassing them. These helper functions can be used instead of
-# the wrapper functions for libraries that need to support both NumPy/CuPy and
-# other libraries that use devices.
-def device(x: Array, /) -> Device:
- """
- Hardware device the array data resides on.
-
- This is equivalent to `x.device` according to the `standard
- `__.
- This helper is included because some array libraries either do not have
- the `device` attribute or include it with an incompatible API.
-
- Parameters
- ----------
- x: array
- array instance from an array API compatible library.
-
- Returns
- -------
- out: device
- a ``device`` object (see the `Device Support `__
- section of the array API specification).
-
- Notes
- -----
-
- For NumPy the device is always `"cpu"`. For Dask, the device is always a
- special `DASK_DEVICE` object.
-
- See Also
- --------
-
- to_device : Move array data to a different device.
-
- """
- if _is_numpy_array(x):
- return "cpu"
- if _is_dask_array(x):
- # Peek at the metadata of the jax array to determine type
- try:
- import numpy as np # pylint: disable=import-outside-toplevel
-
- if isinstance(x._meta, np.ndarray): # pylint: disable=protected-access
- # Must be on CPU since backed by numpy
- return "cpu"
- except ImportError:
- pass
- return _DASK_DEVICE
- if _is_jax_array(x):
- # JAX has .device() as a method, but it is being deprecated so that it
- # can become a property, in accordance with the standard. In order for
- # this function to not break when JAX makes the flip, we check for
- # both here.
- if inspect.ismethod(x.device):
- return x.device()
- return x.device
- if _is_pydata_sparse_array(x):
- # `sparse` will gain `.device`, so check for this first.
- x_device = getattr(x, "device", None)
- if x_device is not None:
- return x_device
- # Everything but DOK has this attr.
- try:
- inner = x.data
- except AttributeError:
- return "cpu"
- # Return the device of the constituent array
- return device(inner)
- return x.device
-
-
-def _is_numpy_array(x: Array) -> bool:
- """Return True if `x` is a NumPy array."""
- # Avoid importing NumPy if it isn't already
- if "numpy" not in sys.modules:
- return False
-
- import numpy as np # pylint: disable=import-outside-toplevel
-
- # TODO: Should we reject ndarray subclasses?
- return isinstance(x, (np.ndarray, np.generic)) and not _is_jax_zero_gradient_array(
- x
- )
-
-
-def _is_dask_array(x: Array) -> bool:
- """Return True if `x` is a dask.array Array."""
- # Avoid importing dask if it isn't already
- if "dask.array" not in sys.modules:
- return False
-
- # pylint: disable=import-error, import-outside-toplevel
- import dask.array # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
-
- return isinstance(x, dask.array.Array)
-
-
-def _is_jax_zero_gradient_array(x: Array) -> bool:
- """Return True if `x` is a zero-gradient array.
-
- These arrays are a design quirk of Jax that may one day be removed.
- See https://github.com/google/jax/issues/20620.
- """
- if "numpy" not in sys.modules or "jax" not in sys.modules:
- return False
-
- # pylint: disable=import-error, import-outside-toplevel
- import jax # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
- import numpy as np # pylint: disable=import-outside-toplevel
-
- return isinstance(x, np.ndarray) and x.dtype == jax.float0 # pyright: ignore[reportUnknownVariableType]
-
-
-def _is_jax_array(x: Array) -> bool:
- """Return True if `x` is a JAX array."""
- # Avoid importing jax if it isn't already
- if "jax" not in sys.modules:
- return False
-
- # pylint: disable=import-error, import-outside-toplevel
- import jax # pyright: ignore[reportMissingImports]
-
- return isinstance(x, jax.Array) or _is_jax_zero_gradient_array(x)
-
-
-def _is_pydata_sparse_array(x: Array) -> bool:
- """Return True if `x` is an array from the `sparse` package."""
-
- # Avoid importing jax if it isn't already
- if "sparse" not in sys.modules:
- return False
-
- # pylint: disable=import-error, import-outside-toplevel
- import sparse # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
-
- # TODO: Account for other backends.
- return isinstance(x, sparse.SparseArray)
diff --git a/src/array_api_extra/_lib/_funcs.py b/src/array_api_extra/_lib/_funcs.py
new file mode 100644
index 00000000..cbcbe0ff
--- /dev/null
+++ b/src/array_api_extra/_lib/_funcs.py
@@ -0,0 +1,1031 @@
+"""Array-agnostic implementations for the public API."""
+
+import math
+import warnings
+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_dask_namespace, is_jax_array
+from ._utils._helpers import (
+ asarrays,
+ capabilities,
+ eager_shape,
+ meta_namespace,
+ ndindex,
+)
+from ._utils._typing import Array, Device, DType
+
+__all__ = [
+ "apply_where",
+ "atleast_nd",
+ "broadcast_shapes",
+ "cov",
+ "create_diagonal",
+ "expand_dims",
+ "kron",
+ "nunique",
+ "pad",
+ "setdiff1d",
+ "sinc",
+]
+
+
+@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`.
+
+ Parameters
+ ----------
+ x : array
+ Input array.
+ ndim : int
+ The minimum number of dimensions for the result.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `x`. Default: infer.
+
+ Returns
+ -------
+ array
+ An array with ``res.ndim`` >= `ndim`.
+ If ``x.ndim`` >= `ndim`, `x` is returned.
+ If ``x.ndim`` < `ndim`, `x` is expanded by prepending new axes
+ until ``res.ndim`` equals `ndim`.
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+ >>> x = xp.asarray([1])
+ >>> xpx.atleast_nd(x, ndim=3, xp=xp)
+ Array([[[1]]], dtype=array_api_strict.int64)
+
+ >>> x = xp.asarray([[[1, 2],
+ ... [3, 4]]])
+ >>> xpx.atleast_nd(x, ndim=1, xp=xp) is x
+ True
+ """
+ if xp is None:
+ xp = array_namespace(x)
+
+ if x.ndim < ndim:
+ x = xp.expand_dims(x, axis=0)
+ x = atleast_nd(x, ndim=ndim, xp=xp)
+ 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.
+
+ Covariance indicates the level to which two variables vary together.
+ If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,
+ then the covariance matrix element :math:`C_{ij}` is the covariance of
+ :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance
+ of :math:`x_i`.
+
+ This provides a subset of the functionality of ``numpy.cov``.
+
+ Parameters
+ ----------
+ m : array
+ A 1-D or 2-D array containing multiple variables and observations.
+ Each row of `m` represents a variable, and each column a single
+ observation of all those variables.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `m`. Default: infer.
+
+ Returns
+ -------
+ array
+ The covariance matrix of the variables.
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+
+ Consider two variables, :math:`x_0` and :math:`x_1`, which
+ correlate perfectly, but in opposite directions:
+
+ >>> x = xp.asarray([[0, 2], [1, 1], [2, 0]]).T
+ >>> x
+ Array([[0, 1, 2],
+ [2, 1, 0]], dtype=array_api_strict.int64)
+
+ Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance
+ matrix shows this clearly:
+
+ >>> xpx.cov(x, xp=xp)
+ Array([[ 1., -1.],
+ [-1., 1.]], dtype=array_api_strict.float64)
+
+ Note that element :math:`C_{0,1}`, which shows the correlation between
+ :math:`x_0` and :math:`x_1`, is negative.
+
+ Further, note how `x` and `y` are combined:
+
+ >>> x = xp.asarray([-2.1, -1, 4.3])
+ >>> y = xp.asarray([3, 1.1, 0.12])
+ >>> X = xp.stack((x, y), axis=0)
+ >>> xpx.cov(X, xp=xp)
+ Array([[11.71 , -4.286 ],
+ [-4.286 , 2.14413333]], dtype=array_api_strict.float64)
+
+ >>> xpx.cov(x, xp=xp)
+ Array(11.71, dtype=array_api_strict.float64)
+
+ >>> xpx.cov(y, xp=xp)
+ Array(2.14413333, dtype=array_api_strict.float64)
+ """
+ if xp is None:
+ xp = array_namespace(m)
+
+ m = xp.asarray(m, copy=True)
+ dtype = (
+ xp.float64 if xp.isdtype(m.dtype, "integral") else xp.result_type(m, xp.float64)
+ )
+
+ m = atleast_nd(m, ndim=2, xp=xp)
+ m = xp.astype(m, dtype)
+
+ avg = _helpers.mean(m, axis=1, xp=xp)
+
+ 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
+
+ m -= avg[:, None]
+ m_transpose = m.T
+ if xp.isdtype(m_transpose.dtype, "complex floating"):
+ m_transpose = xp.conj(m_transpose)
+ c = m @ m_transpose
+ c /= fact
+ axes = tuple(axis for axis, length in enumerate(c.shape) if length == 1)
+ 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:
+ """
+ Construct a diagonal array.
+
+ Parameters
+ ----------
+ x : 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,
+ and negative ints for diagonals below the leading diagonal.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `x`. Default: infer.
+
+ Returns
+ -------
+ array
+ An array having shape ``(*batch_dims, k+abs(offset), k+abs(offset))`` with `x`
+ on the diagonal (offset by `offset`).
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+ >>> x = xp.asarray([2, 4, 8])
+
+ >>> xpx.create_diagonal(x, xp=xp)
+ Array([[2, 0, 0],
+ [0, 4, 0],
+ [0, 0, 8]], dtype=array_api_strict.int64)
+
+ >>> xpx.create_diagonal(x, offset=-2, xp=xp)
+ Array([[0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0],
+ [2, 0, 0, 0, 0],
+ [0, 4, 0, 0, 0],
+ [0, 0, 8, 0, 0]], dtype=array_api_strict.int64)
+ """
+ if xp is None:
+ xp = array_namespace(x)
+
+ if x.ndim == 0:
+ err_msg = "`x` must be at least 1-dimensional."
+ raise ValueError(err_msg)
+
+ 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.
+
+ 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(
+ a: Array, /, *, axis: int | tuple[int, ...] = (0,), xp: ModuleType | None = None
+) -> Array:
+ """
+ Expand the shape of an array.
+
+ Insert (a) new axis/axes that will appear at the position(s) specified by
+ `axis` in the expanded array shape.
+
+ This is ``xp.expand_dims`` for `axis` an int *or a tuple of ints*.
+ Roughly equivalent to ``numpy.expand_dims`` for NumPy arrays.
+
+ Parameters
+ ----------
+ a : array
+ Array to have its shape expanded.
+ axis : int or tuple of ints, optional
+ Position(s) in the expanded axes where the new axis (or axes) is/are placed.
+ If multiple positions are provided, they should be unique (note that a position
+ given by a positive index could also be referred to by a negative index -
+ that will also result in an error).
+ Default: ``(0,)``.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `a`. Default: infer.
+
+ Returns
+ -------
+ array
+ `a` with an expanded shape.
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+ >>> x = xp.asarray([1, 2])
+ >>> x.shape
+ (2,)
+
+ The following is equivalent to ``x[xp.newaxis, :]`` or ``x[xp.newaxis]``:
+
+ >>> y = xpx.expand_dims(x, axis=0, xp=xp)
+ >>> y
+ Array([[1, 2]], dtype=array_api_strict.int64)
+ >>> y.shape
+ (1, 2)
+
+ The following is equivalent to ``x[:, xp.newaxis]``:
+
+ >>> y = xpx.expand_dims(x, axis=1, xp=xp)
+ >>> y
+ Array([[1],
+ [2]], dtype=array_api_strict.int64)
+ >>> y.shape
+ (2, 1)
+
+ ``axis`` may also be a tuple:
+
+ >>> y = xpx.expand_dims(x, axis=(0, 1), xp=xp)
+ >>> y
+ Array([[[1, 2]]], dtype=array_api_strict.int64)
+
+ >>> y = xpx.expand_dims(x, axis=(2, 0), xp=xp)
+ >>> y
+ Array([[[1],
+ [2]]], dtype=array_api_strict.int64)
+ """
+ if xp is None:
+ xp = array_namespace(a)
+
+ if not isinstance(axis, tuple):
+ axis = (axis,)
+ ndim = a.ndim + len(axis)
+ if axis != () and (min(axis) < -ndim or max(axis) >= ndim):
+ err_msg = (
+ f"a provided axis position is out of bounds for array of dimension {a.ndim}"
+ )
+ raise IndexError(err_msg)
+ axis = tuple(dim % ndim for dim in axis)
+ if len(set(axis)) != len(axis):
+ err_msg = "Duplicate dimensions specified in `axis`."
+ raise ValueError(err_msg)
+ for i in sorted(axis):
+ a = xp.expand_dims(a, axis=i)
+ return a
+
+
+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.
+
+ Computes the Kronecker product, a composite array made of blocks of the
+ second array scaled by the first.
+
+ Equivalent to ``numpy.kron`` for NumPy arrays.
+
+ Parameters
+ ----------
+ 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.
+
+ Returns
+ -------
+ array
+ The Kronecker product of `a` and `b`.
+
+ Notes
+ -----
+ The function assumes that the number of dimensions of `a` and `b`
+ are the same, if necessary prepending the smallest with ones.
+ If ``a.shape = (r0,r1,..,rN)`` and ``b.shape = (s0,s1,...,sN)``,
+ the Kronecker product has shape ``(r0*s0, r1*s1, ..., rN*SN)``.
+ The elements are products of elements from `a` and `b`, organized
+ explicitly by::
+
+ kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
+
+ where::
+
+ kt = it * st + jt, t = 0,...,N
+
+ In the common 2-D case (N=1), the block structure can be visualized::
+
+ [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
+ [ ... ... ],
+ [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+ >>> xpx.kron(xp.asarray([1, 10, 100]), xp.asarray([5, 6, 7]), xp=xp)
+ Array([ 5, 6, 7, 50, 60, 70, 500,
+ 600, 700], dtype=array_api_strict.int64)
+
+ >>> xpx.kron(xp.asarray([5, 6, 7]), xp.asarray([1, 10, 100]), xp=xp)
+ Array([ 5, 50, 500, 6, 60, 600, 7,
+ 70, 700], dtype=array_api_strict.int64)
+
+ >>> xpx.kron(xp.eye(2), xp.ones((2, 2)), xp=xp)
+ Array([[1., 1., 0., 0.],
+ [1., 1., 0., 0.],
+ [0., 0., 1., 1.],
+ [0., 0., 1., 1.]], dtype=array_api_strict.float64)
+
+ >>> a = xp.reshape(xp.arange(100), (2, 5, 2, 5))
+ >>> b = xp.reshape(xp.arange(24), (2, 3, 4))
+ >>> c = xpx.kron(a, b, xp=xp)
+ >>> c.shape
+ (2, 10, 6, 20)
+ >>> I = (1, 3, 0, 2)
+ >>> J = (0, 2, 1)
+ >>> J1 = (0,) + J # extend to ndim=4
+ >>> S1 = (1,) + b.shape
+ >>> K = tuple(xp.asarray(I) * xp.asarray(S1) + xp.asarray(J1))
+ >>> c[K] == a[I]*b[J]
+ Array(True, dtype=array_api_strict.bool)
+ """
+ if xp is None:
+ xp = array_namespace(a, b)
+ a, b = asarrays(a, b, xp=xp)
+
+ singletons = (1,) * (b.ndim - a.ndim)
+ 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 = 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
+ b_shape = (1,) * max(0, nd_a - nd_b) + b_shape
+
+ # Insert empty dimensions
+ a_arr = expand_dims(a, axis=tuple(range(nd_b - nd_a)), xp=xp)
+ b_arr = expand_dims(b, axis=tuple(range(nd_a - nd_b)), xp=xp)
+
+ # Compute the product
+ a_arr = expand_dims(a_arr, axis=tuple(range(1, nd_max * 2, 2)), xp=xp)
+ b_arr = expand_dims(b_arr, axis=tuple(range(0, nd_max * 2, 2)), xp=xp)
+ result = xp.multiply(a_arr, b_arr)
+
+ # Reshape back and return
+ res_shape = tuple(a_s * b_s for a_s, b_s in zip(a_shape, b_shape, strict=True))
+ 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 | complex,
+ x2: Array | complex,
+ /,
+ *,
+ assume_unique: bool = False,
+ xp: ModuleType | None = None,
+) -> Array:
+ """
+ Find the set difference of two arrays.
+
+ Return the unique values in `x1` that are not in `x2`.
+
+ Parameters
+ ----------
+ x1 : array | int | float | complex | bool
+ Input array.
+ x2 : array
+ Input comparison array.
+ assume_unique : bool
+ If ``True``, the input arrays are both assumed to be unique, which
+ can speed up the calculation. Default is ``False``.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `x1` and `x2`. Default: infer.
+
+ Returns
+ -------
+ array
+ 1D array of values in `x1` that are not in `x2`. The result
+ is sorted when `assume_unique` is ``False``, but otherwise only sorted
+ if the input is sorted.
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+
+ >>> x1 = xp.asarray([1, 2, 3, 2, 4, 1])
+ >>> x2 = xp.asarray([3, 4, 5, 6])
+ >>> xpx.setdiff1d(x1, x2, xp=xp)
+ Array([1, 2], dtype=array_api_strict.int64)
+ """
+ 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,))
+ 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)]
+
+
+def sinc(x: Array, /, *, xp: ModuleType | None = None) -> Array:
+ r"""
+ Return the normalized sinc function.
+
+ The sinc function is equal to :math:`\sin(\pi x)/(\pi x)` for any argument
+ :math:`x\ne 0`. ``sinc(0)`` takes the limit value 1, making ``sinc`` not
+ only everywhere continuous but also infinitely differentiable.
+
+ .. note::
+
+ Note the normalization factor of ``pi`` used in the definition.
+ This is the most commonly used definition in signal processing.
+ Use ``sinc(x / xp.pi)`` to obtain the unnormalized sinc function
+ :math:`\sin(x)/x` that is more common in mathematics.
+
+ Parameters
+ ----------
+ x : array
+ Array (possibly multi-dimensional) of values for which to calculate
+ ``sinc(x)``. Must have a real floating point dtype.
+ xp : array_namespace, optional
+ The standard-compatible namespace for `x`. Default: infer.
+
+ Returns
+ -------
+ array
+ ``sinc(x)`` calculated elementwise, which has the same shape as the input.
+
+ Notes
+ -----
+ The name sinc is short for "sine cardinal" or "sinus cardinalis".
+
+ The sinc function is used in various signal processing applications,
+ including in anti-aliasing, in the construction of a Lanczos resampling
+ filter, and in interpolation.
+
+ For bandlimited interpolation of discrete-time signals, the ideal
+ interpolation kernel is proportional to the sinc function.
+
+ References
+ ----------
+ #. Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web
+ Resource. https://mathworld.wolfram.com/SincFunction.html
+ #. Wikipedia, "Sinc function",
+ https://en.wikipedia.org/wiki/Sinc_function
+
+ Examples
+ --------
+ >>> import array_api_strict as xp
+ >>> import array_api_extra as xpx
+ >>> x = xp.linspace(-4, 4, 41)
+ >>> xpx.sinc(x, xp=xp)
+ Array([-3.89817183e-17, -4.92362781e-02,
+ -8.40918587e-02, -8.90384387e-02,
+ -5.84680802e-02, 3.89817183e-17,
+ 6.68206631e-02, 1.16434881e-01,
+ 1.26137788e-01, 8.50444803e-02,
+ -3.89817183e-17, -1.03943254e-01,
+ -1.89206682e-01, -2.16236208e-01,
+ -1.55914881e-01, 3.89817183e-17,
+ 2.33872321e-01, 5.04551152e-01,
+ 7.56826729e-01, 9.35489284e-01,
+ 1.00000000e+00, 9.35489284e-01,
+ 7.56826729e-01, 5.04551152e-01,
+ 2.33872321e-01, 3.89817183e-17,
+ -1.55914881e-01, -2.16236208e-01,
+ -1.89206682e-01, -1.03943254e-01,
+ -3.89817183e-17, 8.50444803e-02,
+ 1.26137788e-01, 1.16434881e-01,
+ 6.68206631e-02, 3.89817183e-17,
+ -5.84680802e-02, -8.90384387e-02,
+ -8.40918587e-02, -4.92362781e-02,
+ -3.89817183e-17], dtype=array_api_strict.float64)
+ """
+ if xp is None:
+ xp = array_namespace(x)
+
+ if not xp.isdtype(x.dtype, "real floating"):
+ err_msg = "`x` must have a real floating data type."
+ raise ValueError(err_msg)
+ # no scalars in `where` - array-api#807
+ y = xp.pi * xp.where(
+ xp.astype(x, xp.bool),
+ x,
+ xp.asarray(xp.finfo(x.dtype).eps, dtype=x.dtype, device=_compat.device(x)),
+ )
+ return xp.sin(y) / y
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
new file mode 100644
index 00000000..30e2f1ef
--- /dev/null
+++ b/src/array_api_extra/_lib/_testing.py
@@ -0,0 +1,304 @@
+"""
+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, Device
+
+__all__ = ["as_numpy_array", "xp_assert_close", "xp_assert_equal", "xp_assert_less"]
+
+
+def _check_ns_shape_dtype(
+ 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.
+
+ Parameters
+ ----------
+ actual : Array
+ 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
+ -------
+ Arrays namespace.
+ """
+ actual_xp = array_namespace(actual) # Raises on scalars and lists
+ desired_xp = array_namespace(desired)
+
+ msg = f"namespaces do not match: {actual_xp} != f{desired_xp}"
+ assert actual_xp == desired_xp, 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
+
+ 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 _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`.
+
+ Parameters
+ ----------
+ actual : Array
+ The array produced by the tested function.
+ desired : Array
+ 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, 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)
+
+
+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.
+
+ 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(
+ actual: Array,
+ desired: Array,
+ *,
+ 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`.
+
+ Parameters
+ ----------
+ actual : Array
+ The array produced by the tested function.
+ desired : Array
+ The expected array (typically hardcoded).
+ rtol : float, optional
+ Relative tolerance. Default: dtype-dependent.
+ atol : float, optional
+ 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, check_dtype, check_shape, check_scalar)
+ if not _is_materializable(actual):
+ return
+
+ 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
+
+ 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,
+ )
+
+
+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/_typing.py b/src/array_api_extra/_lib/_typing.py
deleted file mode 100644
index 13079807..00000000
--- a/src/array_api_extra/_lib/_typing.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-from types import ModuleType
-from typing import Any
-
-# 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]
-
-__all__ = ["Array", "Device", "ModuleType"]
diff --git a/src/array_api_extra/_lib/_utils.py b/src/array_api_extra/_lib/_utils.py
deleted file mode 100644
index bf65340e..00000000
--- a/src/array_api_extra/_lib/_utils.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
-
-if typing.TYPE_CHECKING:
- from ._typing import Array, ModuleType
-
-from . import _compat
-
-__all__ = ["in1d"]
-
-
-def in1d(
- x1: Array,
- x2: Array,
- /,
- *,
- assume_unique: bool = False,
- invert: bool = False,
- xp: ModuleType,
-) -> Array:
- """Checks whether each element of an array is also present in a
- second array.
-
- Returns a boolean array the same length as `x1` that is True
- where an element of `x1` is in `x2` and False otherwise.
-
- This function has been adapted using the original implementation
- present in numpy:
- https://github.com/numpy/numpy/blob/v1.26.0/numpy/lib/arraysetops.py#L524-L758
- """
-
- # This code is run to make the code significantly faster
- if x2.shape[0] < 10 * x1.shape[0] ** 0.145:
- if invert:
- mask = xp.ones(x1.shape[0], dtype=xp.bool, device=x1.device)
- for a in x2:
- mask &= x1 != a
- else:
- mask = xp.zeros(x1.shape[0], dtype=xp.bool, device=x1.device)
- for a in x2:
- mask |= x1 == a
- return mask
-
- rev_idx = xp.empty(0) # placeholder
- if not assume_unique:
- x1, rev_idx = xp.unique_inverse(x1)
- x2 = xp.unique_values(x2)
-
- ar = xp.concat((x1, x2))
- device_ = _compat.device(ar)
- # We need this to be a stable sort.
- order = xp.argsort(ar, stable=True)
- reverse_order = xp.argsort(order, stable=True)
- sar = xp.take(ar, order, axis=0)
- if sar.size >= 1:
- bool_ar = sar[1:] != sar[:-1] if invert else sar[1:] == sar[:-1]
- else:
- bool_ar = xp.asarray([False]) if invert else xp.asarray([True])
- flag = xp.concat((bool_ar, xp.asarray([invert], device=device_)))
- ret = xp.take(flag, reverse_order, axis=0)
-
- if assume_unique:
- return ret[: x1.shape[0]]
- return xp.take(ret, rev_idx, axis=0)
diff --git a/src/array_api_extra/_lib/_utils/__init__.py b/src/array_api_extra/_lib/_utils/__init__.py
new file mode 100644
index 00000000..3628c45f
--- /dev/null
+++ b/src/array_api_extra/_lib/_utils/__init__.py
@@ -0,0 +1 @@
+"""Modules housing private utility functions."""
diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py
new file mode 100644
index 00000000..82ce76b8
--- /dev/null
+++ b/src/array_api_extra/_lib/_utils/_compat.py
@@ -0,0 +1,74 @@
+"""Acquire helpers from array-api-compat."""
+# 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 (
+ 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 (
+ 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
new file mode 100644
index 00000000..95c6bc8a
--- /dev/null
+++ b/src/array_api_extra/_lib/_utils/_compat.pyi
@@ -0,0 +1,45 @@
+"""Static type stubs for `_compat.py`."""
+
+# https://github.com/scikit-learn/scikit-learn/pull/27910#issuecomment-2568023972
+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
+
+def array_namespace(
+ *xs: Array | complex | None,
+ api_version: str | None = None,
+ use_compat: bool | None = None,
+) -> 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: ...
+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_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
new file mode 100644
index 00000000..6dd94a38
--- /dev/null
+++ b/src/array_api_extra/_lib/_utils/_helpers.py
@@ -0,0 +1,610 @@
+"""Helper functions used by `array_api_extra/_funcs.py`."""
+
+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 ._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
+
+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(
+ x1: Array,
+ x2: Array,
+ /,
+ *,
+ assume_unique: bool = False,
+ invert: bool = False,
+ xp: ModuleType | None = None,
+) -> Array: # numpydoc ignore=PR01,RT01
+ """
+ Check whether each element of an array is also present in a second array.
+
+ Returns a boolean array the same length as `x1` that is True
+ where an element of `x1` is in `x2` and False otherwise.
+
+ This function has been adapted using the original implementation
+ present in numpy:
+ https://github.com/numpy/numpy/blob/v1.26.0/numpy/lib/arraysetops.py#L524-L758
+ """
+ if xp is None:
+ 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 and isinstance(x2, Iterable):
+ if invert:
+ 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))
+ for a in x2:
+ mask |= x1 == a
+ return mask
+
+ rev_idx = xp.empty(0) # placeholder
+ if not assume_unique:
+ x1, rev_idx = xp.unique_inverse(x1)
+ x2 = xp.unique_values(x2)
+
+ ar = xp.concat((x1, x2))
+ device_ = _compat.device(ar)
+ # We need this to be a stable sort.
+ order = xp.argsort(ar, stable=True)
+ reverse_order = xp.argsort(order, stable=True)
+ sar = xp.take(ar, order, axis=0)
+ ar_size = _compat.size(sar)
+ assert ar_size is not None, "xp.unique*() on lazy backends raises"
+ if ar_size >= 1:
+ bool_ar = sar[1:] != sar[:-1] if invert else sar[1:] == sar[:-1]
+ else:
+ bool_ar = xp.asarray([False]) if invert else xp.asarray([True])
+ flag = xp.concat((bool_ar, xp.asarray([invert], device=device_)))
+ ret = xp.take(flag, reverse_order, axis=0)
+
+ if assume_unique:
+ return ret[: x1.shape[0]]
+ return xp.take(ret, rev_idx, axis=0)
+
+
+def mean(
+ x: Array,
+ /,
+ *,
+ axis: int | tuple[int, ...] | None = None,
+ keepdims: bool = False,
+ xp: ModuleType | None = None,
+) -> Array: # numpydoc ignore=PR01,RT01
+ """
+ Complex mean, https://github.com/data-apis/array-api/issues/846.
+ """
+ if xp is None:
+ xp = array_namespace(x)
+
+ if xp.isdtype(x.dtype, "complex floating"):
+ x_real = xp.real(x)
+ x_imag = xp.imag(x)
+ mean_real = xp.mean(x_real, axis=axis, keepdims=keepdims)
+ 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
new file mode 100644
index 00000000..8204be47
--- /dev/null
+++ b/src/array_api_extra/_lib/_utils/_typing.py
@@ -0,0 +1,10 @@
+# numpydoc ignore=GL08
+# pylint: disable=missing-module-docstring,duplicate-code
+
+Array = object
+DType = object
+Device = object
+GetIndex = object
+SetIndex = object
+
+__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/__init__.py b/tests/__init__.py
new file mode 100644
index 00000000..3ccaf52b
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1 @@
+"""Needed to import .conftest from the test modules."""
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..df703b97
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,242 @@
+"""Pytest fixtures."""
+
+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._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)) # type: ignore[arg-type] # pyright: ignore[reportArgumentType]
+
+
+@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.
+
+ Returns
+ -------
+ The current Backend enum.
+ """
+ elem = cast(Backend, request.param)
+
+ 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
+
+
+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
+ JAX and Sparse simply don't define those methods, which makes calls to `+=` fall
+ back to `__add__`.
+
+ Note that this is not a full read-only Array API library. Notably,
+ `array_namespace(x)` returns array_api_compat.numpy. This is actually the desired
+ behaviour, so that when a tested function internally calls `xp =
+ array_namespace(*args) or xp`, it will internally create writeable arrays.
+ For this reason, tests that explicitly pass xp=xp to the tested functions may
+ misbehave and should be skipped for NUMPY_READONLY.
+ """
+
+ def __getattr__(self, name: str) -> object: # numpydoc ignore=PR01,RT01
+ """Wrap all functions that return arrays to make their output read-only."""
+ func = getattr(np_compat, name)
+ if not callable(func) or isinstance(func, type):
+ return func
+ return self._wrap(func)
+
+ @staticmethod
+ def _wrap(func: Callable[P, T]) -> Callable[P, T]: # numpydoc ignore=PR01,RT01
+ """Wrap func to make all np.ndarrays it returns read-only."""
+
+ def as_readonly(o: T) -> T: # numpydoc ignore=PR01,RT01
+ """Unset the writeable flag in o."""
+ try:
+ # Don't use is_numpy_array(o), as it includes np.generic
+ if isinstance(o, np.ndarray):
+ o.flags.writeable = False
+ except TypeError:
+ # Cannot interpret as a data type
+ return o
+
+ # 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]
+
+ return o
+
+ @wraps(func)
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: # numpydoc ignore=GL08
+ return as_readonly(func(*args, **kwargs))
+
+ return wrapper
+
+
+@pytest.fixture
+def xp(
+ library: Backend, request: pytest.FixtureRequest
+) -> Generator[ModuleType]: # numpydoc ignore=PR01,RT03
+ """
+ Parameterized fixture that iterates on all libraries.
+
+ Returns
+ -------
+ The current array namespace.
+ """
+ if library == Backend.NUMPY_READONLY:
+ yield NumPyReadOnly() # type: ignore[misc] # pyright: ignore[reportReturnType]
+ return
+
+ xp = pytest.importorskip(library.modname)
+ # Possibly wrap module with array_api_compat
+ 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
+def device(
+ library: Backend, xp: ModuleType
+) -> Device: # numpydoc ignore=PR01,RT01,RT03
+ """
+ Return a valid device for the backend.
+
+ Where possible, return a device that is not the default one.
+ """
+ if library == Backend.ARRAY_API_STRICT:
+ 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
new file mode 100644
index 00000000..9558f7b8
--- /dev/null
+++ b/tests/test_at.py
@@ -0,0 +1,339 @@
+import math
+from collections.abc import Callable, Generator
+from contextlib import contextmanager
+from types import ModuleType
+from typing import cast
+
+import numpy as np
+import pytest
+
+from array_api_extra import at
+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._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, 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
+ return
+
+ xp = array_namespace(array)
+ array_orig = xp.asarray(array, copy=True)
+ yield
+
+ 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.parametrize("copy", [False, True, None])
+@pytest.mark.parametrize(
+ ("op", "y", "expect_list"),
+ [
+ (_AtOp.SET, 40.0, [10.0, 40.0, 40.0]),
+ (_AtOp.ADD, 40.0, [10.0, 60.0, 70.0]),
+ (_AtOp.SUBTRACT, 100.0, [10.0, -80.0, -70.0]),
+ (_AtOp.MULTIPLY, 2.0, [10.0, 40.0, 60.0]),
+ (_AtOp.DIVIDE, 2.0, [10.0, 10.0, 15.0]),
+ (_AtOp.POWER, 2.0, [10.0, 400.0, 900.0]),
+ (_AtOp.MIN, 25.0, [10.0, 20.0, 25.0]),
+ (_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,
+ copy: bool | None,
+ op: _AtOp,
+ y: float,
+ expect_list: list[float],
+ bool_mask: bool,
+ x_ndim: int,
+ y_ndim: int,
+):
+ 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]
+
+ 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]
+
+
+def test_xp():
+ 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():
+ 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), 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)
+ with pytest.raises(ValueError, match="Index"):
+ _ = at(a, 0)[0].set(4)
+
+
+@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.
+
+ 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])
+ >>> a /= 1.5
+ UFuncTypeError: Cannot cast ufunc 'divide' output from dtype('float64')
+ to dtype('int64') with casting rule 'same_kind'
+ """
+ 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 36411958..8304b848 100644
--- a/tests/test_funcs.py
+++ b/tests/test_funcs.py
@@ -1,198 +1,894 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import contextlib
-import typing
+import math
import warnings
+from types import ModuleType
+from typing import Any, cast
-# data-apis/array-api-strict#6
-import array_api_strict as xp # type: ignore[import-untyped] # pyright: ignore[reportMissingTypeStubs]
+import hypothesis
+import hypothesis.extra.numpy as npst
import numpy as np
import pytest
-from numpy.testing import assert_allclose, assert_array_equal, assert_equal
+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._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)
+
+ 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
-if typing.TYPE_CHECKING:
- from array_api_extra._lib._typing import Array
+ 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)
class TestAtLeastND:
- def test_0D(self):
- x = xp.asarray(1)
+ def test_0D(self, xp: ModuleType):
+ x = xp.asarray(1.0)
- y = atleast_nd(x, ndim=0, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=0)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=1, xp=xp)
- assert_array_equal(y, xp.ones((1,)))
+ y = atleast_nd(x, ndim=1)
+ xp_assert_equal(y, xp.ones((1,)))
- y = atleast_nd(x, ndim=5, xp=xp)
- assert_array_equal(y, xp.ones((1, 1, 1, 1, 1)))
+ y = atleast_nd(x, ndim=5)
+ xp_assert_equal(y, xp.ones((1, 1, 1, 1, 1)))
- def test_1D(self):
+ def test_1D(self, xp: ModuleType):
x = xp.asarray([0, 1])
- y = atleast_nd(x, ndim=0, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=0)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=1, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=1)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=2, xp=xp)
- assert_array_equal(y, xp.asarray([[0, 1]]))
+ y = atleast_nd(x, ndim=2)
+ xp_assert_equal(y, xp.asarray([[0, 1]]))
- y = atleast_nd(x, ndim=5, xp=xp)
- assert_array_equal(y, xp.reshape(xp.arange(2), (1, 1, 1, 1, 2)))
+ y = atleast_nd(x, ndim=5)
+ xp_assert_equal(y, xp.asarray([[[[[0, 1]]]]]))
- def test_2D(self):
- x = xp.asarray([[3]])
+ def test_2D(self, xp: ModuleType):
+ x = xp.asarray([[3.0]])
- y = atleast_nd(x, ndim=0, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=0)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=2, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=2)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=3, xp=xp)
- assert_array_equal(y, 3 * xp.ones((1, 1, 1)))
+ y = atleast_nd(x, ndim=3)
+ xp_assert_equal(y, 3 * xp.ones((1, 1, 1)))
- y = atleast_nd(x, ndim=5, xp=xp)
- assert_array_equal(y, 3 * xp.ones((1, 1, 1, 1, 1)))
+ y = atleast_nd(x, ndim=5)
+ xp_assert_equal(y, 3 * xp.ones((1, 1, 1, 1, 1)))
- def test_5D(self):
+ def test_5D(self, xp: ModuleType):
x = xp.ones((1, 1, 1, 1, 1))
- y = atleast_nd(x, ndim=0, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=0)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=4, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=4)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=5, xp=xp)
- assert_array_equal(y, x)
+ y = atleast_nd(x, ndim=5)
+ xp_assert_equal(y, x)
- y = atleast_nd(x, ndim=6, xp=xp)
- assert_array_equal(y, xp.ones((1, 1, 1, 1, 1, 1)))
+ y = atleast_nd(x, ndim=6)
+ xp_assert_equal(y, xp.ones((1, 1, 1, 1, 1, 1)))
- y = atleast_nd(x, ndim=9, xp=xp)
- assert_array_equal(y, xp.ones((1, 1, 1, 1, 1, 1, 1, 1, 1)))
+ y = atleast_nd(x, ndim=9)
+ xp_assert_equal(y, xp.ones((1, 1, 1, 1, 1, 1, 1, 1, 1)))
+
+ def test_device(self, xp: ModuleType, device: Device):
+ x = xp.asarray([1, 2, 3], device=device)
+ assert get_device(atleast_nd(x, ndim=2)) == device
+
+ def test_xp(self, xp: ModuleType):
+ 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
class TestCov:
- def test_basic(self):
- assert_allclose(
- cov(xp.asarray([[0, 2], [1, 1], [2, 0]]).T, xp=xp),
- xp.asarray([[1.0, -1.0], [-1.0, 1.0]]),
+ def test_basic(self, xp: ModuleType):
+ xp_assert_close(
+ cov(xp.asarray([[0, 2], [1, 1], [2, 0]]).T),
+ xp.asarray([[1.0, -1.0], [-1.0, 1.0]], dtype=xp.float64),
)
- def test_complex(self):
- x = xp.asarray([[1, 2, 3], [1j, 2j, 3j]])
- res = xp.asarray([[1.0, -1.0j], [1.0j, 1.0]])
- assert_allclose(cov(x, xp=xp), res)
+ def test_complex(self, xp: ModuleType):
+ actual = cov(xp.asarray([[1, 2, 3], [1j, 2j, 3j]]))
+ expect = xp.asarray([[1.0, -1.0j], [1.0j, 1.0]], dtype=xp.complex128)
+ xp_assert_close(actual, expect)
- def test_empty(self):
+ @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)
- assert_array_equal(cov(xp.asarray([]), xp=xp), xp.nan)
- assert_array_equal(
- cov(xp.reshape(xp.asarray([]), (0, 2)), xp=xp),
- xp.reshape(xp.asarray([]), (0, 0)),
+ xp_assert_equal(cov(xp.asarray([])), xp.asarray(xp.nan, dtype=xp.float64))
+ xp_assert_equal(
+ cov(xp.reshape(xp.asarray([]), (0, 2))),
+ xp.reshape(xp.asarray([], dtype=xp.float64), (0, 0)),
)
- assert_array_equal(
- cov(xp.reshape(xp.asarray([]), (2, 0)), xp=xp),
- xp.asarray([[xp.nan, xp.nan], [xp.nan, xp.nan]]),
+ xp_assert_equal(
+ cov(xp.reshape(xp.asarray([]), (2, 0))),
+ xp.asarray([[xp.nan, xp.nan], [xp.nan, xp.nan]], dtype=xp.float64),
)
- def test_combination(self):
+ def test_combination(self, xp: ModuleType):
x = xp.asarray([-2.1, -1, 4.3])
y = xp.asarray([3, 1.1, 0.12])
X = xp.stack((x, y), axis=0)
- desired = xp.asarray([[11.71, -4.286], [-4.286, 2.144133]])
- assert_allclose(cov(X, xp=xp), desired, rtol=1e-6)
- assert_allclose(cov(x, xp=xp), xp.asarray(11.71))
- assert_allclose(cov(y, xp=xp), xp.asarray(2.144133), rtol=1e-6)
+ desired = xp.asarray([[11.71, -4.286], [-4.286, 2.144133]], dtype=xp.float64)
+ xp_assert_close(cov(X), desired, rtol=1e-6)
+ xp_assert_close(cov(x), xp.asarray(11.71, dtype=xp.float64))
+ xp_assert_close(cov(y), xp.asarray(2.144133, dtype=xp.float64), rtol=1e-6)
+
+ 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, 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),
+ xp.asarray([[1.0, -1.0], [-1.0, 1.0]], dtype=xp.float64),
+ )
+
+
+@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):
+ 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))
+ b = xp.zeros((5, 5), dtype=xp.float64)
for k in range(5):
- b[k, k] = vals[k]
- assert_array_equal(create_diagonal(vals, xp=xp), b)
- b = xp.zeros((7, 7))
+ b = at(b)[k, k].set(vals[k])
+ xp_assert_equal(create_diagonal(vals), b)
+ b = xp.zeros((7, 7), dtype=xp.float64)
c = xp.asarray(b, copy=True)
for k in range(5):
- b[k, k + 2] = vals[k]
- c[k + 2, k] = vals[k]
- assert_array_equal(create_diagonal(vals, offset=2, xp=xp), b)
- assert_array_equal(create_diagonal(vals, offset=-2, xp=xp), c)
+ b = at(b)[k, k + 2].set(vals[k])
+ c = at(c)[k + 2, k].set(vals[k])
+ xp_assert_equal(create_diagonal(vals, offset=2), b)
+ xp_assert_equal(create_diagonal(vals, offset=-2), c)
@pytest.mark.parametrize("n", range(1, 10))
@pytest.mark.parametrize("offset", range(1, 10))
- def test_create_diagonal(self, 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)
x = rng.random(n)
- A = create_diagonal(xp.asarray(x, dtype=one.dtype), offset=offset, xp=xp)
+ A = create_diagonal(xp.asarray(x, dtype=one.dtype), offset=offset)
B = xp.asarray(np.diag(x, offset), dtype=one.dtype)
- assert_array_equal(A, B)
+ xp_assert_equal(A, B)
- def test_0d(self):
+ def test_0d_raises(self, xp: ModuleType):
with pytest.raises(ValueError, match="1-dimensional"):
- create_diagonal(xp.asarray(1), xp=xp)
+ _ = create_diagonal(xp.asarray(1))
- def test_2d(self):
- with pytest.raises(ValueError, match="1-dimensional"):
- create_diagonal(xp.asarray([[1]]), xp=xp)
+ @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)
+ assert get_device(create_diagonal(x)) == device
+
+ def test_xp(self, xp: ModuleType):
+ x = xp.asarray([1, 2])
+ y = create_diagonal(x, xp=xp)
+ xp_assert_equal(y, xp.asarray([[1, 0], [0, 2]]))
+
+
+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:
+ 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)
+ xp_assert_equal(b, xp.expand_dims(a, axis=axis))
+
+ def test_axis_tuple(self, xp: ModuleType):
+ a = xp.empty((3, 3, 3))
+ assert expand_dims(a, axis=(0, 1, 2)).shape == (1, 1, 1, 3, 3, 3)
+ assert expand_dims(a, axis=(0, -1, -2)).shape == (1, 3, 3, 3, 1, 1)
+ assert expand_dims(a, axis=(0, 3, 5)).shape == (1, 3, 3, 1, 3, 1)
+ assert expand_dims(a, axis=(0, -3, -5)).shape == (1, 1, 3, 1, 3, 3)
+
+ def test_axis_out_of_range(self, xp: ModuleType):
+ a = xp.empty((2, 3, 4, 5))
+ with pytest.raises(IndexError, match="out of bounds"):
+ _ = expand_dims(a, axis=-6)
+ with pytest.raises(IndexError, match="out of bounds"):
+ _ = 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))
+ with pytest.raises(IndexError, match="out of bounds"):
+ _ = 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))
+
+ 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))
+
+ def test_device(self, xp: ModuleType, device: Device):
+ x = xp.asarray([1, 2, 3], device=device)
+ assert get_device(expand_dims(x, axis=0)) == device
+
+ def test_xp(self, xp: ModuleType):
+ x = xp.asarray([1, 2, 3])
+ y = expand_dims(x, axis=(0, 1, 2), xp=xp)
+ assert y.shape == (1, 1, 1, 3)
+
+
+@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):
+ 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]])
- assert_array_equal(kron(a, b, xp=xp), k)
- a = xp.asarray([[1, 2], [3, 4]])
- b = xp.asarray(1)
- assert_array_equal(kron(a, b, xp=xp), 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]])
- assert_array_equal(kron(a, b, xp=xp), k)
- a = xp.asarray([[1, 2], [3, 4]])
- b = xp.asarray([3])
- assert_array_equal(kron(a, b, xp=xp), k)
+ 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]]])
- assert_array_equal(kron(a, b, xp=xp), k)
- a = xp.asarray([[1, 2], [3, 4]])
- b = xp.asarray([[[1]], [[2]]])
- k = xp.asarray([[[1, 2], [3, 4]], [[2, 4], [6, 8]]])
- assert_array_equal(kron(a, b, xp=xp), k)
+ xp_assert_equal(kron(a, b), k)
+ xp_assert_equal(kron(b, a), k)
- def test_kron_smoke(self):
+ def test_kron_smoke(self, xp: ModuleType):
a = xp.ones((3, 3))
b = xp.ones((3, 3))
k = xp.ones((9, 9))
- assert_array_equal(kron(a, b, xp=xp), k)
+ xp_assert_equal(kron(a, b), k)
@pytest.mark.parametrize(
("shape_a", "shape_b"),
@@ -205,7 +901,9 @@ def test_kron_smoke(self):
((2, 0, 0, 2), (2, 0, 2)),
],
)
- def test_kron_shape(self, shape_a: tuple[int, ...], shape_b: tuple[int, ...]):
+ def test_kron_shape(
+ self, xp: ModuleType, shape_a: tuple[int, ...], shape_b: tuple[int, ...]
+ ):
a = xp.ones(shape_a)
b = xp.ones(shape_b)
normalised_shape_a = xp.asarray(
@@ -218,101 +916,385 @@ def test_kron_shape(self, shape_a: tuple[int, ...], shape_b: tuple[int, ...]):
int(dim) for dim in xp.multiply(normalised_shape_a, normalised_shape_b)
)
- k = kron(a, b, xp=xp)
- assert_equal(k.shape, expected_shape, err_msg="Unexpected shape from kron")
+ 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))
-class TestExpandDims:
- def test_functionality(self):
- 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)
- for axis in range(-5, 4):
- b = expand_dims(a, axis=axis, xp=xp)
- assert b.shape[axis] == 1
- assert _squeeze_all(b).shape == s
+ def test_all_python_scalars(self):
+ with pytest.raises(TypeError, match="Unrecognized"):
+ _ = kron(1, 1)
- def test_axis_tuple(self):
- a = xp.empty((3, 3, 3))
- assert expand_dims(a, axis=(0, 1, 2), xp=xp).shape == (1, 1, 1, 3, 3, 3)
- assert expand_dims(a, axis=(0, -1, -2), xp=xp).shape == (1, 3, 3, 3, 1, 1)
- assert expand_dims(a, axis=(0, 3, 5), xp=xp).shape == (1, 3, 3, 1, 3, 1)
- assert expand_dims(a, axis=(0, -3, -5), xp=xp).shape == (1, 1, 3, 1, 3, 3)
-
- def test_axis_out_of_range(self):
- s = (2, 3, 4, 5)
- a = xp.empty(s)
- with pytest.raises(IndexError, match="out of bounds"):
- expand_dims(a, axis=-6, xp=xp)
- with pytest.raises(IndexError, match="out of bounds"):
- expand_dims(a, axis=5, xp=xp)
+ def test_device(self, xp: ModuleType, device: Device):
+ x1 = xp.asarray([1, 2, 3], device=device)
+ x2 = xp.asarray([4, 5], device=device)
+ assert get_device(kron(x1, x2)) == device
- a = xp.empty((3, 3, 3))
- with pytest.raises(IndexError, match="out of bounds"):
- expand_dims(a, axis=(0, -6), xp=xp)
- with pytest.raises(IndexError, match="out of bounds"):
- expand_dims(a, axis=(0, 5), xp=xp)
+ def test_xp(self, xp: ModuleType):
+ a = xp.ones((3, 3))
+ b = xp.ones((3, 3))
+ k = xp.ones((9, 9))
+ xp_assert_equal(kron(a, b, xp=xp), k)
- def test_repeated_axis(self):
- a = xp.empty((3, 3, 3))
- with pytest.raises(ValueError, match="Duplicate dimensions"):
- expand_dims(a, axis=(1, 1), xp=xp)
- def test_positive_negative_repeated(self):
- # 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), xp=xp)
+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,
+ ]
+ ),
+ )
+
+ 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)]),
+ )
+
+ 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)
+
+ @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_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,
+ )
+
+
+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))
+
+ def test_size1(self, xp: ModuleType):
+ a = xp.asarray([123])
+ xp_assert_equal(nunique(a), xp.asarray(1))
+
+ def test_all_equal(self, xp: ModuleType):
+ a = xp.asarray([123, 123, 123])
+ xp_assert_equal(nunique(a), xp.asarray(1))
+
+ @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")
+
+ # 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):
+ a = xp.asarray([[1, 1], [0, 2], [2, 2]])
+ xp_assert_equal(nunique(a, xp=xp), xp.asarray(3))
+class TestPad:
+ def test_simple(self, xp: ModuleType):
+ 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.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.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.asarray([1, 2, 3])
+ with pytest.raises(NotImplementedError, match="Only `'constant'`"):
+ _ = 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)
+ assert get_device(pad(a, 2)) == device
+
+ def test_xp(self, xp: ModuleType):
+ padded = pad(xp.asarray(0), 1, xp=xp)
+ xp_assert_equal(padded, xp.asarray(0))
+
+ def test_tuple_width(self, xp: ModuleType):
+ a = xp.asarray(np.reshape(np.arange(12), (3, 4)))
+ padded = pad(a, (1, 0))
+ assert padded.shape == (4, 5)
+
+ padded = pad(a, (1, 2))
+ assert padded.shape == (6, 7)
+
+ with pytest.raises((ValueError, RuntimeError)):
+ _ = pad(a, [(1, 2, 3)]) # type: ignore[list-item] # pyright: ignore[reportArgumentType]
+
+ 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, 2)))
+ assert padded.shape == (4, 6)
+ padded = pad(a, ((1, 0), (0, 0)))
+ assert padded.shape == (4, 4)
+
+
+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:
- def test_setdiff1d(self):
+ @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=xp)
- assert_array_equal(actual, expected)
+ 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=xp)
- assert_array_equal(actual, expected)
+ actual = setdiff1d(x1, x2)
+ xp_assert_equal(actual, expected)
- assert_array_equal(setdiff1d(xp.empty(0), xp.empty(0), xp=xp), xp.empty(0))
+ xp_assert_equal(setdiff1d(xp.empty(0), xp.empty(0)), xp.empty(0))
x1 = xp.empty(0, dtype=xp.uint32)
x2 = x1
- assert_equal(setdiff1d(x1, x2, xp=xp).dtype, xp.uint32)
+ assert xp.isdtype(setdiff1d(x1, x2).dtype, xp.uint32)
- def test_assume_unique(self):
+ 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)
- assert_array_equal(actual, expected)
+ xp_assert_equal(actual, expected)
class TestSinc:
- def test_simple(self):
- assert_array_equal(sinc(xp.asarray(0.0), xp=xp), xp.asarray(1.0))
- w = sinc(xp.linspace(-1, 1, 100), xp=xp)
+ def test_simple(self, xp: ModuleType):
+ 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
- assert_allclose(w, xp.flip(w, axis=0))
+ xp_assert_close(w, xp.flip(w, axis=0))
@pytest.mark.parametrize("x", [0, 1 + 3j])
- def test_dtype(self, x: int | complex):
+ def test_dtype(self, xp: ModuleType, x: int | complex):
with pytest.raises(ValueError, match="real floating data type"):
- sinc(xp.asarray(x), xp=xp)
+ _ = 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):
+ x = xp.asarray(0.0, device=device)
+ assert get_device(sinc(x)) == device
- def test_3d(self):
- x = xp.reshape(xp.arange(18, dtype=xp.float64), (3, 3, 2))
- expected = xp.zeros((3, 3, 2))
- expected[0, 0, 0] = 1.0
- assert_allclose(sinc(x, xp=xp), expected, atol=1e-15)
+ def test_xp(self, xp: ModuleType):
+ 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
new file mode 100644
index 00000000..be7b6103
--- /dev/null
+++ b/tests/test_testing.py
@@ -0,0 +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._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
+
+# pyright: reportUnknownParameterType=false,reportMissingParameterType=false
+
+
+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 a34ec56f..00000000
--- a/tests/test_utils.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
-
-# data-apis/array-api-strict#6
-import array_api_strict as xp # type: ignore[import-untyped] # pyright: ignore[reportMissingTypeStubs]
-import pytest
-from numpy.testing import assert_array_equal
-
-from array_api_extra._lib._utils import in1d
-
-if typing.TYPE_CHECKING:
- from array_api_extra._lib._typing import Array
-
-
-# some test coverage already provided by TestSetDiff1D
-class TestIn1D:
- # cover both code paths
- @pytest.mark.parametrize("x2", [xp.arange(9), xp.arange(15)])
- def test_no_invert_assume_unique(self, x2: Array):
- x1 = xp.asarray([3, 8, 20])
- expected = xp.asarray([True, True, False])
- actual = in1d(x1, x2, xp=xp)
- assert_array_equal(actual, expected)
diff --git a/tests/test_version.py b/tests/test_version.py
index 1b20232f..b9717a50 100644
--- a/tests/test_version.py
+++ b/tests/test_version.py
@@ -1,5 +1,3 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
import importlib.metadata
import array_api_extra as xpx
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/__init__.py b/vendor_tests/__init__.py
new file mode 100644
index 00000000..9fd27fde
--- /dev/null
+++ b/vendor_tests/__init__.py
@@ -0,0 +1 @@
+"""Allow for relative imports in `test_vendor.py`."""
diff --git a/vendor_tests/_array_api_compat_vendor.py b/vendor_tests/_array_api_compat_vendor.py
new file mode 100644
index 00000000..9bc129b5
--- /dev/null
+++ b/vendor_tests/_array_api_compat_vendor.py
@@ -0,0 +1,11 @@
+"""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
+
+
+# Let unit tests check with `is` that we are picking up the function from this module
+# and not from the original array_api_compat module.
+def array_namespace(*xs, **kwargs): # numpydoc ignore=GL08
+ return array_namespace_compat(*xs, **kwargs)
diff --git a/vendor_tests/test_vendor.py b/vendor_tests/test_vendor.py
new file mode 100644
index 00000000..e43c82fb
--- /dev/null
+++ b/vendor_tests/test_vendor.py
@@ -0,0 +1,76 @@
+# pyright: reportAttributeAccessIssue=false
+
+from typing import Any
+
+import array_api_strict as xp
+from numpy.testing import assert_array_equal
+
+
+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
+ 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
+
+
+def test_vendor_extra():
+ from .array_api_extra import atleast_nd
+
+ x = xp.asarray(1)
+ y = atleast_nd(x, ndim=0)
+ 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():
+ from ._array_api_compat_vendor import array_namespace as n1
+ from .array_api_extra._lib._utils._compat import array_namespace as n2
+
+ assert n1 is n2