From 1906fd934635242808169626e008c12618a7913a Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Fri, 3 Apr 2026 12:56:14 +0100 Subject: [PATCH 1/4] ENH: testing.lazy_xp_function: `torch.compile` support --- pyproject.toml | 5 +- src/array_api_extra/_lib/_utils/_helpers.py | 66 +++++++++++----- src/array_api_extra/testing.py | 20 ++++- tests/test_helpers.py | 85 ++++++++++++++------- 4 files changed, 127 insertions(+), 49 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f0d54ef6..3b23a8e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -241,7 +241,10 @@ dask-core = ">=2026.3.0" # No distributed, tornado, etc. minversion = "6.0" addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] xfail_strict = true -filterwarnings = ["error"] +filterwarnings = [ + "error", + 'ignore:.*torch.jit.script_method.*', +] 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 4065c25f..f03c857e 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 ( @@ -47,12 +49,13 @@ def override(func): __all__ = [ + "JitLibrary", "asarrays", + "autojit", "capabilities", "eager_shape", "in1d", "is_python_scalar", - "jax_autojit", "mean", "meta_namespace", "pickle_flatten", @@ -515,7 +518,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. @@ -526,9 +529,9 @@ class _AutoJITWrapper(Generic[T]): # numpydoc ignore=PR01 _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): + 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: @@ -541,24 +544,42 @@ 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: - 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] - ) + if jit_library is JitLibrary.jax: + 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] + ) + 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 = True -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: @@ -601,19 +622,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 9f2b0d38..87077011 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) From 589aa81d0a359059b23db46836e70991dba9d50d Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Fri, 3 Apr 2026 13:30:23 +0100 Subject: [PATCH 2/4] avoid clashing registrations --- src/array_api_extra/_lib/_utils/_helpers.py | 40 +++++++++++---------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/array_api_extra/_lib/_utils/_helpers.py b/src/array_api_extra/_lib/_utils/_helpers.py index f03c857e..3fcac07d 100644 --- a/src/array_api_extra/_lib/_utils/_helpers.py +++ b/src/array_api_extra/_lib/_utils/_helpers.py @@ -526,7 +526,7 @@ 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, jit_library: JitLibrary) -> None: # numpydoc ignore=GL08 @@ -549,24 +549,26 @@ def _register(cls, jit_library: JitLibrary) -> None: # numpydoc ignore=SS06,PR0 Register upon first use instead of at import time, to avoid globally importing JAX. """ - if not cls._registered: - if jit_library is JitLibrary.jax: - 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] - ) - 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 = True + if jit_library in cls._registered: + return + + if jit_library is JitLibrary.jax: + 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] + ) + 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) class JitLibrary(Enum): From 86432ebec8df7be51334b89d6e7870313662e274 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Fri, 3 Apr 2026 13:41:24 +0100 Subject: [PATCH 3/4] ignore recompile limit for now --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 3b23a8e5..baff2fec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -244,6 +244,7 @@ xfail_strict = true filterwarnings = [ "error", 'ignore:.*torch.jit.script_method.*', + 'ignore:.*accumulated_recompile_limit reached.*', ] log_cli_level = "INFO" testpaths = ["tests"] From cc4a1061634bd80fceabe50a6b30e19831b271cd Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Fri, 3 Apr 2026 14:28:59 +0100 Subject: [PATCH 4/4] use dev compat --- pixi.lock | 179 ++++++++++++++++++++++++++++++------------------- pyproject.toml | 8 ++- 2 files changed, 116 insertions(+), 71 deletions(-) diff --git a/pixi.lock b/pixi.lock index 24bda755..e3cd4acb 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,12 +3,13 @@ environments: default: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda @@ -39,8 +40,8 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda @@ -66,8 +67,8 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda @@ -94,8 +95,8 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 win-64: - - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.14.0-pyhc364b38_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://prefix.dev/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - conda: https://prefix.dev/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda @@ -122,9 +123,12 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 dev: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: @@ -133,7 +137,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.11-h965158b_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.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/linux-64/astroid-4.0.4-py314hdafbbf9_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -317,12 +320,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.11-hd7b282e_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.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/osx-64/astroid-4.0.4-py314hee6578b_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -503,12 +506,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.11-hecf0d97_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.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/osx-arm64/astroid-4.0.4-py314h4dc9dd8_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -684,11 +687,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 win-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.11-he477eed_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.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/win-64/astroid-4.0.4-py314h86ab7b2_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -848,9 +851,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 dev-cuda: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: @@ -859,7 +865,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.11-h965158b_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.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/linux-64/astroid-4.0.4-py314hdafbbf9_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -1087,12 +1092,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.11-hd7b282e_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.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/osx-64/astroid-4.0.4-py314hee6578b_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -1273,12 +1278,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.11-hecf0d97_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.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/osx-arm64/astroid-4.0.4-py314h4dc9dd8_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -1454,11 +1459,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 win-64: - conda: https://prefix.dev/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.11-he477eed_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.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/win-64/astroid-4.0.4-py314h86ab7b2_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda @@ -1638,9 +1643,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 docs: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: @@ -1648,7 +1656,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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 @@ -1741,11 +1748,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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 @@ -1835,11 +1842,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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 @@ -1930,10 +1937,10 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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 @@ -2029,9 +2036,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 lint: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: @@ -2039,7 +2049,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://prefix.dev/conda-forge/linux-64/actionlint-1.7.11-h965158b_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.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/linux-64/astroid-4.0.4-py314hdafbbf9_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -2161,11 +2170,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/osx-64/actionlint-1.7.11-hd7b282e_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.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/osx-64/astroid-4.0.4-py314hee6578b_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -2284,11 +2293,11 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://prefix.dev/conda-forge/osx-arm64/actionlint-1.7.11-hecf0d97_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.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/osx-arm64/astroid-4.0.4-py314h4dc9dd8_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -2407,10 +2416,10 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 win-64: - conda: https://prefix.dev/conda-forge/win-64/actionlint-1.7.11-he477eed_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.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/win-64/astroid-4.0.4-py314h86ab7b2_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -2526,15 +2535,17 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -2588,9 +2599,9 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -2641,9 +2652,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/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -2695,8 +2706,8 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -2752,15 +2763,17 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-backends: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -2865,9 +2878,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -2969,9 +2982,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -3068,8 +3081,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -3156,15 +3169,17 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-backends-py311: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -3270,9 +3285,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -3372,9 +3387,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -3470,8 +3485,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -3557,15 +3572,17 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-cuda: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.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/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -3714,9 +3731,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -3818,9 +3835,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -3917,8 +3934,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -4025,15 +4042,17 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-cuda-py311: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.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/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda @@ -4183,9 +4202,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -4285,9 +4304,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -4383,8 +4402,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -4490,15 +4509,17 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-nogil: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -4565,9 +4586,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -4630,9 +4651,9 @@ environments: - 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-pyhcf101f3_1.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -4696,8 +4717,8 @@ environments: - 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-pyhcf101f3_1.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -4765,15 +4786,17 @@ environments: - 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-pyhcf101f3_1.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-numpy1: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -4830,9 +4853,9 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -4881,9 +4904,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -4933,8 +4956,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -4989,15 +5012,17 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-py311: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -5053,9 +5078,9 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -5104,9 +5129,9 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/osx-64/uv-0.10.4-h7e0bed3_0.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -5156,8 +5181,8 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/uv-0.10.4-h9b11cc2_0.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -5211,15 +5236,17 @@ 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 tests-py314: channels: - url: https://prefix.dev/conda-forge/ + indexes: + - https://pypi.org/simple options: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.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/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -5273,9 +5300,9 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-64: - conda: https://prefix.dev/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-64/bzip2-1.0.8-h500dc9f_9.conda @@ -5326,9 +5353,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/zstd-1.5.7-h3eecb57_6.conda - conda: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 osx-arm64: - conda: https://prefix.dev/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.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/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -5380,8 +5407,8 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 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/win-64/bzip2-1.0.8-h0ad9c76_9.conda @@ -5437,6 +5464,7 @@ environments: - 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: . + - pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 packages: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -5554,18 +5582,32 @@ 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 +- pypi: git+https://github.com/data-apis/array-api-compat?branch=lucascolley-patch-1#21bc5fa3efa94f401be8ffad237c1ba0a200bfd8 + 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' - conda: . name: array-api-extra version: 0.10.2.dev0 @@ -5574,7 +5616,6 @@ packages: variants: target_platform: noarch depends: - - array-api-compat - python >=3.11 - python * license: MIT diff --git a/pyproject.toml b/pyproject.toml index baff2fec..ae09fa94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ meson-python = "*" uv = "*" # interfaces with meson-python instead of pip [tool.pixi.package.run-dependencies] -array-api-compat = "*" +# array-api-compat = "*" ### workspace environments ### @@ -87,6 +87,9 @@ array-api-extra.path = "." [tool.pixi.dependencies] array-api-extra.path = "." +[tool.pixi.pypi-dependencies] +array-api-compat = { git = "https://github.com/data-apis/array-api-compat", branch = "lucascolley-patch-1" } + ### non-default feature definitions ### [tool.pixi.feature.lint.dependencies] @@ -244,7 +247,8 @@ xfail_strict = true filterwarnings = [ "error", 'ignore:.*torch.jit.script_method.*', - 'ignore:.*accumulated_recompile_limit reached.*', + 'ignore:.*recompile_limit.*', + 'ignore:.*Dynamo.*lru_cache.*', ] log_cli_level = "INFO" testpaths = ["tests"]