diff --git a/pixi.lock b/pixi.lock index 1826ca51..e7634b7d 100644 --- a/pixi.lock +++ b/pixi.lock @@ -8,6 +8,8 @@ environments: default: 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-20_gnu.conda @@ -32,7 +34,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda @@ -41,9 +42,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda @@ -68,9 +69,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda @@ -96,9 +97,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.10.1-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda @@ -124,10 +125,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 dev: 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-7_kmp_llvm.conda @@ -213,7 +217,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -322,11 +325,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.25-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -511,11 +514,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zizmor-1.24.1-h19f9e61_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -695,11 +698,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zizmor-1.24.1-h6fdd925_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -861,10 +864,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zizmor-1.24.1-h18a1a76_0.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 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/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -987,7 +993,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -1103,11 +1108,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.25-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -1292,11 +1297,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zizmor-1.24.1-h19f9e61_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -1476,11 +1481,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zizmor-1.24.1-h6fdd925_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -1662,10 +1667,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zizmor-1.24.1-h18a1a76_0.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 docs: 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-20_gnu.conda @@ -1702,7 +1710,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda @@ -1763,11 +1770,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda @@ -1857,11 +1864,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda @@ -1952,11 +1959,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda @@ -2051,10 +2058,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 lint: 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-20_gnu.conda @@ -2111,7 +2121,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zizmor-1.24.1-hb17b654_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda @@ -2183,10 +2192,10 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/validate-pyproject-0.25-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 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.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda @@ -2308,10 +2317,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zizmor-1.24.1-h19f9e61_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda @@ -2433,10 +2442,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zizmor-1.24.1-h6fdd925_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda @@ -2554,10 +2563,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zizmor-1.24.1-h18a1a76_0.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests: 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-20_gnu.conda @@ -2591,7 +2603,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -2614,9 +2625,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_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-2025c-hc9c84f9_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -2667,9 +2678,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -2721,9 +2732,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -2778,10 +2789,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 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-7_kmp_llvm.conda @@ -2847,7 +2861,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -2892,9 +2905,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -2997,9 +3010,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3097,9 +3110,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -3185,10 +3198,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests-backends-py311: 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-7_kmp_llvm.conda @@ -3256,7 +3272,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3300,9 +3315,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3403,9 +3418,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3502,9 +3517,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -3589,10 +3604,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 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-7_kmp_llvm.conda @@ -3695,7 +3713,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3747,9 +3764,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3852,9 +3869,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -3952,9 +3969,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -4060,10 +4077,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests-cuda-py311: 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-7_kmp_llvm.conda @@ -4168,7 +4188,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4219,9 +4238,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4322,9 +4341,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4421,9 +4440,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -4528,10 +4547,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests-nogil: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -4565,7 +4587,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4601,9 +4622,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4666,9 +4687,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4732,9 +4753,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -4801,10 +4822,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 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/_openmp_mutex-4.5-20_gnu.conda @@ -4841,7 +4865,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4864,9 +4887,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_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-2025c-hc9c84f9_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4915,9 +4938,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.15.2-py311h0c91ca8_0.conda - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -4967,9 +4990,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.2-py311h0675101_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -5023,10 +5046,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests-py311: 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-20_gnu.conda @@ -5062,7 +5088,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5085,9 +5110,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_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-2025c-hc9c84f9_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5136,9 +5161,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/scipy-1.17.1-py311h556693a_0.conda - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5188,9 +5213,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.17.1-py311he9931d0_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -5243,10 +5268,13 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 tests-py314: 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-20_gnu.conda @@ -5280,7 +5308,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://prefix.dev/conda-forge/linux-64/uv-0.10.4-h6dd6661_0.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5303,9 +5330,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_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-2025c-hc9c84f9_1.conda - - conda_source: array-api-extra[524df11d] @ . + - conda_source: array-api-extra[b0785178] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5356,9 +5383,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - conda_source: array-api-extra[8486112d] @ . + - conda_source: array-api-extra[6b892eaf] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda @@ -5410,9 +5437,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda_source: array-api-extra[3dd3a5a3] @ . + - conda_source: array-api-extra[985b32c7] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda @@ -5467,7 +5494,8 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda_source: array-api-extra[2c9d5690] @ . + - conda_source: array-api-extra[75b7d447] @ . + - pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 packages: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -7266,6 +7294,8 @@ packages: - typing_extensions >=4.6.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 20297545 timestamp: 1776802022720 - conda: https://prefix.dev/conda-forge/linux-64/nccl-2.29.3.1-h4d09622_0.conda @@ -7646,6 +7676,7 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: [] run_exports: {} size: 10962615 timestamp: 1778629320799 @@ -8071,6 +8102,8 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping run_exports: {} size: 9317508 timestamp: 1778780215313 @@ -8310,6 +8343,7 @@ packages: constrains: - __glibc >=2.17 license: MIT OR Apache-2.0 + purls: [] run_exports: {} size: 3359839 timestamp: 1778255018635 @@ -8400,18 +8434,6 @@ packages: - pkg:pypi/alabaster?source=hash-mapping size: 18684 timestamp: 1733750512696 -- conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - sha256: ea3f7f55cf277c6f122aa3e7f68bf048785e0f1f7faa526a0968e3a75ad7bc1b - md5: b8682ca0248f13738e899995b85c176d - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/array-api-compat?source=hash-mapping - size: 47312 - timestamp: 1772121558353 - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.5-pyhcf101f3_0.conda sha256: 2134909f7a04ddb046018625931d2f38fb8d824b54cf02aa5eaf3a147c766cf0 md5: e65c7d49168ef8014ad0563ea0d94ff1 @@ -8482,6 +8504,8 @@ packages: - nodejs-wheel >=20.13.1 - python license: MIT AND Apache-2.0 + purls: + - pkg:pypi/basedpyright?source=hash-mapping size: 8797387 timestamp: 1776731328353 - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda @@ -8950,6 +8974,8 @@ packages: - sortedcontainers >=2.1.0,<3.0.0 license: MPL-2.0 license_family: MOZILLA + purls: + - pkg:pypi/hypothesis?source=hash-mapping run_exports: {} size: 379522 timestamp: 1777332575730 @@ -9019,6 +9045,8 @@ packages: - python license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping run_exports: {} size: 651632 timestamp: 1777038396606 @@ -9042,6 +9070,8 @@ packages: - python license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping run_exports: {} size: 650593 timestamp: 1777038425499 @@ -11109,6 +11139,8 @@ packages: - typing_extensions >=4.6.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 13069509 timestamp: 1776803940390 - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda @@ -11444,6 +11476,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] run_exports: {} size: 10907035 timestamp: 1778629381545 @@ -11709,6 +11742,8 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping run_exports: {} size: 9246877 timestamp: 1778780424677 @@ -11844,6 +11879,7 @@ packages: constrains: - __osx >=10.13 license: MIT OR Apache-2.0 + purls: [] run_exports: {} size: 2849149 timestamp: 1778255058400 @@ -12693,6 +12729,8 @@ packages: - typing_extensions >=4.6.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 12162223 timestamp: 1776802958871 - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda @@ -13027,6 +13065,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] run_exports: {} size: 10330096 timestamp: 1778629356792 @@ -13293,6 +13332,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping run_exports: {} size: 8490025 timestamp: 1778780500160 @@ -13420,6 +13461,7 @@ packages: constrains: - __osx >=11.0 license: MIT OR Apache-2.0 + purls: [] run_exports: {} size: 2704352 timestamp: 1778255021957 @@ -14350,6 +14392,8 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 9760683 timestamp: 1776802300096 - conda: https://prefix.dev/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda @@ -14630,6 +14674,7 @@ packages: - ucrt >=10.0.20348.0 license: MIT license_family: MIT + purls: [] run_exports: {} size: 11351129 timestamp: 1778629351360 @@ -14981,6 +15026,8 @@ packages: - ucrt >=10.0.20348.0 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=compressed-mapping run_exports: {} size: 9725533 timestamp: 1778780264975 @@ -15157,6 +15204,7 @@ packages: - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 license: MIT OR Apache-2.0 + purls: [] run_exports: {} size: 2907747 timestamp: 1778255045915 @@ -15288,13 +15336,46 @@ packages: - zstd >=1.5.7,<1.6.0a0 size: 388453 timestamp: 1764777142545 -- conda_source: array-api-extra[2c9d5690] @ . +- conda_source: array-api-extra[6b892eaf] @ . + variants: + target_platform: noarch + depends: + - python >=3.11 + - python * + license: MIT + host_packages: + - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda + - conda: https://prefix.dev/conda-forge/noarch/meson-1.11.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda + - conda: https://prefix.dev/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://prefix.dev/conda-forge/noarch/pyproject-metadata-0.11.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://prefix.dev/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libcxx-22.1.5-h19cb2f5_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.8.0-hcc62823_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda + - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/ninja-1.13.2-hfc0b2d5_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/python-3.14.4-h7c6738f_100_cp314.conda + - conda: https://prefix.dev/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://prefix.dev/conda-forge/osx-64/uv-0.11.12-h0b06875_0.conda + - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda +- conda_source: array-api-extra[75b7d447] @ . variants: target_platform: noarch depends: - - array-api-compat - python >=3.11 - python * + license: MIT host_packages: - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.4.22-h4c7d964_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.11.1-pyhcf101f3_0.conda @@ -15321,13 +15402,13 @@ packages: - conda: https://prefix.dev/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda -- conda_source: array-api-extra[3dd3a5a3] @ . +- conda_source: array-api-extra[985b32c7] @ . variants: target_platform: noarch depends: - - array-api-compat - python >=3.11 - python * + license: MIT host_packages: - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/noarch/meson-1.11.1-pyhcf101f3_0.conda @@ -15353,13 +15434,13 @@ packages: - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.11.12-h2c65d96_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda -- conda_source: array-api-extra[524df11d] @ . +- conda_source: array-api-extra[b0785178] @ . variants: target_platform: noarch depends: - - array-api-compat - python >=3.11 - python * + license: MIT host_packages: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -15390,36 +15471,29 @@ packages: - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda -- conda_source: array-api-extra[8486112d] @ . - variants: - target_platform: noarch - depends: - - array-api-compat - - python >=3.11 - - python * - host_packages: - - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda - - conda: https://prefix.dev/conda-forge/noarch/meson-1.11.1-pyhcf101f3_0.conda - - conda: https://prefix.dev/conda-forge/noarch/meson-python-0.19.0-pyh7e86bf3_2.conda - - conda: https://prefix.dev/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - - conda: https://prefix.dev/conda-forge/noarch/pyproject-metadata-0.11.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://prefix.dev/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/libcxx-22.1.5-h19cb2f5_1.conda - - conda: https://prefix.dev/conda-forge/osx-64/libexpat-2.8.0-hcc62823_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://prefix.dev/conda-forge/osx-64/libsqlite-3.53.1-h8f8c405_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda - - conda: https://prefix.dev/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/ninja-1.13.2-hfc0b2d5_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/openssl-3.6.2-hc881268_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/python-3.14.4-h7c6738f_100_cp314.conda - - conda: https://prefix.dev/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://prefix.dev/conda-forge/osx-64/uv-0.11.12-h0b06875_0.conda - - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda +- pypi: git+https://github.com/data-apis/array-api-compat#745a369b87f8a18bf97474b039e4567d860d04d2 + name: array-api-compat + version: 1.15.0.dev0 + requires_dist: + - cupy ; extra == 'cupy' + - dask>=2024.9.0 ; extra == 'dask' + - jax ; extra == 'jax' + - numpy>=1.22 ; extra == 'numpy' + - torch ; extra == 'pytorch' + - sparse>=0.15.1 ; extra == 'sparse' + - ndonnx ; extra == 'ndonnx' + - furo ; extra == 'docs' + - linkify-it-py ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - array-api-strict ; extra == 'dev' + - dask[array]>=2024.9.0 ; extra == 'dev' + - jax[cpu] ; extra == 'dev' + - ndonnx ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - pytest ; extra == 'dev' + - torch ; extra == 'dev' + - sparse>=0.15.1 ; extra == 'dev' + requires_python: '>=3.10' diff --git a/pixi.toml b/pixi.toml index ae8d57cb..5e1c870b 100644 --- a/pixi.toml +++ b/pixi.toml @@ -15,7 +15,10 @@ meson-python = "*" uv = "*" # interfaces with meson-python instead of pip [package.run-dependencies] -array-api-compat = "*" +# array-api-compat = "*" + +[pypi-dependencies] +array-api-compat.git = "https://github.com/data-apis/array-api-compat" ### workspace environments ### diff --git a/pyproject.toml b/pyproject.toml index 9b66fc97..ad643b55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,12 @@ Changelog = "https://github.com/data-apis/array-api-extra/releases" minversion = "6.0" addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] xfail_strict = true -filterwarnings = ["error"] +filterwarnings = [ + "error", + 'ignore:.*torch.jit.script_method.*', + 'ignore:.*recompile_limit.*', + 'ignore:.*Dynamo.*lru_cache.*', +] log_cli_level = "INFO" testpaths = ["tests"] markers = [ diff --git a/src/array_api_extra/_lib/_utils/_helpers.py b/src/array_api_extra/_lib/_utils/_helpers.py index 3606d344..5c642b28 100644 --- a/src/array_api_extra/_lib/_utils/_helpers.py +++ b/src/array_api_extra/_lib/_utils/_helpers.py @@ -2,11 +2,13 @@ from __future__ import annotations +import functools import io import math import pickle import types from collections.abc import Callable, Generator, Iterable, Iterator +from enum import Enum, auto from functools import wraps from types import ModuleType from typing import ( @@ -46,12 +48,14 @@ def override(func): __all__ = [ + "JitLibrary", "asarrays", + "autojit", "capabilities", "eager_shape", "in1d", "is_python_scalar", - "jax_autojit", + "mean", "meta_namespace", "pickle_flatten", "pickle_unflatten", @@ -483,7 +487,7 @@ def persistent_load(self, pid: Literal[0, 1]) -> object: # numpydoc ignore=GL08 class _AutoJITWrapper(Generic[T]): # numpydoc ignore=PR01 """ - Helper of :func:`jax_autojit`. + Helper of :func:`autojit`. Wrap arbitrary inputs and outputs of the jitted function and convert them to/from PyTrees. @@ -491,12 +495,12 @@ class _AutoJITWrapper(Generic[T]): # numpydoc ignore=PR01 _obj: Any _is_iter: bool - _registered: ClassVar[bool] = False + _registered: ClassVar[set[JitLibrary]] = set() __slots__: tuple[str, ...] = ("_is_iter", "_obj") - def __init__(self, obj: T) -> None: # numpydoc ignore=GL08 - self._register() - if isinstance(obj, Iterator): + def __init__(self, obj: T, jit_library: JitLibrary) -> None: # numpydoc ignore=GL08 + self._register(jit_library) + if jit_library is JitLibrary.jax and isinstance(obj, Iterator): self._obj = list(obj) self._is_iter = True else: @@ -509,12 +513,15 @@ def obj(self) -> T: # numpydoc ignore=RT01 return iter(self._obj) if self._is_iter else self._obj @classmethod - def _register(cls) -> None: # numpydoc ignore=SS06 + def _register(cls, jit_library: JitLibrary) -> None: # numpydoc ignore=SS06,PR01 """ Register upon first use instead of at import time, to avoid globally importing JAX. """ - if not cls._registered: + if jit_library in cls._registered: + return + + if jit_library is JitLibrary.jax: import jax jax.tree_util.register_pytree_node( @@ -522,11 +529,28 @@ def _register(cls) -> None: # numpydoc ignore=SS06 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 + elif jit_library is JitLibrary.torch: + import torch + + torch.utils._pytree.register_pytree_node( + cls, + lambda instance: pickle_flatten(instance, torch.Tensor), # pyright: ignore[reportUnknownArgumentType] + pickle_unflatten, + ) + cls._registered.add(jit_library) -def jax_autojit( - func: Callable[P, T], +class JitLibrary(Enum): + """ + Enum for JIT libraries compatible with `autojit`. + """ + + jax = auto() + torch = auto() + + +def autojit( + func: Callable[P, T], jit_library: JitLibrary ) -> Callable[P, T]: # numpydoc ignore=PR01,RT01,SS03 """ Wrap `func` with ``jax.jit``, with the following differences: @@ -569,19 +593,26 @@ def f(x: Array, y: float, plus: bool) -> Array: ``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 + if jit_library is JitLibrary.jax: + import jax + + jit_decorator = jax.jit + elif jit_library is JitLibrary.torch: + import torch + + jit_decorator = functools.partial(torch.compile, fullgraph=True) - @jax.jit # type: ignore[untyped-decorator] # pyright: ignore[reportUntypedFunctionDecorator] + @jit_decorator # type: ignore[untyped-decorator] # 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) + return _AutoJITWrapper(res, jit_library) @wraps(func) def outer(*args: P.args, **kwargs: P.kwargs) -> T: # numpydoc ignore=GL08 - wargs = _AutoJITWrapper((args, kwargs)) + wargs = _AutoJITWrapper((args, kwargs), jit_library) return inner(wargs).obj return outer diff --git a/src/array_api_extra/testing.py b/src/array_api_extra/testing.py index c5ee6eca..4e197600 100644 --- a/src/array_api_extra/testing.py +++ b/src/array_api_extra/testing.py @@ -15,8 +15,8 @@ from types import FunctionType, 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 +from ._lib._utils._compat import is_dask_namespace, is_jax_namespace, is_torch_namespace +from ._lib._utils._helpers import JitLibrary, autojit, pickle_flatten, pickle_unflatten __all__ = ["lazy_xp_function", "patch_lazy_xp_functions"] @@ -67,6 +67,7 @@ def lazy_xp_function( *, allow_dask_compute: bool | int = False, jax_jit: bool = True, + torch_compile: bool = True, static_argnums: Deprecated = DEPRECATED, static_argnames: Deprecated = DEPRECATED, ) -> None: # numpydoc ignore=GL07 @@ -222,6 +223,7 @@ def test_myfunc(xp): tags: dict[str, bool | int | type] = { "allow_dask_compute": allow_dask_compute, "jax_jit": jax_jit, + "torch_compile": torch_compile, } if isinstance(func, tuple): @@ -419,7 +421,19 @@ def iter_tagged() -> Iterator[ elif is_jax_namespace(xp): for target, name, attr, func, tags in iter_tagged(): if tags["jax_jit"]: - wrapped = jax_autojit(func) + wrapped = autojit(func, JitLibrary.jax) + # If we're dealing with a staticmethod or classmethod, make + # sure things stay that way. + if isinstance(attr, staticmethod): + wrapped = staticmethod(wrapped) + elif isinstance(attr, classmethod): + wrapped = classmethod(wrapped) + temp_setattr(target, name, wrapped) + + elif is_torch_namespace(xp): + for target, name, attr, func, tags in iter_tagged(): + if tags["torch_compile"]: + wrapped = autojit(func, JitLibrary.torch) # If we're dealing with a staticmethod or classmethod, make # sure things stay that way. if isinstance(attr, staticmethod): diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 74ad3a19..ad55d396 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -1,6 +1,7 @@ -from collections.abc import Iterator +import functools +from collections.abc import Callable, Iterator from types import ModuleType -from typing import TYPE_CHECKING, Generic, TypeVar, cast +from typing import TYPE_CHECKING, Generic, ParamSpec, Protocol, TypeVar, cast import numpy as np import pytest @@ -10,11 +11,12 @@ 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 ( + JitLibrary, asarrays, + autojit, capabilities, eager_shape, in1d, - jax_autojit, meta_namespace, ndindex, pickle_flatten, @@ -34,6 +36,7 @@ def override(func): return func +P = ParamSpec("P") T = TypeVar("T") # FIXME calls xp.unique_values without size @@ -359,41 +362,48 @@ def test_recursion(self): assert obj2[1] is obj2 -class TestJAXAutoJIT: - def test_basic(self, jnp: ModuleType): - @jax_autojit +class AutoJitFunc(Protocol): + def __call__( + self, + func: Callable[P, T], + ) -> Callable[P, T]: ... + + +class CheckAutoJIT: + def test_basic(self, autojit_func: AutoJitFunc, xp: ModuleType): + @autojit_func 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])) + xp_assert_equal(f(xp.asarray([1, 2])), xp.asarray([0, 1])) + xp_assert_equal(f(xp.asarray([1, 2]), False), xp.asarray([0, 1])) + xp_assert_equal(f(xp.asarray([1, 2]), True), xp.asarray([2, 3])) + xp_assert_equal(f(xp.asarray([1, 2]), 1), xp.asarray([2, 3])) # static argument is not an ArrayLike - xp_assert_equal(f(jnp.asarray([1, 2]), "foo"), jnp.asarray([2, 3])) + xp_assert_equal(f(xp.asarray([1, 2]), "foo"), xp.asarray([2, 3])) # static argument is not hashable, but serializable - xp_assert_equal(f(jnp.asarray([1, 2]), ["foo"]), jnp.asarray([2, 3])) + xp_assert_equal(f(xp.asarray([1, 2]), ["foo"]), xp.asarray([2, 3])) - def test_wrapper(self, jnp: ModuleType): - @jax_autojit + def test_wrapper(self, autojit_func: AutoJitFunc, xp: ModuleType): + @autojit_func def f(w: Wrapper[Array]) -> Wrapper[Array]: return Wrapper(w.x + 1) - inp = Wrapper(jnp.asarray([1, 2])) + inp = Wrapper(xp.asarray([1, 2])) out = f(inp).x - xp_assert_equal(out, jnp.asarray([2, 3])) + xp_assert_equal(out, xp.asarray([2, 3])) - def test_static_hashable(self, jnp: ModuleType): + def test_static_hashable(self, autojit_func: AutoJitFunc, xp: 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 + @autojit_func def f(x: object) -> object: return x @@ -402,17 +412,20 @@ def f(x: object) -> object: assert out is inp # Serializable opaque input contains non-serializable object plus array - winp = Wrapper((C(), jnp.asarray([1, 2]))) + winp = Wrapper((C(), xp.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): + def test_arraylikes_are_static( + self, + autojit_func: AutoJitFunc, + ): pytest.importorskip("jax") - @jax_autojit + @autojit_func def f(x: list[int]) -> list[int]: assert isinstance(x, list) assert x == [1, 2] @@ -422,15 +435,35 @@ def f(x: list[int]) -> list[int]: assert isinstance(out, list) assert out == [3, 4] - def test_iterators(self, jnp: ModuleType): - @jax_autojit + def test_iterators(self, autojit_func: AutoJitFunc, xp: ModuleType): + @autojit_func def f(x: Array) -> Iterator[Array]: return (x + i for i in range(2)) - inp = jnp.asarray([1, 2]) + inp = xp.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])) + xp_assert_equal(next(out), xp.asarray([1, 2])) + xp_assert_equal(next(out), xp.asarray([2, 3])) with pytest.raises(StopIteration): _ = next(out) + + +class TestJAXAutoJit(CheckAutoJIT): + @pytest.fixture + def xp(self, jnp: ModuleType) -> ModuleType: + return jnp + + @pytest.fixture + def autojit_func(self) -> AutoJitFunc: + return functools.partial(autojit, jit_library=JitLibrary.jax) + + +class TestTorchAutoJit(CheckAutoJIT): + @pytest.fixture + def xp(self, torch: ModuleType) -> ModuleType: + return torch + + @pytest.fixture + def autojit_func(self) -> AutoJitFunc: + return functools.partial(autojit, jit_library=JitLibrary.torch)