From d17fd2f11dc552aaf6ddec1f2495d889de2a1092 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Thu, 26 Dec 2024 15:24:25 +0000 Subject: [PATCH 01/21] ENH: `pad`: add delegation --- docs/api-reference.md | 1 + src/array_api_extra/__init__.py | 2 +- src/array_api_extra/_delegators.py | 59 +++++++++++++++++++ src/array_api_extra/_lib/__init__.py | 2 +- src/array_api_extra/_lib/_compat.py | 19 ------ src/array_api_extra/{ => _lib}/_funcs.py | 16 ++--- src/array_api_extra/_lib/_utils/__init__.py | 1 + src/array_api_extra/_lib/_utils/_compat.py | 31 ++++++++++ .../_lib/{ => _utils}/_compat.pyi | 4 ++ .../_lib/{_utils.py => _utils/_helpers.py} | 2 +- .../_lib/{ => _utils}/_typing.py | 0 tests/test_funcs.py | 2 +- tests/test_utils.py | 4 +- 13 files changed, 110 insertions(+), 33 deletions(-) create mode 100644 src/array_api_extra/_delegators.py delete mode 100644 src/array_api_extra/_lib/_compat.py rename src/array_api_extra/{ => _lib}/_funcs.py (98%) create mode 100644 src/array_api_extra/_lib/_utils/__init__.py create mode 100644 src/array_api_extra/_lib/_utils/_compat.py rename src/array_api_extra/_lib/{ => _utils}/_compat.pyi (70%) rename src/array_api_extra/_lib/{_utils.py => _utils/_helpers.py} (97%) rename src/array_api_extra/_lib/{ => _utils}/_typing.py (100%) diff --git a/docs/api-reference.md b/docs/api-reference.md index ffe68f24..457adef2 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -11,6 +11,7 @@ create_diagonal expand_dims kron + pad setdiff1d sinc ``` diff --git a/src/array_api_extra/__init__.py b/src/array_api_extra/__init__.py index 83808e00..eae343e0 100644 --- a/src/array_api_extra/__init__.py +++ b/src/array_api_extra/__init__.py @@ -1,6 +1,6 @@ """Extra array functions built on top of the array API standard.""" -from ._funcs import ( +from ._lib._funcs import ( atleast_nd, cov, create_diagonal, diff --git a/src/array_api_extra/_delegators.py b/src/array_api_extra/_delegators.py new file mode 100644 index 00000000..118a111a --- /dev/null +++ b/src/array_api_extra/_delegators.py @@ -0,0 +1,59 @@ +"""Delegators to existing implementations for Public API Functions.""" + +from ._lib import _funcs +from ._lib._utils._compat import ( + array_namespace, + is_cupy_namespace, + is_jax_namespace, + is_numpy_namespace, + is_torch_namespace, +) +from ._lib._utils._typing import Array, ModuleType + + +def pad( + x: Array, + pad_width: int, + mode: str = "constant", + *, + constant_values: bool | int | float | complex = 0, + xp: ModuleType | None = None, +) -> Array: + """ + Pad the input array. + + Parameters + ---------- + x : array + Input array. + pad_width : int + Pad the input array with this many elements from each side. + mode : str, optional + Only "constant" mode is currently supported, which pads with + the value passed to `constant_values`. + constant_values : python scalar, optional + Use this value to pad the input. Default is zero. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. + + Returns + ------- + array + The input array, + padded with ``pad_width`` elements equal to ``constant_values``. + """ + xp = array_namespace(x) if xp is None else xp + + value = constant_values + + # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 + if is_torch_namespace(xp): + pad_width = xp.asarray(pad_width) + pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) + pad_width = xp.flip(pad_width, axis=(0,)).flatten() + return xp.nn.functional.pad(x, (pad_width,), value=value) + + if is_numpy_namespace(x) or is_jax_namespace(xp) or is_cupy_namespace(xp): + return xp.pad(x, pad_width, mode, constant_values=value) + + return _funcs.pad(x, pad_width, mode, constant_values=value, xp=xp) diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py index d7a79525..b5e805b4 100644 --- a/src/array_api_extra/_lib/__init__.py +++ b/src/array_api_extra/_lib/__init__.py @@ -1 +1 @@ -"""Modules housing private functions.""" +"""Array-agnostic implementations for the public API.""" diff --git a/src/array_api_extra/_lib/_compat.py b/src/array_api_extra/_lib/_compat.py deleted file mode 100644 index de7a220d..00000000 --- a/src/array_api_extra/_lib/_compat.py +++ /dev/null @@ -1,19 +0,0 @@ -"""Acquire helpers from array-api-compat.""" -# Allow packages that vendor both `array-api-extra` and -# `array-api-compat` to override the import location - -try: - from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] - array_namespace, # pyright: ignore[reportUnknownVariableType] - device, # pyright: ignore[reportUnknownVariableType] - ) -except ImportError: - from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] - array_namespace, # pyright: ignore[reportUnknownVariableType] - device, - ) - -__all__ = [ - "array_namespace", - "device", -] diff --git a/src/array_api_extra/_funcs.py b/src/array_api_extra/_lib/_funcs.py similarity index 98% rename from src/array_api_extra/_funcs.py rename to src/array_api_extra/_lib/_funcs.py index 369319ed..13f43b2b 100644 --- a/src/array_api_extra/_funcs.py +++ b/src/array_api_extra/_lib/_funcs.py @@ -2,9 +2,9 @@ import warnings -from ._lib import _compat, _utils -from ._lib._compat import array_namespace -from ._lib._typing import Array, ModuleType +from ._utils import _compat, _helpers +from ._utils._compat import array_namespace +from ._utils._typing import Array, ModuleType __all__ = [ "atleast_nd", @@ -136,7 +136,7 @@ def cov(m: Array, /, *, xp: ModuleType | None = None) -> Array: m = atleast_nd(m, ndim=2, xp=xp) m = xp.astype(m, dtype) - avg = _utils.mean(m, axis=1, xp=xp) + avg = _helpers.mean(m, axis=1, xp=xp) fact = m.shape[1] - 1 if fact <= 0: @@ -449,7 +449,7 @@ def setdiff1d( else: x1 = xp.unique_values(x1) x2 = xp.unique_values(x2) - return x1[_utils.in1d(x1, x2, assume_unique=True, invert=True, xp=xp)] + return x1[_helpers.in1d(x1, x2, assume_unique=True, invert=True, xp=xp)] def sinc(x: Array, /, *, xp: ModuleType | None = None) -> Array: @@ -546,8 +546,8 @@ def pad( pad_width: int, mode: str = "constant", *, - xp: ModuleType | None = None, constant_values: bool | int | float | complex = 0, + xp: ModuleType | None = None, ) -> Array: """ Pad the input array. @@ -561,10 +561,10 @@ def pad( mode : str, optional Only "constant" mode is currently supported, which pads with the value passed to `constant_values`. - xp : array_namespace, optional - The standard-compatible namespace for `x`. Default: infer. constant_values : python scalar, optional Use this value to pad the input. Default is zero. + xp : array_namespace, optional + The standard-compatible namespace for `x`. Default: infer. Returns ------- diff --git a/src/array_api_extra/_lib/_utils/__init__.py b/src/array_api_extra/_lib/_utils/__init__.py new file mode 100644 index 00000000..3628c45f --- /dev/null +++ b/src/array_api_extra/_lib/_utils/__init__.py @@ -0,0 +1 @@ +"""Modules housing private utility functions.""" diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py new file mode 100644 index 00000000..9d50090b --- /dev/null +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -0,0 +1,31 @@ +"""Acquire helpers from array-api-compat.""" +# Allow packages that vendor both `array-api-extra` and +# `array-api-compat` to override the import location + +try: + from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] + array_namespace, # pyright: ignore[reportUnknownVariableType] + device, # pyright: ignore[reportUnknownVariableType] + is_cupy_namespace, # pyright: ignore[reportUnknownVariableType] + is_jax_namespace, # pyright: ignore[reportUnknownVariableType] + is_numpy_namespace, # pyright: ignore[reportUnknownVariableType] + is_torch_namespace, # pyright: ignore[reportUnknownVariableType] + ) +except ImportError: + from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] + array_namespace, # pyright: ignore[reportUnknownVariableType] + device, + is_cupy_namespace, # pyright: ignore[reportUnknownVariableType] + is_jax_namespace, # pyright: ignore[reportUnknownVariableType] + is_numpy_namespace, # pyright: ignore[reportUnknownVariableType] + is_torch_namespace, # pyright: ignore[reportUnknownVariableType] + ) + +__all__ = [ + "array_namespace", + "device", + "is_cupy_namespace", + "is_jax_namespace", + "is_numpy_namespace", + "is_torch_namespace", +] diff --git a/src/array_api_extra/_lib/_compat.pyi b/src/array_api_extra/_lib/_utils/_compat.pyi similarity index 70% rename from src/array_api_extra/_lib/_compat.pyi rename to src/array_api_extra/_lib/_utils/_compat.pyi index 2105708d..62a1ea49 100644 --- a/src/array_api_extra/_lib/_compat.pyi +++ b/src/array_api_extra/_lib/_utils/_compat.pyi @@ -15,3 +15,7 @@ def array_namespace( use_compat: bool | None = None, ) -> ArrayModule: ... # numpydoc ignore=GL08 def device(x: Array, /) -> Device: ... # numpydoc ignore=GL08 +def is_cupy_namespace(xp: ModuleType, /) -> bool: ... +def is_jax_namespace(xp: ModuleType, /) -> bool: ... +def is_numpy_namespace(xp: ModuleType, /) -> bool: ... +def is_torch_namespace(xp: ModuleType, /) -> bool: ... diff --git a/src/array_api_extra/_lib/_utils.py b/src/array_api_extra/_lib/_utils/_helpers.py similarity index 97% rename from src/array_api_extra/_lib/_utils.py rename to src/array_api_extra/_lib/_utils/_helpers.py index 523c21b8..4e79eba5 100644 --- a/src/array_api_extra/_lib/_utils.py +++ b/src/array_api_extra/_lib/_utils/_helpers.py @@ -1,4 +1,4 @@ -"""Utility functions used by `array_api_extra/_funcs.py`.""" +"""Helper functions used by `array_api_extra/_funcs.py`.""" from . import _compat from ._typing import Array, ModuleType diff --git a/src/array_api_extra/_lib/_typing.py b/src/array_api_extra/_lib/_utils/_typing.py similarity index 100% rename from src/array_api_extra/_lib/_typing.py rename to src/array_api_extra/_lib/_utils/_typing.py diff --git a/tests/test_funcs.py b/tests/test_funcs.py index 938a4f31..f6223397 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -17,7 +17,7 @@ setdiff1d, sinc, ) -from array_api_extra._lib._typing import Array +from array_api_extra._lib._utils._typing import Array class TestAtLeastND: diff --git a/tests/test_utils.py b/tests/test_utils.py index 1807627d..916c4c78 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -3,8 +3,8 @@ import pytest from numpy.testing import assert_array_equal -from array_api_extra._lib._typing import Array -from array_api_extra._lib._utils import in1d +from array_api_extra._lib._utils._helpers import in1d +from array_api_extra._lib._utils._typing import Array # some test coverage already provided by TestSetDiff1D From 38690bbce581c11275164f6d79e22e4372ea323b Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Thu, 26 Dec 2024 15:33:33 +0000 Subject: [PATCH 02/21] fix vendor test --- vendor_tests/test_vendor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor_tests/test_vendor.py b/vendor_tests/test_vendor.py index a248abc2..4343d766 100644 --- a/vendor_tests/test_vendor.py +++ b/vendor_tests/test_vendor.py @@ -19,6 +19,6 @@ def test_vendor_extra(): def test_vendor_extra_uses_vendor_compat(): from ._array_api_compat_vendor import array_namespace as n1 - from .array_api_extra._lib._compat import array_namespace as n2 + from .array_api_extra._lib._utils._compat import array_namespace as n2 assert n1 is n2 From d4d05b0abf1c629bb81fbef832f7b32cdb34ab68 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Thu, 26 Dec 2024 15:46:53 +0000 Subject: [PATCH 03/21] fixes --- src/array_api_extra/__init__.py | 2 +- src/array_api_extra/_delegators.py | 12 ++++--- src/array_api_extra/_lib/_funcs.py | 40 +++------------------- src/array_api_extra/_lib/_utils/_compat.py | 2 +- 4 files changed, 13 insertions(+), 43 deletions(-) diff --git a/src/array_api_extra/__init__.py b/src/array_api_extra/__init__.py index eae343e0..9006ca57 100644 --- a/src/array_api_extra/__init__.py +++ b/src/array_api_extra/__init__.py @@ -1,12 +1,12 @@ """Extra array functions built on top of the array API standard.""" +from ._delegators import pad from ._lib._funcs import ( atleast_nd, cov, create_diagonal, expand_dims, kron, - pad, setdiff1d, sinc, ) diff --git a/src/array_api_extra/_delegators.py b/src/array_api_extra/_delegators.py index 118a111a..6ca9f88b 100644 --- a/src/array_api_extra/_delegators.py +++ b/src/array_api_extra/_delegators.py @@ -44,16 +44,18 @@ def pad( """ xp = array_namespace(x) if xp is None else xp - value = constant_values + if mode != "constant": + msg = "Only `'constant'` mode is currently supported" + raise NotImplementedError(msg) # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 if is_torch_namespace(xp): pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() - return xp.nn.functional.pad(x, (pad_width,), value=value) + return xp.nn.functional.pad(x, (pad_width,), value=constant_values) - if is_numpy_namespace(x) or is_jax_namespace(xp) or is_cupy_namespace(xp): - return xp.pad(x, pad_width, mode, constant_values=value) + if is_numpy_namespace(xp) or is_jax_namespace(xp) or is_cupy_namespace(xp): + return xp.pad(x, pad_width, mode, constant_values=constant_values) - return _funcs.pad(x, pad_width, mode, constant_values=value, xp=xp) + return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp) diff --git a/src/array_api_extra/_lib/_funcs.py b/src/array_api_extra/_lib/_funcs.py index 13f43b2b..8f96cec9 100644 --- a/src/array_api_extra/_lib/_funcs.py +++ b/src/array_api_extra/_lib/_funcs.py @@ -544,46 +544,14 @@ def sinc(x: Array, /, *, xp: ModuleType | None = None) -> Array: def pad( x: Array, pad_width: int, - mode: str = "constant", *, constant_values: bool | int | float | complex = 0, - xp: ModuleType | None = None, -) -> Array: - """ - Pad the input array. - - Parameters - ---------- - x : array - Input array. - pad_width : int - Pad the input array with this many elements from each side. - mode : str, optional - Only "constant" mode is currently supported, which pads with - the value passed to `constant_values`. - constant_values : python scalar, optional - Use this value to pad the input. Default is zero. - xp : array_namespace, optional - The standard-compatible namespace for `x`. Default: infer. - - Returns - ------- - array - The input array, - padded with ``pad_width`` elements equal to ``constant_values``. - """ - if mode != "constant": - msg = "Only `'constant'` mode is currently supported" - raise NotImplementedError(msg) - - value = constant_values - - if xp is None: - xp = array_namespace(x) - + xp: ModuleType, +) -> Array: # numpydoc ignore=PR01,RT01 + """See docstring in `_delegators.py`.""" padded = xp.full( tuple(x + 2 * pad_width for x in x.shape), - fill_value=value, + fill_value=constant_values, dtype=x.dtype, device=_compat.device(x), ) diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py index 9d50090b..943a285c 100644 --- a/src/array_api_extra/_lib/_utils/_compat.py +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -3,7 +3,7 @@ # `array-api-compat` to override the import location try: - from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] + from ...._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] array_namespace, # pyright: ignore[reportUnknownVariableType] device, # pyright: ignore[reportUnknownVariableType] is_cupy_namespace, # pyright: ignore[reportUnknownVariableType] From 9dcb9e50cb71f9f4dd6f1f9b0c0941351b5aa98c Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Sun, 5 Jan 2025 22:16:33 +0000 Subject: [PATCH 04/21] finish merge --- src/array_api_extra/_lib/_compat.py | 25 ------------------ src/array_api_extra/_lib/_utils/_compat.py | 30 +++++++++++++--------- 2 files changed, 18 insertions(+), 37 deletions(-) delete mode 100644 src/array_api_extra/_lib/_compat.py diff --git a/src/array_api_extra/_lib/_compat.py b/src/array_api_extra/_lib/_compat.py deleted file mode 100644 index a24175da..00000000 --- a/src/array_api_extra/_lib/_compat.py +++ /dev/null @@ -1,25 +0,0 @@ -"""Acquire helpers from array-api-compat.""" -# Allow packages that vendor both `array-api-extra` and -# `array-api-compat` to override the import location - -try: - from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] - array_namespace, - device, - is_jax_array, - is_writeable_array, - ) -except ImportError: - from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] - array_namespace, - device, - is_jax_array, - is_writeable_array, - ) - -__all__ = [ - "array_namespace", - "device", - "is_jax_array", - "is_writeable_array", -] diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py index 943a285c..77610d79 100644 --- a/src/array_api_extra/_lib/_utils/_compat.py +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -3,29 +3,35 @@ # `array-api-compat` to override the import location try: - from ...._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] - array_namespace, # pyright: ignore[reportUnknownVariableType] - device, # pyright: ignore[reportUnknownVariableType] - is_cupy_namespace, # pyright: ignore[reportUnknownVariableType] - is_jax_namespace, # pyright: ignore[reportUnknownVariableType] - is_numpy_namespace, # pyright: ignore[reportUnknownVariableType] - is_torch_namespace, # pyright: ignore[reportUnknownVariableType] + from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] + array_namespace, + device, + is_cupy_namespace, + is_jax_array, + is_jax_namespace, + is_numpy_namespace, + is_torch_namespace, + is_writeable_array, ) except ImportError: from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] - array_namespace, # pyright: ignore[reportUnknownVariableType] + array_namespace, device, - is_cupy_namespace, # pyright: ignore[reportUnknownVariableType] - is_jax_namespace, # pyright: ignore[reportUnknownVariableType] - is_numpy_namespace, # pyright: ignore[reportUnknownVariableType] - is_torch_namespace, # pyright: ignore[reportUnknownVariableType] + is_cupy_namespace, + is_jax_array, + is_jax_namespace, + is_numpy_namespace, + is_torch_namespace, + is_writeable_array, ) __all__ = [ "array_namespace", "device", "is_cupy_namespace", + "is_jax_array", "is_jax_namespace", "is_numpy_namespace", "is_torch_namespace", + "is_writeable_array", ] From 5db1a935e95fd827e6dd9d644f78716d54d1ea4f Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Sun, 5 Jan 2025 22:23:02 +0000 Subject: [PATCH 05/21] clean up --- src/array_api_extra/__init__.py | 2 +- src/array_api_extra/{_delegators.py => _delegation.py} | 6 ++++-- src/array_api_extra/_lib/__init__.py | 2 +- src/array_api_extra/_lib/_funcs.py | 2 +- src/array_api_extra/_lib/_utils/_helpers.py | 4 +++- src/array_api_extra/_lib/_utils/_typing.py | 3 +-- tests/test_at.py | 2 +- 7 files changed, 12 insertions(+), 9 deletions(-) rename src/array_api_extra/{_delegators.py => _delegation.py} (93%) diff --git a/src/array_api_extra/__init__.py b/src/array_api_extra/__init__.py index 93c7fdce..9130184e 100644 --- a/src/array_api_extra/__init__.py +++ b/src/array_api_extra/__init__.py @@ -1,6 +1,6 @@ """Extra array functions built on top of the array API standard.""" -from ._delegators import pad +from ._delegation import pad from ._lib._funcs import ( at, atleast_nd, diff --git a/src/array_api_extra/_delegators.py b/src/array_api_extra/_delegation.py similarity index 93% rename from src/array_api_extra/_delegators.py rename to src/array_api_extra/_delegation.py index 6ca9f88b..77ba1534 100644 --- a/src/array_api_extra/_delegators.py +++ b/src/array_api_extra/_delegation.py @@ -1,4 +1,6 @@ -"""Delegators to existing implementations for Public API Functions.""" +"""Delegation to existing implementations for Public API Functions.""" + +from types import ModuleType from ._lib import _funcs from ._lib._utils._compat import ( @@ -8,7 +10,7 @@ is_numpy_namespace, is_torch_namespace, ) -from ._lib._utils._typing import Array, ModuleType +from ._lib._utils._typing import Array def pad( diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py index b5e805b4..d7b32033 100644 --- a/src/array_api_extra/_lib/__init__.py +++ b/src/array_api_extra/_lib/__init__.py @@ -1 +1 @@ -"""Array-agnostic implementations for the public API.""" +"""Internals of array-api-extra.""" diff --git a/src/array_api_extra/_lib/_funcs.py b/src/array_api_extra/_lib/_funcs.py index d4d532d0..451c5713 100644 --- a/src/array_api_extra/_lib/_funcs.py +++ b/src/array_api_extra/_lib/_funcs.py @@ -1,4 +1,4 @@ -"""Public API Functions.""" +"""Array-agnostic implementations for the public API.""" # https://github.com/scikit-learn/scikit-learn/pull/27910#issuecomment-2568023972 from __future__ import annotations diff --git a/src/array_api_extra/_lib/_utils/_helpers.py b/src/array_api_extra/_lib/_utils/_helpers.py index aaf0d0ce..c1199403 100644 --- a/src/array_api_extra/_lib/_utils/_helpers.py +++ b/src/array_api_extra/_lib/_utils/_helpers.py @@ -3,8 +3,10 @@ # https://github.com/scikit-learn/scikit-learn/pull/27910#issuecomment-2568023972 from __future__ import annotations +from types import ModuleType + from . import _compat -from ._typing import Array, ModuleType +from ._typing import Array __all__ = ["in1d", "mean"] diff --git a/src/array_api_extra/_lib/_utils/_typing.py b/src/array_api_extra/_lib/_utils/_typing.py index c612020f..83b51d04 100644 --- a/src/array_api_extra/_lib/_utils/_typing.py +++ b/src/array_api_extra/_lib/_utils/_typing.py @@ -1,6 +1,5 @@ """Static typing helpers.""" -from types import ModuleType from typing import Any # To be changed to a Protocol later (see data-apis/array-api#589) @@ -8,4 +7,4 @@ Device = Any # type: ignore[no-any-explicit] Index = Any # type: ignore[no-any-explicit] -__all__ = ["Array", "Device", "Index", "ModuleType"] +__all__ = ["Array", "Device", "Index"] diff --git a/tests/test_at.py b/tests/test_at.py index f50b9248..b269789c 100644 --- a/tests/test_at.py +++ b/tests/test_at.py @@ -13,7 +13,7 @@ ) from array_api_extra import at -from array_api_extra._lib._typing import Array +from array_api_extra._lib._utils._typing import Array all_libraries = ( "array_api_strict", From 486ebef359b4003d2c99e5627bc8679ea836340d Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Sun, 5 Jan 2025 23:31:52 +0000 Subject: [PATCH 06/21] use an enum --- pixi.lock | 698 +++++++++++---------- pyproject.toml | 6 +- src/array_api_extra/_delegation.py | 62 +- src/array_api_extra/_lib/_funcs.py | 2 +- src/array_api_extra/_lib/_utils/_compat.py | 2 +- 5 files changed, 417 insertions(+), 353 deletions(-) diff --git a/pixi.lock b/pixi.lock index 3b33cd02..94f7a270 100644 --- a/pixi.lock +++ b/pixi.lock @@ -67,11 +67,11 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h44a453e_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h3ee7192_6_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -88,9 +88,9 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.32.0-h804f50b_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.32.0-h0121fbd_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-hc2c308b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda @@ -100,9 +100,9 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_6_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda @@ -110,7 +110,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_h791ef64_107.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda @@ -125,7 +125,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lz4-4.3.3-py310h80b8a69_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.0-py310h5eaa309_0.conda - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda @@ -136,10 +136,10 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h97ab989_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda @@ -157,13 +157,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h61efdf7_107.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda @@ -248,11 +248,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h4a2f8bd_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h86344ea_6_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -268,9 +268,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.32.0-h8d8be31_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.32.0-h7081f7f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-hc70892a_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda @@ -278,15 +278,15 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_6_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.2-h8f0b736_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hf3ddf7c_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda @@ -310,10 +310,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.0.2-py310h530be0a_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-hbcee414_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda @@ -331,12 +331,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_hbae1486_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.14.1-py310hed58976_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda @@ -408,7 +408,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda @@ -457,7 +457,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/numba-0.60.0-py310h7793332_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.0.2-py310h1ec8c79_1.conda - conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda @@ -479,7 +479,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_2.conda + - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -544,7 +544,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py310h5851e9f_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -580,7 +580,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py310ha1ddda0_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -616,7 +616,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py310hb9d903e_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -670,7 +670,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -708,7 +708,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -746,7 +746,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -787,7 +787,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_102_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda @@ -805,7 +805,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_102_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda @@ -822,7 +822,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_102_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda @@ -848,7 +848,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda @@ -872,7 +872,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -914,7 +914,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -977,7 +977,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda @@ -1001,7 +1001,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -1038,7 +1038,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -1101,7 +1101,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda @@ -1124,7 +1124,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -1160,7 +1160,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda @@ -1264,7 +1264,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda @@ -1328,7 +1328,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda @@ -1390,7 +1390,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_1.conda @@ -1440,7 +1440,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -1459,7 +1459,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -1494,7 +1494,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda @@ -1541,7 +1541,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -1560,7 +1560,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -1590,7 +1590,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda @@ -1637,7 +1637,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -1655,7 +1655,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda @@ -1684,7 +1684,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda @@ -1765,7 +1765,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -1803,7 +1803,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -1841,7 +1841,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda @@ -1934,11 +1934,11 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h44a453e_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_6_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h3ee7192_6_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -1960,9 +1960,9 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.32.0-h804f50b_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.32.0-h0121fbd_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-hc2c308b_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda @@ -1973,9 +1973,9 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.6.85-hbd13f7d_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_6_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda @@ -1983,7 +1983,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_h791ef64_107.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda @@ -1998,7 +1998,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lz4-4.3.3-py310h80b8a69_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda + - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.0-py310h5eaa309_0.conda - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda @@ -2009,10 +2009,10 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h97ab989_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda @@ -2030,13 +2030,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h61efdf7_107.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_2.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda @@ -2121,11 +2121,11 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h4a2f8bd_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_6_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h86344ea_6_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -2141,9 +2141,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.32.0-h8d8be31_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.32.0-h7081f7f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-hc70892a_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda @@ -2151,15 +2151,15 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_6_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.2-h8f0b736_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hf3ddf7c_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda @@ -2183,10 +2183,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.0.2-py310h530be0a_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-hbcee414_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - conda: https://prefix.dev/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda @@ -2204,12 +2204,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_hbae1486_7.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.14.1-py310hed58976_2.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda @@ -2290,7 +2290,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_2.conda + - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda @@ -2345,7 +2345,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/numba-0.60.0-py310h7793332_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.0.2-py310h1ec8c79_1.conda - conda: https://prefix.dev/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda - - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda + - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda @@ -2367,7 +2367,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_2.conda + - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -2469,7 +2469,7 @@ packages: - pypi: . name: array-api-extra version: 0.5.1.dev0 - sha256: 08ad7e72202d8bde5a5e9025c0617e0652aa41fa82ca0469d3a11a09090f542a + sha256: 1073ab36cf18e457e2296c89b01cb700519d15944e86a4d0779a93a22d5a9d78 requires_dist: - array-api-compat>=1.10.0,<2 - furo>=2023.8.17 ; extra == 'docs' @@ -3277,17 +3277,17 @@ packages: - pkg:pypi/basedmypy?source=hash-mapping size: 1849478 timestamp: 1735780611775 -- conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.1-pyhd8ed1ab_0.conda - sha256: 992219d607c73d609f98d51dabf2ba928804dfe8e82f65985e93336cf490408c - md5: cb9eaa8b1a78e9d6fe465a408244328f +- conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda + sha256: c66b5e90af123465f3b34dca54e839aeb2ef443018a008bf5b460a4549d807cc + md5: 9e92cdee91e7ab02b4bddd7883087f4c depends: - nodejs-wheel >=20.13.1 - python >=3.9 license: MIT AND Apache-2.0 purls: - pkg:pypi/basedpyright?source=hash-mapping - size: 6719677 - timestamp: 1734599412702 + size: 7535687 + timestamp: 1736098739733 - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda sha256: 73badfd807775e6e171de10ab752fd4706fe9360f6fd0cfabd509c670d12951b md5: 234a48e49c3913330665c444824e6533 @@ -3646,6 +3646,7 @@ packages: depends: - python >=3.9 license: MIT + license_family: MIT purls: - pkg:pypi/charset-normalizer?source=hash-mapping size: 47438 @@ -4515,9 +4516,9 @@ packages: purls: [] size: 11857802 timestamp: 1720853997952 -- conda: https://prefix.dev/conda-forge/noarch/identify-2.6.4-pyhd8ed1ab_0.conda - sha256: 8acc3bfc7781ea1ddc8c013faff5106a0539e5671e31bee0d81011a1e2df20d8 - md5: 5ec16e7ad9bab911ff0696940953f505 +- conda: https://prefix.dev/conda-forge/noarch/identify-2.6.5-pyhd8ed1ab_0.conda + sha256: e8ea11b8e39a98a9c34efb5c21c3fca718e31e1f41fd9ae5f6918b8eb402da59 + md5: c1b0f663ff141265d1be1242259063f0 depends: - python >=3.9 - ukkonen @@ -4525,8 +4526,8 @@ packages: license_family: MIT purls: - pkg:pypi/identify?source=hash-mapping - size: 78570 - timestamp: 1735518781514 + size: 78415 + timestamp: 1736026672643 - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 md5: 39a4f67be3286c86d696df570b1201b7 @@ -4862,38 +4863,38 @@ packages: purls: [] size: 194365 timestamp: 1657977692274 -- conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_2.conda - sha256: 7003c0df066df8a48586a44c35684ff52dead2b6c0812bb22243a0680a5f37a8 - md5: 48099a5f37e331f5570abbf22b229961 +- conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + sha256: 143a586aa67d50622ef703de57b9d43f44945836d6568e0e7aa174bd8c45e0d4 + md5: 488f260ccda0afaf08acb286db439c2f depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 constrains: - - abseil-cpp =20240722.0 - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 license: Apache-2.0 license_family: Apache purls: [] - size: 1309370 - timestamp: 1735453911208 -- conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_2.conda - sha256: 12b85cd25bd82bb2255f329b37f974b3035a109d6345b6fb762b633c845014f9 - md5: d97db28b64404efd1413d5c52f79cdae + size: 1311599 + timestamp: 1736008414161 +- conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + sha256: 05fa5e5e908962b9c5aba95f962e2ca81d9599c4715aebe5e4ddb72b309d1770 + md5: c2d95bd7aa8d564a9bd7eca5e571a5b3 depends: - __osx >=11.0 - libcxx >=18 constrains: - - abseil-cpp =20240722.0 - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 license: Apache-2.0 license_family: Apache purls: [] - size: 1173485 - timestamp: 1735454097554 -- conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_2.conda - sha256: 974ae7f043ecf61d4f7ac4bf673dad813dc63f7659b6988dc883a29354a5d135 - md5: c87f25815ad1a0c974df4f134d52c419 + size: 1178260 + timestamp: 1736008642885 +- conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda + sha256: 846eacff96d36060fe5f7b351e4df6fafae56bf34cc6426497f12b5c13f317cf + md5: c57ee7f404d1aa84deb3e15852bec6fa depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 @@ -4904,12 +4905,12 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 1792490 - timestamp: 1735454161865 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h44a453e_6_cpu.conda - build_number: 6 - sha256: abf17e99b03356a9d6248e965826c1352ff01b00d3a62cc51393bb0744d72803 - md5: 2cf6d608d6e66506f69797d5c6944c35 + size: 1784929 + timestamp: 1736008778245 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda + build_number: 7 + sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f + md5: 08d4aff5ee6dee9a1b9ab13fca927697 depends: - __glibc >=2.17,<3.0.a0 - aws-crt-cpp >=0.29.7,<0.29.8.0a0 @@ -4926,8 +4927,8 @@ packages: - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - libgcc >=13 - - libgoogle-cloud >=2.32.0,<2.33.0a0 - - libgoogle-cloud-storage >=2.32.0,<2.33.0a0 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 - libre2-11 >=2024.7.2 - libstdcxx >=13 - libutf8proc >=2.9.0,<2.10.0a0 @@ -4938,18 +4939,18 @@ packages: - snappy >=1.2.1,<1.3.0a0 - zstd >=1.5.6,<1.6.0a0 constrains: - - parquet-cpp <0.0a0 - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu license: Apache-2.0 license_family: APACHE purls: [] - size: 8786061 - timestamp: 1733810643966 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h4a2f8bd_6_cpu.conda - build_number: 6 - sha256: 9ed3ea1bc15005c0df187268ef91407afaa908cf82f36f5acbbf50ac24d7f806 - md5: 835cdd84195b84dc34d128bd5d3580b9 + size: 8770256 + timestamp: 1735684696564 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda + build_number: 7 + sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e + md5: 4ba2173203f44bbf03d19aaba6ed07d3 depends: - __osx >=11.0 - aws-crt-cpp >=0.29.7,<0.29.8.0a0 @@ -4965,8 +4966,8 @@ packages: - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - libcxx >=18 - - libgoogle-cloud >=2.32.0,<2.33.0a0 - - libgoogle-cloud-storage >=2.32.0,<2.33.0a0 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 - libre2-11 >=2024.7.2 - libutf8proc >=2.9.0,<2.10.0a0 - libzlib >=1.3.1,<2.0a0 @@ -4976,14 +4977,14 @@ packages: - snappy >=1.2.1,<1.3.0a0 - zstd >=1.5.6,<1.6.0a0 constrains: - - apache-arrow-proc =*=cpu - arrow-cpp <0.0a0 - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu license: Apache-2.0 license_family: APACHE purls: [] - size: 5494797 - timestamp: 1733808145854 + size: 5506699 + timestamp: 1735682962976 - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda build_number: 7 sha256: b995701632370977fc7e20fe9d9222314f0d67fac0a2ea606685414d48d46588 @@ -5020,33 +5021,33 @@ packages: purls: [] size: 5303299 timestamp: 1735686839461 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_6_cpu.conda - build_number: 6 - sha256: a32fa1d71415afc02b5cf3cd4c0a6ec0af9e749308829cc65ff79689222ce479 - md5: 143f9288b64759a6427563f058c62f2b +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda + build_number: 7 + sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 + md5: 12d84228204c56fec6ed113288014d11 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h44a453e_6_cpu + - libarrow 18.1.0 hd595efa_7_cpu - libgcc >=13 - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 611745 - timestamp: 1733810698469 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_6_cpu.conda - build_number: 6 - sha256: e1cae46409927470439ef9ae93ed09b3493d0579501ca9ebfa79ded212ee98d8 - md5: 97fc01254714e1572624baefdd7cc898 + size: 612463 + timestamp: 1735684749868 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda + build_number: 7 + sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 + md5: 3eaf71fe987de13061db795e03bb1a1c depends: - __osx >=11.0 - - libarrow 18.1.0 h4a2f8bd_6_cpu + - libarrow 18.1.0 h0ad35bc_7_cpu - libcxx >=18 license: Apache-2.0 license_family: APACHE purls: [] - size: 483713 - timestamp: 1733808246880 + size: 485185 + timestamp: 1735683071232 - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda build_number: 7 sha256: e9f8e3f5bbef3251ca5a16a40ea6237af9f5d6372afc3adfeed11b9cc42caa41 @@ -5061,37 +5062,37 @@ packages: purls: [] size: 447461 timestamp: 1735686912086 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_6_cpu.conda - build_number: 6 - sha256: 74eeb178070002842d3ed721769399320e3a68a0843319eaf899a092a31def26 - md5: 20ca46a6bc714a6ab189d5b3f46e66d8 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda + build_number: 7 + sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e + md5: 0a81eb63d7cd150f598c752e86388d57 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h44a453e_6_cpu - - libarrow-acero 18.1.0 hcb10f89_6_cpu + - libarrow 18.1.0 hd595efa_7_cpu + - libarrow-acero 18.1.0 hcb10f89_7_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_6_cpu + - libparquet 18.1.0 h081d1f1_7_cpu - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 586627 - timestamp: 1733810842604 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_6_cpu.conda - build_number: 6 - sha256: 6eba942ce926419f74e6e0a7c3994a7d78ab6be47115e6bb70e02136554736be - md5: 0774276be6659aaa0007f1b0f6ee19b0 + size: 587497 + timestamp: 1735684880531 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda + build_number: 7 + sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b + md5: 97a2d3606682d94f7d73112e9ad684ae depends: - __osx >=11.0 - - libarrow 18.1.0 h4a2f8bd_6_cpu - - libarrow-acero 18.1.0 hf07054f_6_cpu + - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow-acero 18.1.0 hf07054f_7_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_6_cpu + - libparquet 18.1.0 h636d7b7_7_cpu license: Apache-2.0 license_family: APACHE purls: [] - size: 489948 - timestamp: 1733809328231 + size: 491237 + timestamp: 1735684688308 - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda build_number: 7 sha256: ee32fc23819e10c58e9be6620d2ad6153d8b326f84cbd134aafe6a60a5d00c88 @@ -5108,43 +5109,43 @@ packages: purls: [] size: 435269 timestamp: 1735687174564 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h3ee7192_6_cpu.conda - build_number: 6 - sha256: bda6728db019dd0c409b1996ad9ef6ab0bcee3a94dc66a8045e8c1049c566055 - md5: aa313b3168caf98d00b3753f5ba27650 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + build_number: 7 + sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf + md5: e128def53c133e8a23ac00cd4a479335 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h44a453e_6_cpu - - libarrow-acero 18.1.0 hcb10f89_6_cpu - - libarrow-dataset 18.1.0 hcb10f89_6_cpu + - libarrow 18.1.0 hd595efa_7_cpu + - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow-dataset 18.1.0 hcb10f89_7_cpu - libgcc >=13 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 519989 - timestamp: 1733810903274 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h86344ea_6_cpu.conda - build_number: 6 - sha256: bafd9ca59ebb5ad34b77aff316ef7b59c5fb1eb8a7b6a15de8dcbdf3ce37556d - md5: c1c162f5bf569cff8bed6def705a899f + size: 521861 + timestamp: 1735684940668 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + build_number: 7 + sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 + md5: 91927747173f65695e441346c7145e26 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h4a2f8bd_6_cpu - - libarrow-acero 18.1.0 hf07054f_6_cpu - - libarrow-dataset 18.1.0 hf07054f_6_cpu + - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow-dataset 18.1.0 hf07054f_7_cpu - libcxx >=18 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 451623 - timestamp: 1733809487176 + size: 452385 + timestamp: 1735684993831 - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_7_cpu.conda build_number: 7 sha256: 600548a5ef61ae4f3ea41fd2a02878fdf9a6ebf1223ff4f18c67a3063910513e @@ -5865,45 +5866,45 @@ packages: purls: [] size: 524249 timestamp: 1729089441747 -- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.32.0-h804f50b_0.conda - sha256: 126856add750013390dff664a3c3cd0f6f0cbbc683b0025a7ce9d1618968bc70 - md5: 3d96df4d6b1c88455e05b94ce8a14a53 +- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda + sha256: ae48ee93e2c226bf682f1e389c2fd51ae7bf77c2ce4b3aee069764f4be1c63f2 + md5: 61829a8dd5f4e2327e707572065bae41 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libcurl >=8.10.1,<9.0a0 + - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libgrpc >=1.67.1,<1.68.0a0 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 - openssl >=3.4.0,<4.0a0 constrains: - - libgoogle-cloud 2.32.0 *_0 + - libgoogle-cloud 2.33.0 *_1 license: Apache-2.0 license_family: Apache purls: [] - size: 1249557 - timestamp: 1733512191906 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.32.0-h8d8be31_0.conda - sha256: 722e49dbdc4486105d9f5b79a7ba4f9064602fe20c4015e97684c898ab8d3386 - md5: d7ab9e0eb7d55eac4943913073de61d7 + size: 1254656 + timestamp: 1735648569457 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + sha256: ce95aca02451694a4154c7770b6addf4fb859abf17912de6ec947da8469a56ce + md5: 91de1fbab8610974c0094c266bc63435 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libcurl >=8.10.1,<9.0a0 + - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libgrpc >=1.67.1,<1.68.0a0 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - openssl >=3.4.0,<4.0a0 constrains: - - libgoogle-cloud 2.32.0 *_0 + - libgoogle-cloud 2.33.0 *_1 license: Apache-2.0 license_family: Apache purls: [] - size: 876210 - timestamp: 1733512539476 + size: 877594 + timestamp: 1735648230965 - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-2.33.0-h95c5cb2_1.conda sha256: ff10a5e71ae42c2e29849468b2fe6785bc9bcb1e61db0a40158c6638c28fee90 md5: 3c63396fe52bd0649c72fec64b92f641 @@ -5923,41 +5924,41 @@ packages: purls: [] size: 14439 timestamp: 1735649066152 -- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.32.0-h0121fbd_0.conda - sha256: d1b53d17df38b52a4bc6d1fe6af0e611d6480ce10b0af570c84bd38c8aa83b91 - md5: 877a5ec0431a5af83bf0cd0522bfe661 +- conda: https://prefix.dev/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda + sha256: 41022523320ca8633a6c615710823e596efadb50f06d724e1a0c81e27994f257 + md5: b0cfb5044685a7a9fa43ae669124f0a0 depends: - __glibc >=2.17,<3.0.a0 - libabseil - libcrc32c >=1.1.2,<1.2.0a0 - libcurl - libgcc >=13 - - libgoogle-cloud 2.32.0 h804f50b_0 + - libgoogle-cloud 2.33.0 h2b5623c_1 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - openssl license: Apache-2.0 license_family: Apache purls: [] - size: 782108 - timestamp: 1733512329104 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.32.0-h7081f7f_0.conda - sha256: 609df2cf376ba66460f40143f835fc567cae4458df80705587cd2efd59c09bf1 - md5: 28f5ab5cf95170dfacd05d2bb301e573 + size: 784357 + timestamp: 1735648759177 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + sha256: c0524a22064bc17f5c037da09ba54cc9e767741ef645178e499750c44bec2531 + md5: af8e51382464d4cc2d0054977c40a732 depends: - __osx >=11.0 - libabseil - libcrc32c >=1.1.2,<1.2.0a0 - libcurl - libcxx >=18 - - libgoogle-cloud 2.32.0 h8d8be31_0 + - libgoogle-cloud 2.33.0 hdbe95d5_1 - libzlib >=1.3.1,<2.0a0 - openssl license: Apache-2.0 license_family: Apache purls: [] - size: 526895 - timestamp: 1733513644846 + size: 526963 + timestamp: 1735649222088 - conda: https://prefix.dev/conda-forge/win-64/libgoogle-cloud-storage-2.33.0-he5eb982_1.conda sha256: 76a916fba00a4bb395b85e7c2563d5ba325b04febb4f0e0066884ff39c54ec62 md5: 6ae574bba5f1294487936e5d5f0f4c11 @@ -5975,49 +5976,49 @@ packages: purls: [] size: 14336 timestamp: 1735649423845 -- conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-hc2c308b_0.conda - sha256: 870550c1faf524e9a695262cd4c31441b18ad542f16893bd3c5dbc93106705f7 - md5: 4606a4647bfe857e3cfe21ca12ac3afb +- conda: https://prefix.dev/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda + sha256: 014627485b3cf0ea18e04c0bab07be7fb98722a3aeeb58477acc7e1c3d2f911e + md5: 0c6497a760b99a926c7c12b74951a39c depends: - __glibc >=2.17,<3.0.a0 - - c-ares >=1.32.3,<2.0a0 + - c-ares >=1.34.4,<2.0a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - libgcc >=13 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libre2-11 >=2024.7.2 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - re2 constrains: - grpc-cpp =1.67.1 license: Apache-2.0 license_family: APACHE purls: [] - size: 7362336 - timestamp: 1730236333879 -- conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-hc70892a_0.conda - sha256: d2393fcd3c3584e5d58da4122f48bcf297567d2f6f14b3d1fcbd34fdd5040694 - md5: 624e27571fde34f8acc2afec840ac435 + size: 7792251 + timestamp: 1735584856826 +- conda: https://prefix.dev/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda + sha256: 630edf63981818ff590367cb95fddbed0f5a390464d0952c90ec81de899e84a6 + md5: 8a3cba079d6ac985e7d73c76a678fbb4 depends: - __osx >=11.0 - - c-ares >=1.34.2,<2.0a0 + - c-ares >=1.34.4,<2.0a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libcxx >=17 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libre2-11 >=2024.7.2 - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 + - openssl >=3.4.0,<4.0a0 - re2 constrains: - grpc-cpp =1.67.1 license: Apache-2.0 license_family: APACHE purls: [] - size: 4882208 - timestamp: 1730236299095 + size: 5311706 + timestamp: 1735585137716 - conda: https://prefix.dev/conda-forge/win-64/libgrpc-1.67.1-h0ac93cb_1.conda sha256: 4bf4b455fc8c56ac84001d394f93465c0cd42e78d8053a7c99668bba681b0973 md5: d41dfb3f07ea2f3687e9a2d7db31c506 @@ -6355,13 +6356,13 @@ packages: purls: [] size: 4165774 timestamp: 1730772154295 -- conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_6_cpu.conda - build_number: 6 - sha256: c691a59f1ebb6cedbf827f49f6cf414e08b0eec911f589133e6a8321e8ac701c - md5: 68788df49ce7480187eb6387f15b2b67 +- conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + build_number: 7 + sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 + md5: b97013ef4e1dd2cf11594f06d5b5e83a depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 h44a453e_6_cpu + - libarrow 18.1.0 hd595efa_7_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -6369,23 +6370,23 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 1204535 - timestamp: 1733810811118 -- conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_6_cpu.conda - build_number: 6 - sha256: 88c1e810bede65c54f1ebc51c14400f9e8cf0fc1f88a8c0a99210e2f5dfed582 - md5: 9b333c3a38e55f6c1b8733222e22f528 + size: 1205598 + timestamp: 1735684849150 +- conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + build_number: 7 + sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 + md5: 93de9ba66a20db32a2646d313794b3a8 depends: - __osx >=11.0 - - libarrow 18.1.0 h4a2f8bd_6_cpu + - libarrow 18.1.0 h0ad35bc_7_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 873134 - timestamp: 1733809271282 + size: 873251 + timestamp: 1735684582558 - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_7_cpu.conda build_number: 7 sha256: 5b901e940bf1a4e8d9a776c8435713b44e19ab45970acb80ac17e28fa0ce830f @@ -6435,9 +6436,9 @@ packages: purls: [] size: 348933 timestamp: 1726235196095 -- conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.2-h5b01275_0.conda - sha256: 5e8fd4aa00193c85602ce6101dd28fe31306dff85c9725048f6dc828dfa7c421 - md5: ab0bff36363bec94720275a681af8b83 +- conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda + sha256: 51125ebb8b7152e4a4e69fd2398489c4ec8473195c27cde3cbdf1cb6d18c5493 + md5: d8703f1ffe5a06356f06467f1d0b9464 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* @@ -6448,22 +6449,22 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 2945348 - timestamp: 1728565355702 -- conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.2-h8f0b736_0.conda - sha256: f732a6fa918428e2d5ba61e78fe11bb44a002cc8f6bb74c94ee5b1297fefcfd8 - md5: d2cb5991f2fb8eb079c80084435e9ce6 + size: 2960815 + timestamp: 1735577210663 +- conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda + sha256: f58a16b13ad53346903c833e266f83c3d770a43a432659b98710aed85ca885e7 + md5: bdbfea4cf45ae36652c6bbcc2e7ebe91 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libcxx >=17 + - libcxx >=18 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 2374965 - timestamp: 1728565334796 + size: 2271580 + timestamp: 1735576361997 - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda sha256: 78c1b917d50c0317579bd9a5714a6d544d69786fd3228a4201dc4e8710ef6348 md5: 3be9f2fb7dce19d66d5cf1003a34b0e1 @@ -6712,9 +6713,9 @@ packages: purls: [] size: 978878 timestamp: 1734399004259 -- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_h791ef64_107.conda - sha256: 9e3703bc75f8e05864e75554f1026716ed8e4eb649caf5d75f7fea9e9b52d41b - md5: 02fbdf715b5b6405fedf744facd72d14 +- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda + sha256: 96e04252aa1a64c8a50fcccb6e36a0f53f54b7eb9a61b2e1930191b67cce655c + md5: a070bb62918bea542fbb092c2abd7004 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 @@ -6722,23 +6723,23 @@ packages: - libabseil >=20240722.0,<20240723.0a0 - libcblas >=3.9.0,<4.0a0 - libgcc >=13 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 - libuv >=1.49.2,<2.0a0 - - mkl >=2023.2.0,<2024.0a0 + - mkl >=2024.2.2,<2025.0a0 - sleef >=3.7,<4.0a0 constrains: - - pytorch-gpu ==99999999 - - pytorch 2.5.1 cpu_mkl_*_107 - pytorch-cpu ==2.5.1 + - pytorch 2.5.1 cpu_mkl_*_108 + - pytorch-gpu ==99999999 license: BSD-3-Clause license_family: BSD purls: [] - size: 53345678 - timestamp: 1735189220828 -- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hf3ddf7c_7.conda - sha256: a06ddeb6b13b84f7fb2a9934962b390098b6194334ca880277193d9bcb227c7b - md5: 5deacd9c994edac6093bb8529eee85d7 + size: 53384470 + timestamp: 1736088424107 +- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda + sha256: 3e1306ca33285261dcb950ebba397dfe47ad36ae66d451746f107f5f9484fc12 + md5: fcd141fc3b6e5df95f175360c32c09eb depends: - __osx >=11.0 - libabseil * cxx17* @@ -6746,7 +6747,7 @@ packages: - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libuv >=1.49.2,<2.0a0 - llvm-openmp >=18.1.8 - numpy >=1.19,<3 @@ -6754,14 +6755,14 @@ packages: - python_abi 3.10.* *_cp310 - sleef >=3.7,<4.0a0 constrains: + - pytorch 2.5.1 cpu_generic_*_8 - pytorch-gpu ==99999999 - - pytorch 2.5.1 cpu_generic_*_7 - pytorch-cpu ==2.5.1 license: BSD-3-Clause license_family: BSD purls: [] - size: 28187542 - timestamp: 1735123792745 + size: 28266322 + timestamp: 1736093877602 - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda sha256: 9794e6388e780c3310d46f773bbc924d4053375c3fcdb07a704b57f4616db928 md5: 1e936bd23d737aac62a18e9a1e7f8b18 @@ -7334,19 +7335,19 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://prefix.dev/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda - sha256: 046073737bf73153b0c39e343b197cdf0b7867d336962369407465a17ea5979a - md5: 81d4a1a57d618adf0152db973d93b2ad +- conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda + sha256: 77906b0acead8f86b489da46f53916e624897338770dbf70b04b8f673c9273c1 + md5: 1459379c79dda834673426504d52b319 depends: - _openmp_mutex * *_llvm - _openmp_mutex >=4.5 - - llvm-openmp >=17.0.3 + - llvm-openmp >=19.1.2 - tbb 2021.* - license: LicenseRef-ProprietaryIntel + license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] - size: 164432797 - timestamp: 1698350676814 + size: 124718448 + timestamp: 1730231808335 - conda: https://prefix.dev/conda-forge/win-64/mkl-2024.2.2-h66d3029_15.conda sha256: 20e52b0389586d0b914a49cd286c5ccc9c47949bed60ca6df004d1d295f2edbd md5: 302dff2807f2927b3e9e0d19d60121de @@ -7945,9 +7946,9 @@ packages: purls: [] size: 240148 timestamp: 1733817010335 -- conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-hb9d3cd8_0.conda - sha256: 814b9dff1847b132c676ee6cc1a8cb2d427320779b93e1b6d76552275c128705 - md5: 23cc74f77eb99315c0360ec3533147a9 +- conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda + sha256: f62f6bca4a33ca5109b6d571b052a394d836956d21b25b7ffd03376abf7a481f + md5: 4ce6875f75469b2757a65e10a5d05e31 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates @@ -7955,22 +7956,22 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2947466 - timestamp: 1731377666602 -- conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - sha256: bd1d58ced46e75efa3b842c61642fd12272c69e9fe4d7261078bc082153a1d53 - md5: df307bbc703324722df0293c9ca2e418 + size: 2937158 + timestamp: 1736086387286 +- conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 + md5: 22f971393637480bda8c679f374d8861 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 2935176 - timestamp: 1731377561525 -- conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-h2466b09_0.conda - sha256: e03045a0837e01ff5c75e9273a572553e7522290799807f918c917a9826a6484 - md5: d0d805d9b5524a14efb51b3bff965e83 + size: 2936415 + timestamp: 1736086108693 +- conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda + sha256: 519a06eaab7c878fbebb8cab98ea4a4465eafb1e9ed8c6ce67226068a80a92f0 + md5: fb45308ba8bfe1abf1f4a27bad24a743 depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -7979,8 +7980,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 8491156 - timestamp: 1731379715927 + size: 8462960 + timestamp: 1736088436984 - conda: https://prefix.dev/conda-forge/noarch/opt-einsum-3.4.0-hd8ed1ab_1.conda sha256: 8db3d841c72f184de69e1237b900a2d79c742e30e8378973814543bf987b6bc6 md5: b94f689d8b1ce7dd212946e0331037ad @@ -8002,13 +8003,13 @@ packages: - pkg:pypi/opt-einsum?source=hash-mapping size: 62479 timestamp: 1733688053334 -- conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h97ab989_1.conda - sha256: 9de7e2746fde57c9b7f08ee87142014f6bb9b2d3a506839ea3e98baa99711576 - md5: 2f46eae652623114e112df13fae311cf +- conda: https://prefix.dev/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda + sha256: dff5cc8023905782c86b3459055f26d4b97890e403b0698477c9fed15d8669cc + md5: 4f6f9f3f80354ad185e276c120eac3f0 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 @@ -8018,15 +8019,15 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 1189462 - timestamp: 1733509801323 -- conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-hbcee414_1.conda - sha256: e5e72438a3cd967ebc774070e8c49500d2d6d4175f349400b327fee75d3bfc05 - md5: e808cf7819eaa1735c8790d7f9f482c7 + size: 1188881 + timestamp: 1735630209320 +- conda: https://prefix.dev/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda + sha256: cca330695f3bdb8c0e46350c29cd4af3345865544e36f1d7c9ba9190ad22f5f4 + md5: 24b1897c0d24afbb70704ba998793b78 depends: - __osx >=11.0 - libcxx >=18 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - snappy >=1.2.1,<1.3.0a0 @@ -8035,8 +8036,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 437391 - timestamp: 1733510118673 + size: 438520 + timestamp: 1735630624140 - conda: https://prefix.dev/conda-forge/win-64/orc-2.0.3-haf104fe_2.conda sha256: 35522ebcdd10f9d8600cbffa99efd59053bf2148965cfbb4575680e61c1d41dd md5: c8abacd8bdb242c9ba9c9a6c7ec09b01 @@ -8828,9 +8829,9 @@ packages: purls: [] size: 6716 timestamp: 1723823166911 -- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h61efdf7_107.conda - sha256: a7c7311dc097b79bbe313961a446eb40d10466a4bb9e954bde5a97fa86c063a5 - md5: 8c7e2eea5cb5a5f28bff495d2812195c +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda + sha256: ebd999d7d1612c87cdd15ecd893be759345712b7471937f9c917690210f419bb + md5: 9aec633b09fd455e84a637454068bfa8 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 @@ -8841,11 +8842,11 @@ packages: - libabseil >=20240722.0,<20240723.0a0 - libcblas >=3.9.0,<4.0a0 - libgcc >=13 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 - libtorch 2.5.1.* - libuv >=1.49.2,<2.0a0 - - mkl >=2023.2.0,<2024.0a0 + - mkl >=2024.2.2,<2025.0a0 - networkx - numpy >=1.19,<3 - python >=3.10,<3.11.0a0 @@ -8855,17 +8856,17 @@ packages: - sympy >=1.13.1,!=1.13.2 - typing_extensions constrains: - - pytorch-gpu ==99999999 - pytorch-cpu ==2.5.1 + - pytorch-gpu ==99999999 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 34363522 - timestamp: 1735190907555 -- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_hbae1486_7.conda - sha256: eeda4fd6288313c4c85d552af53fe6e01ad58b003c0237ecba3dda02b0d5847a - md5: 7137062a858e5988ba12271892db9158 + size: 34307765 + timestamp: 1736090964088 +- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda + sha256: 2f548d400e5014028b89339889768093730e0cf2e3e5d7c7ece9eddde646a0a2 + md5: 16985e88a59d007aa4d0a8b13f820e7c depends: - __osx >=11.0 - filelock @@ -8876,7 +8877,7 @@ packages: - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - liblapack >=3.9.0,<4.0a0 - - libprotobuf >=5.28.2,<5.28.3.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 - libtorch 2.5.1.* - libuv >=1.49.2,<2.0a0 - llvm-openmp >=18.1.8 @@ -8897,8 +8898,8 @@ packages: license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 22808644 - timestamp: 1735124463647 + size: 22573321 + timestamp: 1736094550662 - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 md5: 3eeeeb9e4827ace8c0c1419c85d590ad @@ -9093,9 +9094,9 @@ packages: purls: [] size: 355142 timestamp: 1734415467047 -- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_2.conda - sha256: a15008a51fd6b6dcaeb5563869ff0a8a015f1e0a8634a9d89d2c189eefbd7182 - md5: b5d548b2a7cf8d0c74fc6c4bf42d1ca5 +- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda + sha256: 6d3a2e3a942f8a2b383c9a94a0a06c34b75511adbe93158c20427b659d0cafae + md5: 5af85973838c580ab7f4f72008c8b237 depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -9114,11 +9115,11 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 16791594 - timestamp: 1733621553250 -- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.14.1-py310hed58976_2.conda - sha256: 58bdf102dec51c487125efa354504b1bfbcc522503ed73d8981a0ba4be84beed - md5: d4c01f1e543b31787b1e88dfe6598e76 + size: 18405029 + timestamp: 1736010557840 +- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda + sha256: 3a5f5a1f3a9b8c9e0fec02821638c8958de4a579f8637d5a66eeff682deb246d + md5: b1c91b7bfece72a5bf5f03dc0b7a3055 depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -9137,11 +9138,11 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 14414516 - timestamp: 1733621656037 -- conda: https://prefix.dev/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_2.conda - sha256: 761829fa9c91fdffff0ba5a1f56f7d4cc00bec71ca7fa06859dc7f5a98117273 - md5: 72a2a7c264a8b48d113111756c2bbbb4 + size: 15057534 + timestamp: 1736010232496 +- conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda + sha256: c06c0722006125176005e77a9d739d19eb4003c315b0092fc5358a9005f6abb7 + md5: eb011c11b5f60006cab90584b3a7053d depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -9158,8 +9159,8 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 15278855 - timestamp: 1733622652965 + size: 17162281 + timestamp: 1736011322833 - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 md5: fc80f7995e396cbaeabd23cf46c413dc @@ -9764,6 +9765,7 @@ packages: - platformdirs >=3.9.1,<5 - python >=3.9 license: MIT + license_family: MIT purls: - pkg:pypi/virtualenv?source=hash-mapping size: 3350367 diff --git a/pyproject.toml b/pyproject.toml index 58c02fab..35cbb39d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -177,7 +177,11 @@ tests-backends = ["py310", "tests", "backends", "cuda-backends"] minversion = "6.0" addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"] xfail_strict = true -filterwarnings = ["error"] +filterwarnings = [ + "error", + # TODO: when Python 3.10 is dropped, use `enum.member` in `_delegation.py` + "ignore:functools.partial will be a method descriptor:FutureWarning", +] log_cli_level = "INFO" testpaths = ["tests"] diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index 77ba1534..a39fc678 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -1,6 +1,9 @@ """Delegation to existing implementations for Public API Functions.""" +import functools +from enum import Enum from types import ModuleType +from typing import final from ._lib import _funcs from ._lib._utils._compat import ( @@ -12,6 +15,61 @@ ) from ._lib._utils._typing import Array +__all__ = ["pad"] + + +@final +class IsNamespace(Enum): + """Enum to access is_namespace functions as the backend.""" + + # TODO: when Python 3.10 is dropped, use `enum.member` + # https://stackoverflow.com/a/74302109 + CUPY = functools.partial(is_cupy_namespace) + JAX = functools.partial(is_jax_namespace) + NUMPY = functools.partial(is_numpy_namespace) + TORCH = functools.partial(is_torch_namespace) + + def __call__(self, xp: ModuleType) -> bool: + """ + Call the is_namespace function. + + Parameters + ---------- + xp : array_namespace + Array namespace to check. + + Returns + ------- + bool + ``True`` if xp matches the namespace, ``False`` otherwise. + """ + return self.value(xp) + + +CUPY = IsNamespace.CUPY +JAX = IsNamespace.JAX +NUMPY = IsNamespace.NUMPY +TORCH = IsNamespace.TORCH + + +def _delegate(xp: ModuleType, *backends: IsNamespace) -> bool: + """ + Check whether `xp` is one of the `backends` to delegate to. + + Parameters + ---------- + xp : array_namespace + Array namespace to check. + *backends : IsNamespace + Arbitrarily many backends (from the ``IsNamespace`` enum) to check. + + Returns + ------- + bool + ``True`` if `xp` matches one of the `backends`, ``False`` otherwise. + """ + return any(is_namespace(xp) for is_namespace in backends) + def pad( x: Array, @@ -51,13 +109,13 @@ def pad( raise NotImplementedError(msg) # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 - if is_torch_namespace(xp): + if _delegate(xp, TORCH): pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() return xp.nn.functional.pad(x, (pad_width,), value=constant_values) - if is_numpy_namespace(xp) or is_jax_namespace(xp) or is_cupy_namespace(xp): + if _delegate(xp, NUMPY, JAX, CUPY): return xp.pad(x, pad_width, mode, constant_values=constant_values) return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp) diff --git a/src/array_api_extra/_lib/_funcs.py b/src/array_api_extra/_lib/_funcs.py index 451c5713..b547d211 100644 --- a/src/array_api_extra/_lib/_funcs.py +++ b/src/array_api_extra/_lib/_funcs.py @@ -556,7 +556,7 @@ def pad( constant_values: bool | int | float | complex = 0, xp: ModuleType, ) -> Array: # numpydoc ignore=PR01,RT01 - """See docstring in `_delegators.py`.""" + """See docstring in `array_api_extra._delegation.py`.""" padded = xp.full( tuple(x + 2 * pad_width for x in x.shape), fill_value=constant_values, diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py index 77610d79..0ac87e2c 100644 --- a/src/array_api_extra/_lib/_utils/_compat.py +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -3,7 +3,7 @@ # `array-api-compat` to override the import location try: - from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] + from ...._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] array_namespace, device, is_cupy_namespace, From 6f72daf9314ac930a102a2be8b51d813676464c1 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Tue, 7 Jan 2025 22:25:06 +0000 Subject: [PATCH 07/21] update lockfile --- pixi.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pixi.lock b/pixi.lock index 5d3612f7..4dbde38b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -2469,7 +2469,7 @@ packages: - pypi: . name: array-api-extra version: 0.5.1.dev0 - sha256: d8083ec4ee363a390f2afd622df56756078ce3ba5f1f67e88867111a2d306b57 + sha256: d9d3497be732d1746f2506cfdf33f4901c35e010fb0810bf540b8d053a43d203 requires_dist: - array-api-compat>=1.10.0,<2 - furo>=2023.8.17 ; extra == 'docs' From a54357b64c15ed9235a798a256fae7e08891269e Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Tue, 7 Jan 2025 22:27:02 +0000 Subject: [PATCH 08/21] fix torch delegation --- src/array_api_extra/_delegation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index 8ecff02d..b8b6423a 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -117,7 +117,7 @@ def pad( pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() - return xp.nn.functional.pad(x, (pad_width,), value=constant_values) + return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) if _delegate(xp, NUMPY, JAX, CUPY): return xp.pad(x, pad_width, mode, constant_values=constant_values) From 71edc05b4c0361e61d23fc58c0a0f8e1bf42b6d9 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Tue, 7 Jan 2025 22:55:37 +0000 Subject: [PATCH 09/21] typing --- src/array_api_extra/_delegation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index b8b6423a..f819ca90 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -117,7 +117,7 @@ def pad( pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() - return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) + return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] if _delegate(xp, NUMPY, JAX, CUPY): return xp.pad(x, pad_width, mode, constant_values=constant_values) From 1e59fbdcb73c92c82517372dbc8632c61acad02b Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Tue, 14 Jan 2025 21:46:40 +0000 Subject: [PATCH 10/21] update lockfile --- pixi.lock | 931 +++++++++++++++++++++++++++++------------------------- 1 file changed, 492 insertions(+), 439 deletions(-) diff --git a/pixi.lock b/pixi.lock index 841d0f28..5785ac99 100644 --- a/pixi.lock +++ b/pixi.lock @@ -11,7 +11,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -20,10 +20,10 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -68,15 +68,15 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda @@ -94,14 +94,13 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda @@ -110,7 +109,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda @@ -126,12 +125,12 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.0-py310h5eaa309_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda @@ -157,14 +156,14 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda - conda: https://prefix.dev/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -193,7 +192,7 @@ environments: osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -202,10 +201,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -249,10 +248,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -260,7 +259,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -278,8 +277,8 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda @@ -299,12 +298,12 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-4.3.3-py310hedecf87_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.0-py310hfd37619_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/msgpack-python-1.1.0-py310h7306fd8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda @@ -336,8 +335,8 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda @@ -366,7 +365,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-h2219d47_15.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-cal-0.8.1-h099ea23_3.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-common-0.10.6-h2466b09_0.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-compression-0.3.0-h099ea23_5.conda @@ -375,10 +374,10 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/aws-c-io-0.15.3-hc5a9e45_5.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-mqtt-0.11.0-h2c94728_12.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-s3-0.7.7-h6a38c86_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.1-h099ea23_4.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda - conda: https://prefix.dev/conda-forge/win-64/aws-checksums-0.2.2-h099ea23_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.7-h0642867_7.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h5f5f9c4_4.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -409,10 +408,10 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_7_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - conda: https://prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda @@ -433,8 +432,8 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda - conda: https://prefix.dev/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_2.conda - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda @@ -479,7 +478,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda + - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -542,7 +541,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py310h5851e9f_0.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda @@ -568,7 +567,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda @@ -578,7 +577,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py310ha1ddda0_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda @@ -668,14 +667,14 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda @@ -694,7 +693,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda @@ -706,14 +705,14 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda @@ -751,7 +750,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda @@ -786,9 +785,9 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda @@ -804,9 +803,9 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libmpdec-4.0.0-h99b78c6_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda @@ -823,7 +822,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda - conda: https://prefix.dev/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda @@ -847,7 +846,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda @@ -908,10 +907,10 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.12.0-hf235a45_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -931,13 +930,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda @@ -976,7 +975,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda @@ -1011,7 +1010,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda @@ -1032,10 +1031,10 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.12.0-h02a13b7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -1055,13 +1054,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda @@ -1100,7 +1099,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda - conda: https://prefix.dev/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda @@ -1157,7 +1156,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.12.0-hfeaa22a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda @@ -1175,12 +1174,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda @@ -1263,13 +1262,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda @@ -1315,7 +1314,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda @@ -1327,13 +1326,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda @@ -1395,7 +1394,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://prefix.dev/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda @@ -1439,7 +1438,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/astroid-3.3.8-py313h78bf25f_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda @@ -1488,10 +1487,10 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/nodejs-22.12.0-hf235a45_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -1504,13 +1503,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda @@ -1540,7 +1539,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/astroid-3.3.8-py313h8f79df9_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/brotli-python-1.1.0-py313h3579c5c_2.conda @@ -1568,7 +1567,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda @@ -1584,10 +1583,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py313ha9b7d5b_1.conda - conda: https://prefix.dev/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/nodejs-22.12.0-h02a13b7_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -1600,13 +1599,13 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py313h20a7fcf_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda @@ -1636,7 +1635,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/astroid-3.3.8-py313hfa70ccb_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/basedtyping-0.1.10-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda @@ -1681,7 +1680,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://prefix.dev/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/nodejs-22.12.0-hfeaa22a_0.conda - - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda + - conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/numpy-2.2.1-py313hd65a2fa_0.conda - conda: https://prefix.dev/conda-forge/noarch/numpydoc-1.8.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda @@ -1694,12 +1693,12 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda - conda: https://prefix.dev/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda @@ -1763,14 +1762,14 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.2.1-py313hb30382a_0.conda - conda: https://prefix.dev/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda + - conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda @@ -1789,7 +1788,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda @@ -1801,14 +1800,14 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/numpy-2.2.1-py313ha4a2180_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - conda: https://prefix.dev/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda @@ -1846,7 +1845,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda + - conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/python_abi-3.13-5_cp313.conda - conda: https://prefix.dev/conda-forge/win-64/tbb-2021.13.0-h62715c5_1.conda - conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda @@ -1869,7 +1868,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -1878,10 +1877,10 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://prefix.dev/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -1935,15 +1934,15 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://prefix.dev/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.6.4.1-hbd13f7d_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.3.0.4-hbd13f7d_0.conda @@ -1966,15 +1965,14 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda - conda: https://prefix.dev/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda + - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda - conda: https://prefix.dev/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda - conda: https://prefix.dev/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libnvjitlink-12.6.85-hbd13f7d_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + - conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://prefix.dev/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda @@ -1983,7 +1981,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda + - conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://prefix.dev/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://prefix.dev/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda @@ -1999,12 +1997,12 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://prefix.dev/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mkl-2024.2.2-ha957f24_16.conda - - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.0-py310h5eaa309_0.conda + - conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - conda: https://prefix.dev/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://prefix.dev/conda-forge/linux-64/numba-0.60.0-py310h5dc88bb_0.conda - conda: https://prefix.dev/conda-forge/linux-64/numpy-2.0.2-py310hd6e36ab_1.conda @@ -2030,14 +2028,14 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda + - conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://prefix.dev/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - conda: https://prefix.dev/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://prefix.dev/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda - - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/sleef-3.7-h1b44611_2.conda - conda: https://prefix.dev/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda @@ -2066,7 +2064,7 @@ environments: osx-arm64: - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -2075,10 +2073,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -2122,10 +2120,10 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -2133,7 +2131,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -2151,8 +2149,8 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda @@ -2172,12 +2170,12 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-4.3.3-py310hedecf87_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/markupsafe-3.0.2-py310hc74094e_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.0-py310hfd37619_0.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpc-1.3.1-h8f1351a_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/mpfr-4.2.1-hb693164_3.conda - conda: https://prefix.dev/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/msgpack-python-1.1.0-py310h7306fd8_0.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - conda: https://prefix.dev/conda-forge/osx-arm64/numba-0.60.0-py310h0628f0e_0.conda @@ -2209,8 +2207,8 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda - - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda + - conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/sleef-3.7-h8391f65_2.conda - conda: https://prefix.dev/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda @@ -2239,7 +2237,7 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-h2219d47_15.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-cal-0.8.1-h099ea23_3.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-common-0.10.6-h2466b09_0.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-compression-0.3.0-h099ea23_5.conda @@ -2248,10 +2246,10 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/aws-c-io-0.15.3-hc5a9e45_5.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-mqtt-0.11.0-h2c94728_12.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-s3-0.7.7-h6a38c86_0.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.1-h099ea23_4.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda - conda: https://prefix.dev/conda-forge/win-64/aws-checksums-0.2.2-h099ea23_4.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.7-h0642867_7.conda - - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h5f5f9c4_4.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda + - conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda - conda: https://prefix.dev/conda-forge/noarch/bokeh-3.6.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -2291,10 +2289,10 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - conda: https://prefix.dev/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - conda: https://prefix.dev/conda-forge/win-64/libabseil-20240722.0-cxx17_h4eb7d71_4.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_7_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda - conda: https://prefix.dev/conda-forge/win-64/libblas-3.9.0-26_win64_mkl.conda - conda: https://prefix.dev/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - conda: https://prefix.dev/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda @@ -2321,8 +2319,8 @@ environments: - conda: https://prefix.dev/conda-forge/win-64/liblapack-3.9.0-26_win64_mkl.conda - conda: https://prefix.dev/conda-forge/win-64/liblzma-5.6.3-h2466b09_1.conda - conda: https://prefix.dev/conda-forge/win-64/libnvjitlink-12.6.85-he0c23c2_0.conda - - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_7_cpu.conda - - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda + - conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda - conda: https://prefix.dev/conda-forge/win-64/libprotobuf-5.28.3-h8309712_1.conda - conda: https://prefix.dev/conda-forge/win-64/libre2-11-2024.07.02-h4eb7d71_2.conda - conda: https://prefix.dev/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda @@ -2367,7 +2365,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://prefix.dev/conda-forge/win-64/re2-2024.07.02-haf4117d_2.conda - - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda + - conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/snappy-1.2.1-h500f7fa_1.conda - conda: https://prefix.dev/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 @@ -2545,54 +2543,54 @@ packages: - pkg:pypi/asttokens?source=hash-mapping size: 28206 timestamp: 1733250564754 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 license: Apache-2.0 license_family: Apache purls: [] - size: 107614 - timestamp: 1734021692519 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 107478 + timestamp: 1736592747413 +- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 license: Apache-2.0 license_family: Apache purls: [] - size: 92507 - timestamp: 1734021831330 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-h2219d47_15.conda - sha256: 77dd27caf1ce46c195f4ae9fae3e45cbb3b113c5418b2426db95038912178206 - md5: d8aa3355ad0360a42b5c57fedb1ad87e + size: 92547 + timestamp: 1736592866387 +- conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda + sha256: 7b071c929ce10670bcc0b62674cf32cddd82540520efb86e9401a7ec38d77378 + md5: 77b180b437094a263f059f91463c73b7 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache purls: [] - size: 102644 - timestamp: 1734022070771 + size: 102957 + timestamp: 1736592944745 - conda: https://prefix.dev/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -2924,9 +2922,9 @@ packages: purls: [] size: 109362 timestamp: 1734146367350 -- conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://prefix.dev/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -2934,22 +2932,22 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 56094 - timestamp: 1733994449690 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 55911 + timestamp: 1736535960724 +- conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 license: Apache-2.0 license_family: Apache purls: [] - size: 49664 - timestamp: 1733994553014 -- conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.1-h099ea23_4.conda - sha256: 41dc53b95bc426e591bf294aaa844d81acec7033ab4586c25b56b7ed4e2c7254 - md5: 9b209470fc80add34e822f4abeade3a3 + size: 49872 + timestamp: 1736536152332 +- conda: https://prefix.dev/conda-forge/win-64/aws-c-sdkutils-0.2.2-h099ea23_0.conda + sha256: af9cc0696b9fb60e7d0738b140b3d93efcf7f354e56c3034f459fc1651d53921 + md5: 6292ef653d6002edc721d2dc9356aa57 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - ucrt >=10.0.20348.0 @@ -2958,8 +2956,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 55419 - timestamp: 1733994591200 + size: 55109 + timestamp: 1736536467087 - conda: https://prefix.dev/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -2996,9 +2994,9 @@ packages: purls: [] size: 91909 timestamp: 1733994821424 -- conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://prefix.dev/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -3009,17 +3007,17 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 license: Apache-2.0 license_family: Apache purls: [] - size: 354703 - timestamp: 1734177883319 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 354328 + timestamp: 1736598991291 +- conda: https://prefix.dev/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -3030,16 +3028,16 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 license: Apache-2.0 license_family: Apache purls: [] - size: 236249 - timestamp: 1734178020924 -- conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.7-h0642867_7.conda - sha256: dfd3375bc197e5cd2221dcddd0d8d6c42344ad9ea7c22112adcc94ec0ba43994 - md5: ff9d226385f7b626b1db36120a1fa36b + size: 236269 + timestamp: 1736599024242 +- conda: https://prefix.dev/conda-forge/win-64/aws-crt-cpp-0.29.8-h703467b_1.conda + sha256: 26bf5f5c644d5ff00783dd06d493bfdb9c6c20b9e82f200dbc3ae60754ef1e7f + md5: b1d3b02bde39ffe4ffa61ce87d86abc2 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -3049,24 +3047,24 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache purls: [] - size: 262833 - timestamp: 1734178062584 -- conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 262760 + timestamp: 1736599347130 +- conda: https://prefix.dev/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -3075,17 +3073,17 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 3060561 - timestamp: 1734093737431 -- conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 3088636 + timestamp: 1736598504343 +- conda: https://prefix.dev/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -3093,16 +3091,16 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2826534 - timestamp: 1734094018287 -- conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h5f5f9c4_4.conda - sha256: 89d285f1f0878900150487686d7471a6f98563a03b9754f819e08a1c5df292c0 - md5: bf0f2ff816f47326f932c66badef8192 + size: 2824168 + timestamp: 1736598935034 +- conda: https://prefix.dev/conda-forge/win-64/aws-sdk-cpp-1.11.458-h41fbdec_5.conda + sha256: 97abee16a2171ae38934102a8056b3b2656cb7d711ae4563624fab1d47d77f22 + md5: ce1338d55e45416282f8b3921a2b2a54 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 @@ -3110,8 +3108,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2969711 - timestamp: 1734094848306 + size: 2948912 + timestamp: 1736599399277 - conda: https://prefix.dev/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -3263,9 +3261,9 @@ packages: - pkg:pypi/babel?source=hash-mapping size: 6551057 timestamp: 1733236466015 -- conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.0-pyhd8ed1ab_0.conda - sha256: 6338810705180c2b9f7827ad171e15849a47af70d705dc45dd0d8c4748f9bb30 - md5: 5fd36cc2d33dd4326daec09c8b926458 +- conda: https://prefix.dev/conda-forge/noarch/basedmypy-2.9.1-pyhd8ed1ab_0.conda + sha256: fd98c651dc13618bfc427b548c109b6526603fcf1dca197bdb561a2a5a956622 + md5: ad268761b26971fa1e3c2629f4e5db56 depends: - basedtyping >=0.0.3 - mypy_extensions >=1.0.0 @@ -3275,8 +3273,8 @@ packages: license: BSD-3-Clause AND Apache-2.0 purls: - pkg:pypi/basedmypy?source=hash-mapping - size: 1849478 - timestamp: 1735780611775 + size: 1850703 + timestamp: 1736398661625 - conda: https://prefix.dev/conda-forge/noarch/basedpyright-1.23.2-pyhd8ed1ab_0.conda sha256: c66b5e90af123465f3b34dca54e839aeb2ef443018a008bf5b460a4549d807cc md5: 9e92cdee91e7ab02b4bddd7883087f4c @@ -4907,13 +4905,13 @@ packages: purls: [] size: 1784929 timestamp: 1736008778245 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -4945,15 +4943,15 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 8770256 - timestamp: 1735684696564 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8801586 + timestamp: 1736610546493 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -4983,14 +4981,14 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 5506699 - timestamp: 1735682962976 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-he01b112_7_cpu.conda - build_number: 7 - sha256: b995701632370977fc7e20fe9d9222314f0d67fac0a2ea606685414d48d46588 - md5: 422fb7333012e97c2659c43558f1ed65 + size: 5497383 + timestamp: 1736608604724 +- conda: https://prefix.dev/conda-forge/win-64/libarrow-18.1.0-hb928929_8_cpu.conda + build_number: 8 + sha256: 9323e933e603b15bca2231ccda45849a80e7cf415c2872c194286e84e4a09290 + md5: 8d18b506794c1e583998a6d54054145b depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - bzip2 >=1.0.8,<2.0a0 - libabseil * cxx17* @@ -5013,149 +5011,149 @@ packages: - vc14_runtime >=14.42.34433 - zstd >=1.5.6,<1.6.0a0 constrains: - - apache-arrow-proc =*=cpu - arrow-cpp <0.0a0 - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu license: Apache-2.0 license_family: APACHE purls: [] - size: 5303299 - timestamp: 1735686839461 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5248568 + timestamp: 1736611659169 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 612463 - timestamp: 1735684749868 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 611558 + timestamp: 1736610592458 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 license: Apache-2.0 license_family: APACHE purls: [] - size: 485185 - timestamp: 1735683071232 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_7_cpu.conda - build_number: 7 - sha256: e9f8e3f5bbef3251ca5a16a40ea6237af9f5d6372afc3adfeed11b9cc42caa41 - md5: 6fd4586665caaf723fb8334eb40ae6da + size: 484442 + timestamp: 1736608695654 +- conda: https://prefix.dev/conda-forge/win-64/libarrow-acero-18.1.0-h7d8d6a5_8_cpu.conda + build_number: 8 + sha256: 43470dc8369d6ffab8699780c744ee75d04989641c0dc60afcf68db0213c4d5c + md5: 7e11f505623fda50814299f0c066b7e9 depends: - - libarrow 18.1.0 he01b112_7_cpu + - libarrow 18.1.0 hb928929_8_cpu - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.42.34433 license: Apache-2.0 license_family: APACHE purls: [] - size: 447461 - timestamp: 1735686912086 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 446853 + timestamp: 1736611713691 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 587497 - timestamp: 1735684880531 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 588032 + timestamp: 1736610711976 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu license: Apache-2.0 license_family: APACHE purls: [] - size: 491237 - timestamp: 1735684688308 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_7_cpu.conda - build_number: 7 - sha256: ee32fc23819e10c58e9be6620d2ad6153d8b326f84cbd134aafe6a60a5d00c88 - md5: ea567b6a24c3eb4f2b3ed8f8314cae99 + size: 491001 + timestamp: 1736609758514 +- conda: https://prefix.dev/conda-forge/win-64/libarrow-dataset-18.1.0-h7d8d6a5_8_cpu.conda + build_number: 8 + sha256: 34cd6707c28efbf5cabef6e57e19e0aedcb670ec559e95885704872c7b42077c + md5: b93e516a5a780f722e9ed9b3d12c9213 depends: - - libarrow 18.1.0 he01b112_7_cpu - - libarrow-acero 18.1.0 h7d8d6a5_7_cpu - - libparquet 18.1.0 ha850022_7_cpu + - libarrow 18.1.0 hb928929_8_cpu + - libarrow-acero 18.1.0 h7d8d6a5_8_cpu + - libparquet 18.1.0 ha850022_8_cpu - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.42.34433 license: Apache-2.0 license_family: APACHE purls: [] - size: 435269 - timestamp: 1735687174564 -- conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 434392 + timestamp: 1736611904846 +- conda: https://prefix.dev/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 license: Apache-2.0 license_family: APACHE purls: [] - size: 521861 - timestamp: 1735684940668 -- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 521707 + timestamp: 1736610765240 +- conda: https://prefix.dev/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 452385 - timestamp: 1735684993831 -- conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_7_cpu.conda - build_number: 7 - sha256: 600548a5ef61ae4f3ea41fd2a02878fdf9a6ebf1223ff4f18c67a3063910513e - md5: bdeede0a6516f2a1a7f29c2ff8e2885d + size: 452161 + timestamp: 1736609917123 +- conda: https://prefix.dev/conda-forge/win-64/libarrow-substrait-18.1.0-h3dbecdf_8_cpu.conda + build_number: 8 + sha256: 4ddb7ac8c2f7caf9a357696c0ab448884480d4cd7d72516dc9b63b0833c5abb2 + md5: f4b70d99b8e7e1334735a215205b686b depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 he01b112_7_cpu - - libarrow-acero 18.1.0 h7d8d6a5_7_cpu - - libarrow-dataset 18.1.0 h7d8d6a5_7_cpu + - libarrow 18.1.0 hb928929_8_cpu + - libarrow-acero 18.1.0 h7d8d6a5_8_cpu + - libarrow-dataset 18.1.0 h7d8d6a5_8_cpu - libprotobuf >=5.28.3,<5.28.4.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -5163,8 +5161,26 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 365444 - timestamp: 1735687288606 + size: 364597 + timestamp: 1736611987931 +- conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_mkl.conda + build_number: 26 + sha256: 11cc33993e1865e6caa3e05f117effb3f7cbacc632e5adc572ffd36b4fa47241 + md5: 60463d3ec26e0860bfc7fc1547e005ef + depends: + - mkl >=2024.2.2,<2025.0a0 + constrains: + - liblapack 3.9.0 26_linux64_mkl + - blas * mkl + - libcblas 3.9.0 26_linux64_mkl + - liblapacke 3.9.0 26_linux64_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 16766 + timestamp: 1734432542498 - conda: https://prefix.dev/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c @@ -5320,6 +5336,23 @@ packages: purls: [] size: 245929 timestamp: 1725268238259 +- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_mkl.conda + build_number: 26 + sha256: 23866eb509e5896b8fcf647e9cef8f0923d5bb378c0dd14b44b94abe1b24c4d7 + md5: 760c109bfe25518d6f9af51d7af8b9f3 + depends: + - libblas 3.9.0 26_linux64_mkl + constrains: + - liblapack 3.9.0 26_linux64_mkl + - blas * mkl + - liblapacke 3.9.0 26_linux64_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 16269 + timestamp: 1734432548754 - conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 9c74e536c9bc868e356ffd43f81c2cb398aec84b40fcadc312315b164a5500ee @@ -5575,16 +5608,16 @@ packages: purls: [] size: 122556064 timestamp: 1727811617684 -- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 md5: 8dfae1d2e74767e9ce36d5fa0d8605db @@ -6132,6 +6165,23 @@ packages: purls: [] size: 822966 timestamp: 1694475223854 +- conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_mkl.conda + build_number: 26 + sha256: 4ab8f00c325e1aacb6edc881b39c7c294adafc9d485cdde82979d1617fcd1e6f + md5: 84112111a50db59ca64153e0054fa73e + depends: + - libblas 3.9.0 26_linux64_mkl + constrains: + - blas * mkl + - libcblas 3.9.0 26_linux64_mkl + - liblapacke 3.9.0 26_linux64_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 16302 + timestamp: 1734432554916 - conda: https://prefix.dev/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: b76458c36331376911e0f98fa68109e02f4d5e5ebfffa79587ac69cef748bba1 @@ -6360,13 +6410,13 @@ packages: purls: [] size: 4165774 timestamp: 1730772154295 -- conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://prefix.dev/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -6374,29 +6424,29 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 1205598 - timestamp: 1735684849150 -- conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1207011 + timestamp: 1736610684584 +- conda: https://prefix.dev/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 873251 - timestamp: 1735684582558 -- conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_7_cpu.conda - build_number: 7 - sha256: 5b901e940bf1a4e8d9a776c8435713b44e19ab45970acb80ac17e28fa0ce830f - md5: c6ec79824da8a0cc92fc0f87dedcce12 + size: 873593 + timestamp: 1736609701839 +- conda: https://prefix.dev/conda-forge/win-64/libparquet-18.1.0-ha850022_8_cpu.conda + build_number: 8 + sha256: 3292cd6efa06a20362fdb212e64783f8c8df4fe4687ed01a4c4ad3f8843cbb92 + md5: fc609e4314b53f0980a6f09862bc92a2 depends: - - libarrow 18.1.0 he01b112_7_cpu + - libarrow 18.1.0 hb928929_8_cpu - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 - ucrt >=10.0.20348.0 @@ -6405,32 +6455,32 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 812887 - timestamp: 1735687117032 -- conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 - md5: f4cc49d7aa68316213e4b12be35308d1 + size: 812306 + timestamp: 1736611863777 +- conda: https://prefix.dev/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda + sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f + md5: 85cbdaacad93808395ac295b5667d25b depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 license: zlib-acknowledgement purls: [] - size: 290661 - timestamp: 1726234747153 -- conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda - sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 - md5: fb36e93f0ea6a6f5d2b99984f34b049e + size: 289426 + timestamp: 1736339058310 +- conda: https://prefix.dev/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda + sha256: ddcc81c049b32fb5eb3ac1f9a6d3a589c08325c8ec6f89eb912208b19330d68c + md5: d554c806d065b1763cb9e1cb1d25741d depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: zlib-acknowledgement purls: [] - size: 263385 - timestamp: 1726234714421 -- conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda - sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 - md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + size: 263151 + timestamp: 1736339184358 +- conda: https://prefix.dev/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda + sha256: e39c4f1bc8fee08f6a2eb4a88174d14c3a99dbb4850c98f3a87eb83b4dabbfca + md5: 41fb9e522ec6e0b34a6f23c98b07e1cf depends: - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 @@ -6438,8 +6488,8 @@ packages: - vc14_runtime >=14.29.30139 license: zlib-acknowledgement purls: [] - size: 348933 - timestamp: 1726235196095 + size: 348982 + timestamp: 1736339314098 - conda: https://prefix.dev/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda sha256: 51125ebb8b7152e4a4e69fd2398489c4ec8473195c27cde3cbdf1cb6d18c5493 md5: d8703f1ffe5a06356f06467f1d0b9464 @@ -6717,14 +6767,15 @@ packages: purls: [] size: 978878 timestamp: 1734399004259 -- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_he8ec5d7_108.conda - sha256: 96e04252aa1a64c8a50fcccb6e36a0f53f54b7eb9a61b2e1930191b67cce655c - md5: a070bb62918bea542fbb092c2abd7004 +- conda: https://prefix.dev/conda-forge/linux-64/libtorch-2.5.1-cpu_mkl_ha4c6a95_109.conda + sha256: 021dd776fc6482b31bcc27330d262f9a7df54bc3d199e9af2dfcc513d0320d2c + md5: 01be7598624eb315ee63c807dfe3f242 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 + - libblas * *mkl - libcblas >=3.9.0,<4.0a0 - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 @@ -6734,13 +6785,13 @@ packages: - sleef >=3.7,<4.0a0 constrains: - pytorch-cpu ==2.5.1 - - pytorch 2.5.1 cpu_mkl_*_108 - pytorch-gpu ==99999999 + - pytorch 2.5.1 cpu_mkl_*_109 license: BSD-3-Clause license_family: BSD purls: [] - size: 53384470 - timestamp: 1736088424107 + size: 53428361 + timestamp: 1736828519709 - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda sha256: 3e1306ca33285261dcb950ebba397dfe47ad36ae66d451746f107f5f9484fc12 md5: fcd141fc3b6e5df95f175360c32c09eb @@ -7363,9 +7414,9 @@ packages: purls: [] size: 103106385 timestamp: 1730232843711 -- conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.0-py310h5eaa309_0.conda - sha256: a4899aba9d82ed20d5c3fcbd8714d438e4000b0250c40816b95a5df64066f8dc - md5: 431846c13cf7b44ef56d6a6be8143727 +- conda: https://prefix.dev/conda-forge/linux-64/ml_dtypes-0.5.1-py310h5eaa309_0.conda + sha256: 80bb8601139177f4dab0d830993de9769bc6f1db13d275e5dbcf5d6568b6e337 + md5: 080f68e04d194abdba4a0a6a5178bf61 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -7376,14 +7427,14 @@ packages: license: MPL-2.0 AND Apache-2.0 purls: - pkg:pypi/ml-dtypes?source=hash-mapping - size: 285598 - timestamp: 1726376467402 -- conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.0-py310hfd37619_0.conda - sha256: 5bf79855b2275914899f69003c58ed06dd1832dc1f026975a8d17ffa5576047c - md5: ddb5c62069a0a72ddb076f63e99a9475 + size: 283388 + timestamp: 1736538961486 +- conda: https://prefix.dev/conda-forge/osx-arm64/ml_dtypes-0.5.1-py310h5936506_0.conda + sha256: a75c01da122fc1043e32adba9094922afc5f758ddaea47f5e56e0c111123294b + md5: 23c80623fc06fa0fa60237b14674cc69 depends: - __osx >=11.0 - - libcxx >=17 + - libcxx >=18 - numpy >=1.19,<3 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython @@ -7391,8 +7442,8 @@ packages: license: MPL-2.0 AND Apache-2.0 purls: - pkg:pypi/ml-dtypes?source=hash-mapping - size: 201729 - timestamp: 1726376542680 + size: 202079 + timestamp: 1736539243508 - conda: https://prefix.dev/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 md5: aa14b9a5196a6d8dd364164b7ce56acf @@ -7525,25 +7576,25 @@ packages: - pkg:pypi/myst-parser?source=hash-mapping size: 72901 timestamp: 1734472043484 -- conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://prefix.dev/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 license: X11 AND BSD-3-Clause purls: [] - size: 889086 - timestamp: 1724658547447 -- conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 894452 + timestamp: 1736683239706 +- conda: https://prefix.dev/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 license: X11 AND BSD-3-Clause purls: [] - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://prefix.dev/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda sha256: 39625cd0c9747fa5c46a9a90683b8997d8b9649881b3dc88336b13b7bdd60117 md5: fd40bf7f7f4bc4b647dc8512053d9873 @@ -7613,9 +7664,9 @@ packages: purls: [] size: 26256775 timestamp: 1734108943224 -- conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.12.0-pyhd8ed1ab_0.conda - sha256: fe6b3e568d1ac8dd41a02e3c3ab938cbc70a34a9f19f18894c0fb386a2e680e7 - md5: 0c0b2dd84667461e950e9297de8aceb9 +- conda: https://prefix.dev/conda-forge/noarch/nodejs-wheel-22.13.0-pyhd8ed1ab_0.conda + sha256: 6c36ec2f56105bd6bfe572b8ce7b6b4eb770a2c3db3655d99ead99c5a8b1a5d7 + md5: 17efc155ae707cdc9fe2970ebd74ee01 depends: - nodejs - python >=3.9 @@ -7623,8 +7674,8 @@ packages: license_family: MIT purls: - pkg:pypi/nodejs-wheel-binaries?source=hash-mapping - size: 11797 - timestamp: 1734322201782 + size: 11810 + timestamp: 1736400170073 - conda: https://prefix.dev/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b md5: 9a66894dfd07c4510beb6b3f9672ccc0 @@ -8518,6 +8569,7 @@ packages: depends: - python >=3.9 license: BSD-2-Clause + license_family: BSD purls: - pkg:pypi/pygments?source=hash-mapping size: 888600 @@ -8627,10 +8679,10 @@ packages: purls: [] size: 25199631 timestamp: 1733409331823 -- conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_103_cp313.conda - build_number: 103 - sha256: 365f9294ba2d36513f85085b95b705d4d02110a6d11ec4b683f5a10d37dde020 - md5: 899de8f76e198a36bc5a36132a6db887 +- conda: https://prefix.dev/conda-forge/linux-64/python-3.13.1-ha99a958_105_cp313.conda + build_number: 105 + sha256: d3eb7d0820cf0189103bba1e60e242ffc15fd2f727640ac3a10394b27adf3cca + md5: 34945787453ee52a8f8271c1d19af1e8 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -8651,8 +8703,8 @@ packages: - tzdata license: Python-2.0 purls: [] - size: 33262248 - timestamp: 1736273267565 + size: 33169840 + timestamp: 1736763984540 - conda: https://prefix.dev/conda-forge/osx-arm64/python-3.10.16-h870587a_1_cpython.conda build_number: 1 sha256: cd617b15712c4f9316b22c75459311ed106ccb0659c0bf36e281a9162b4e2d95 @@ -8675,10 +8727,10 @@ packages: purls: [] size: 12372048 timestamp: 1733408850559 -- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_103_cp313.conda - build_number: 103 - sha256: 0ebda5e85d5d37f0af1dae8ad500ef298a547ec790cdbfdb271ffbe4d2c56770 - md5: b43efdca6d96347894527844a4cdd5c8 +- conda: https://prefix.dev/conda-forge/osx-arm64/python-3.13.1-h4f43103_105_cp313.conda + build_number: 105 + sha256: 7d27cc8ef214abbdf7dd8a5d473e744f4bd9beb7293214a73c58e4895c2830b8 + md5: 11d916b508764b7d881dd5c75d222d6e depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 @@ -8696,8 +8748,8 @@ packages: - tzdata license: Python-2.0 purls: [] - size: 11727435 - timestamp: 1736271845822 + size: 12919840 + timestamp: 1736761931666 - conda: https://prefix.dev/conda-forge/win-64/python-3.10.16-h37870fc_1_cpython.conda build_number: 1 sha256: 3392db6a7a90864d3fd1ce281859a49e27ee68121b63eece2ae6f1dbb2a8aaf1 @@ -8720,10 +8772,10 @@ packages: purls: [] size: 16061214 timestamp: 1733408154785 -- conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_103_cp313.conda - build_number: 103 - sha256: 1517cbdf453557c7445c05b77c23da95a8b45586b270c6534f822c5b64bfeeaf - md5: 884ad80bf8454b8feff00b1f77a3dda9 +- conda: https://prefix.dev/conda-forge/win-64/python-3.13.1-h071d269_105_cp313.conda + build_number: 105 + sha256: de3bb832ff3982c993c6af15e6c45bb647159f25329caceed6f73fd4769c7628 + md5: 3ddb0531ecfb2e7274d471203e053d78 depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.6.4,<3.0a0 @@ -8741,8 +8793,8 @@ packages: - vc14_runtime >=14.29.30139 license: Python-2.0 purls: [] - size: 16841405 - timestamp: 1736270799704 + size: 16778758 + timestamp: 1736761341620 - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 md5: 5ba79d7c71f03c678c8ead841f347d6e @@ -8832,9 +8884,9 @@ packages: purls: [] size: 6716 timestamp: 1723823166911 -- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h27a6d43_108.conda - sha256: ebd999d7d1612c87cdd15ecd893be759345712b7471937f9c917690210f419bb - md5: 9aec633b09fd455e84a637454068bfa8 +- conda: https://prefix.dev/conda-forge/linux-64/pytorch-2.5.1-cpu_mkl_py310_h1c118fa_109.conda + sha256: c1fcbc00995e84ce54a48301b57c90101b99e6f230873765efdf70d8e52282db + md5: 7ae3aba3aed36993e7700b7c9e2b8cfb depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 @@ -8843,6 +8895,7 @@ packages: - jinja2 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 + - libblas * *mkl - libcblas >=3.9.0,<4.0a0 - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 @@ -8865,8 +8918,8 @@ packages: license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 34307765 - timestamp: 1736090964088 + size: 34033082 + timestamp: 1736831182336 - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda sha256: 2f548d400e5014028b89339889768093730e0cf2e3e5d7c7ece9eddde646a0a2 md5: 16985e88a59d007aa4d0a8b13f820e7c @@ -9097,9 +9150,9 @@ packages: purls: [] size: 355142 timestamp: 1734415467047 -- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.0-py310hfa6ec8c_0.conda - sha256: 6d3a2e3a942f8a2b383c9a94a0a06c34b75511adbe93158c20427b659d0cafae - md5: 5af85973838c580ab7f4f72008c8b237 +- conda: https://prefix.dev/conda-forge/linux-64/scipy-1.15.1-py310hfa6ec8c_0.conda + sha256: 9941f3bc9af712e60ce7b3910f9da0298f6b6f4c0b4fbc85f43b3db6342e21e4 + md5: a24baa04ee53ee3078ac1856887c3dea depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -9109,7 +9162,7 @@ packages: - libgfortran5 >=13.3.0 - liblapack >=3.9.0,<4.0a0 - libstdcxx >=13 - - numpy <2.3 + - numpy <2.5 - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 @@ -9118,11 +9171,11 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 18405029 - timestamp: 1736010557840 -- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.0-py310hd50a768_0.conda - sha256: 3a5f5a1f3a9b8c9e0fec02821638c8958de4a579f8637d5a66eeff682deb246d - md5: b1c91b7bfece72a5bf5f03dc0b7a3055 + size: 18436262 + timestamp: 1736618466062 +- conda: https://prefix.dev/conda-forge/osx-arm64/scipy-1.15.1-py310hd50a768_0.conda + sha256: 387cacd510792d7c7cf86b46374f2885b06f3b9505067cf9d9742a7034aa79bf + md5: 8e181e12d183fd4e44fc2f941cfe8f47 depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -9131,7 +9184,7 @@ packages: - libgfortran 5.* - libgfortran5 >=13.2.0 - liblapack >=3.9.0,<4.0a0 - - numpy <2.3 + - numpy <2.5 - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 @@ -9141,16 +9194,16 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 15057534 - timestamp: 1736010232496 -- conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.0-py310h164493e_0.conda - sha256: c06c0722006125176005e77a9d739d19eb4003c315b0092fc5358a9005f6abb7 - md5: eb011c11b5f60006cab90584b3a7053d + size: 14530851 + timestamp: 1736618488135 +- conda: https://prefix.dev/conda-forge/win-64/scipy-1.15.1-py310h164493e_0.conda + sha256: 3b2342ce7edd3b8391cf321da8cb2bc50ac7dca36b3444b91f82688f9d0671dc + md5: 2b18926b32f740cb76d7cdaf983c1e6f depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 - - numpy <2.3 + - numpy <2.5 - numpy >=1.19,<3 - numpy >=1.23.5 - python >=3.10,<3.11.0a0 @@ -9162,19 +9215,19 @@ packages: license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 17162281 - timestamp: 1736011322833 -- conda: https://prefix.dev/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda - sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 - md5: fc80f7995e396cbaeabd23cf46c413dc + size: 16956039 + timestamp: 1736619650525 +- conda: https://prefix.dev/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda + sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9 + md5: 8f28e299c11afdd79e0ec1e279dcdc52 depends: - python >=3.9 license: MIT license_family: MIT purls: - pkg:pypi/setuptools?source=hash-mapping - size: 774252 - timestamp: 1732632769210 + size: 775598 + timestamp: 1736512753595 - conda: https://prefix.dev/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db md5: a451d576819089b0d672f18768be0f65 From e0046c571fd46aa9a222fb7f425effafc31cf610 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 00:44:14 +0000 Subject: [PATCH 11/21] combine enums --- src/array_api_extra/_delegation.py | 55 +++----------------- src/array_api_extra/_lib/__init__.py | 4 ++ src/array_api_extra/_lib/_libraries.py | 69 ++++++++++++++++++++++++++ tests/conftest.py | 22 +------- tests/test_at.py | 3 +- tests/test_funcs.py | 3 +- tests/test_testing.py | 3 +- tests/test_utils.py | 3 +- 8 files changed, 85 insertions(+), 77 deletions(-) create mode 100644 src/array_api_extra/_lib/_libraries.py diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index f819ca90..b733269a 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -1,58 +1,15 @@ """Delegation to existing implementations for Public API Functions.""" -import functools -from enum import Enum from types import ModuleType -from typing import final -from ._lib import _funcs -from ._lib._utils._compat import ( - array_namespace, - is_cupy_namespace, - is_jax_namespace, - is_numpy_namespace, - is_torch_namespace, -) +from ._lib import Library, _funcs +from ._lib._utils._compat import array_namespace from ._lib._utils._typing import Array __all__ = ["pad"] -@final -class IsNamespace(Enum): - """Enum to access is_namespace functions as the backend.""" - - # TODO: when Python 3.10 is dropped, use `enum.member` - # https://stackoverflow.com/a/74302109 - CUPY = functools.partial(is_cupy_namespace) - JAX = functools.partial(is_jax_namespace) - NUMPY = functools.partial(is_numpy_namespace) - TORCH = functools.partial(is_torch_namespace) - - def __call__(self, xp: ModuleType) -> bool: - """ - Call the is_namespace function. - - Parameters - ---------- - xp : array_namespace - Array namespace to check. - - Returns - ------- - bool - ``True`` if xp matches the namespace, ``False`` otherwise. - """ - return self.value(xp) - - -CUPY = IsNamespace.CUPY -JAX = IsNamespace.JAX -NUMPY = IsNamespace.NUMPY -TORCH = IsNamespace.TORCH - - -def _delegate(xp: ModuleType, *backends: IsNamespace) -> bool: +def _delegate(xp: ModuleType, *backends: Library) -> bool: """ Check whether `xp` is one of the `backends` to delegate to. @@ -68,7 +25,7 @@ def _delegate(xp: ModuleType, *backends: IsNamespace) -> bool: bool ``True`` if `xp` matches one of the `backends`, ``False`` otherwise. """ - return any(is_namespace(xp) for is_namespace in backends) + return any(backend.is_namespace(xp) for backend in backends) def pad( @@ -113,13 +70,13 @@ def pad( raise NotImplementedError(msg) # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 - if _delegate(xp, TORCH): + if _delegate(xp, Library.TORCH): pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] - if _delegate(xp, NUMPY, JAX, CUPY): + if _delegate(xp, Library.NUMPY, Library.JAX_NUMPY, Library.CUPY): return xp.pad(x, pad_width, mode, constant_values=constant_values) return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp) diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py index d7b32033..2648332d 100644 --- a/src/array_api_extra/_lib/__init__.py +++ b/src/array_api_extra/_lib/__init__.py @@ -1 +1,5 @@ """Internals of array-api-extra.""" + +from ._libraries import Library + +__all__ = ["Library"] diff --git a/src/array_api_extra/_lib/_libraries.py b/src/array_api_extra/_lib/_libraries.py new file mode 100644 index 00000000..53ce001c --- /dev/null +++ b/src/array_api_extra/_lib/_libraries.py @@ -0,0 +1,69 @@ +"""Code specifying libraries array-api-extra interacts with.""" + +from collections.abc import Callable +from enum import Enum +from types import ModuleType +from typing import cast + +from ._utils import _compat + +__all__ = ["Library"] + + +class Library(Enum): # numpydoc ignore=PR01,PR02 + """ + All array library backends explicitly tested by array-api-extra. + + Parameters + ---------- + value : str + String describing the backend. + library_name : str + Name of the array library of the backend. + module_name : str + Name of the backend's module. + """ + + ARRAY_API_STRICT = "array_api_strict", "array_api_strict", "array_api_strict" + NUMPY = "numpy", "numpy", "numpy" + NUMPY_READONLY = "numpy_readonly", "numpy", "numpy" + CUPY = "cupy", "cupy", "cupy" + TORCH = "torch", "torch", "torch" + DASK_ARRAY = "dask.array", "dask", "dask.array" + SPARSE = "sparse", "pydata_sparse", "sparse" + JAX_NUMPY = "jax.numpy", "jax", "jax.numpy" + + def __new__( + cls, value: str, _library_name: str, _module_name: str + ): # numpydoc ignore=GL08 + obj = object.__new__(cls) + obj._value_ = value + return obj + + def __init__( + self, _value: str, library_name: str, module_name: str + ): # numpydoc ignore=GL08 + self.library_name = library_name + self.module_name = module_name + + def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 + """Pretty-print parameterized test names.""" + return cast(str, self.value) + + def is_namespace(self, xp: ModuleType) -> bool: + """ + Call the corresponding is_namespace function. + + Parameters + ---------- + xp : array_namespace + Array namespace to check. + + Returns + ------- + bool + ``True`` if xp matches the namespace, ``False`` otherwise. + """ + is_namespace_func = getattr(_compat, f"is_{self.library_name}_namespace") + is_namespace_func = cast(Callable[[ModuleType], bool], is_namespace_func) + return is_namespace_func(xp) diff --git a/tests/conftest.py b/tests/conftest.py index a6517c22..51b44b04 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,33 +1,16 @@ """Pytest fixtures.""" -from enum import Enum from types import ModuleType from typing import cast import pytest +from array_api_extra._lib import Library from array_api_extra._lib._utils._compat import array_namespace from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._typing import Device -class Library(Enum): - """All array libraries explicitly tested by array-api-extra.""" - - ARRAY_API_STRICT = "array_api_strict" - NUMPY = "numpy" - NUMPY_READONLY = "numpy_readonly" - CUPY = "cupy" - TORCH = "torch" - DASK_ARRAY = "dask.array" - SPARSE = "sparse" - JAX_NUMPY = "jax.numpy" - - def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 - """Pretty-print parameterized test names.""" - return self.value - - @pytest.fixture(params=tuple(Library)) def library(request: pytest.FixtureRequest) -> Library: # numpydoc ignore=PR01,RT03 """ @@ -60,8 +43,7 @@ def xp(library: Library) -> ModuleType: # numpydoc ignore=PR01,RT03 ------- The current array namespace. """ - name = "numpy" if library == Library.NUMPY_READONLY else library.value - xp = pytest.importorskip(name) + xp = pytest.importorskip(library.module_name) if library == Library.JAX_NUMPY: import jax # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] diff --git a/tests/test_at.py b/tests/test_at.py index 47ab68c1..52d40d54 100644 --- a/tests/test_at.py +++ b/tests/test_at.py @@ -12,12 +12,11 @@ ) from array_api_extra import at +from array_api_extra._lib import Library from array_api_extra._lib._funcs import _AtOp from array_api_extra._lib._testing import xp_assert_equal from array_api_extra._lib._utils._typing import Array -from .conftest import Library - @pytest.fixture def array(library: Library, xp: ModuleType) -> Array: diff --git a/tests/test_funcs.py b/tests/test_funcs.py index 2027f307..ed0e41ed 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -17,12 +17,11 @@ setdiff1d, sinc, ) +from array_api_extra._lib import Library from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._typing import Array, Device -from .conftest import Library - # mypy: disable-error-code=no-untyped-usage diff --git a/tests/test_testing.py b/tests/test_testing.py index 28b37d03..fd534e37 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,10 +1,9 @@ import numpy as np import pytest +from array_api_extra._lib import Library from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal -from .conftest import Library - # mypy: disable-error-code=no-any-decorated # pyright: reportUnknownParameterType=false,reportMissingParameterType=false diff --git a/tests/test_utils.py b/tests/test_utils.py index 4466e2df..e12fd16e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -3,13 +3,12 @@ import numpy as np import pytest +from array_api_extra._lib import Library from array_api_extra._lib._testing import xp_assert_equal from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._helpers import in1d from array_api_extra._lib._utils._typing import Array, Device -from .conftest import Library - # mypy: disable-error-code=no-untyped-usage From 2bd8205ccf7a9ab22cc6a09e879abd7a4aa99ac9 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 10:24:26 +0000 Subject: [PATCH 12/21] green --- pixi.lock | 40 ++++++++++++++- pyproject.toml | 1 + src/array_api_extra/_delegation.py | 8 +-- src/array_api_extra/_lib/__init__.py | 4 +- src/array_api_extra/_lib/_libraries.py | 69 -------------------------- tests/conftest.py | 22 ++++---- tests/test_at.py | 6 +-- tests/test_funcs.py | 28 +++++------ tests/test_testing.py | 12 ++--- tests/test_utils.py | 10 ++-- 10 files changed, 85 insertions(+), 115 deletions(-) delete mode 100644 src/array_api_extra/_lib/_libraries.py diff --git a/pixi.lock b/pixi.lock index 5785ac99..9d0a3389 100644 --- a/pixi.lock +++ b/pixi.lock @@ -9,6 +9,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda @@ -190,6 +191,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda @@ -363,6 +365,7 @@ environments: - pypi: . win-64: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda @@ -515,6 +518,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -557,6 +561,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -593,6 +598,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -641,6 +647,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -683,6 +690,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -721,6 +729,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -771,6 +780,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda @@ -794,6 +804,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda @@ -812,6 +823,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda @@ -840,6 +852,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -969,6 +982,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1093,6 +1107,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1225,6 +1240,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1295,6 +1311,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1359,6 +1376,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1433,6 +1451,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1534,6 +1553,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1630,6 +1650,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1736,6 +1757,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -1778,6 +1800,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -1816,6 +1839,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -1866,6 +1890,7 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda @@ -2062,6 +2087,7 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda @@ -2235,6 +2261,7 @@ environments: - pypi: . win-64: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda + - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda @@ -2442,6 +2469,17 @@ packages: purls: [] size: 49468 timestamp: 1718213032772 +- conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda + sha256: 969b3eecb27ad94cfa61256ec46b63bedf64005caa4fc550e195f8c0e9c28e91 + md5: b4aee7f46cb6804e46f6ff0b0256e782 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/aenum?source=hash-mapping + size: 105264 + timestamp: 1734358382625 - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda sha256: 6c4456a138919dae9edd3ac1a74b6fbe5fd66c05675f54df2f8ab8c8d0cc6cea md5: 1fd9696649f65fd6611fcdb4ffec738a @@ -2467,7 +2505,7 @@ packages: - pypi: . name: array-api-extra version: 0.5.1.dev0 - sha256: 4ec1183114a670b9c9b9b351826c962ad92ab470b1914a163e4a5ed02d0e04a0 + sha256: b1ad0e85422d0758a047455236680f845386243f0e8b15524c39100a61774968 requires_dist: - array-api-compat>=1.10.0,<2 - furo>=2023.8.17 ; extra == 'docs' diff --git a/pyproject.toml b/pyproject.toml index fee54b1a..1d4aaa17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,6 +64,7 @@ platforms = ["linux-64", "osx-arm64", "win-64"] [tool.pixi.dependencies] python = ">=3.10,<3.14" array-api-compat = ">=1.10.0,<2" +aenum = ">=3.1.15,<4" [tool.pixi.pypi-dependencies] array-api-extra = { path = ".", editable = true } diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index b733269a..db47ca45 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -2,14 +2,14 @@ from types import ModuleType -from ._lib import Library, _funcs +from ._lib import Backend, _funcs from ._lib._utils._compat import array_namespace from ._lib._utils._typing import Array __all__ = ["pad"] -def _delegate(xp: ModuleType, *backends: Library) -> bool: +def _delegate(xp: ModuleType, *backends: Backend) -> bool: """ Check whether `xp` is one of the `backends` to delegate to. @@ -70,13 +70,13 @@ def pad( raise NotImplementedError(msg) # https://github.com/pytorch/pytorch/blob/cf76c05b4dc629ac989d1fb8e789d4fac04a095a/torch/_numpy/_funcs_impl.py#L2045-L2056 - if _delegate(xp, Library.TORCH): + if _delegate(xp, Backend.TORCH): pad_width = xp.asarray(pad_width) pad_width = xp.broadcast_to(pad_width, (x.ndim, 2)) pad_width = xp.flip(pad_width, axis=(0,)).flatten() return xp.nn.functional.pad(x, tuple(pad_width), value=constant_values) # type: ignore[arg-type] # pyright: ignore[reportArgumentType] - if _delegate(xp, Library.NUMPY, Library.JAX_NUMPY, Library.CUPY): + if _delegate(xp, Backend.NUMPY, Backend.JAX_NUMPY, Backend.CUPY): return xp.pad(x, pad_width, mode, constant_values=constant_values) return _funcs.pad(x, pad_width, constant_values=constant_values, xp=xp) diff --git a/src/array_api_extra/_lib/__init__.py b/src/array_api_extra/_lib/__init__.py index 2648332d..b83d7e8c 100644 --- a/src/array_api_extra/_lib/__init__.py +++ b/src/array_api_extra/_lib/__init__.py @@ -1,5 +1,5 @@ """Internals of array-api-extra.""" -from ._libraries import Library +from ._backends import Backend -__all__ = ["Library"] +__all__ = ["Backend"] diff --git a/src/array_api_extra/_lib/_libraries.py b/src/array_api_extra/_lib/_libraries.py deleted file mode 100644 index 53ce001c..00000000 --- a/src/array_api_extra/_lib/_libraries.py +++ /dev/null @@ -1,69 +0,0 @@ -"""Code specifying libraries array-api-extra interacts with.""" - -from collections.abc import Callable -from enum import Enum -from types import ModuleType -from typing import cast - -from ._utils import _compat - -__all__ = ["Library"] - - -class Library(Enum): # numpydoc ignore=PR01,PR02 - """ - All array library backends explicitly tested by array-api-extra. - - Parameters - ---------- - value : str - String describing the backend. - library_name : str - Name of the array library of the backend. - module_name : str - Name of the backend's module. - """ - - ARRAY_API_STRICT = "array_api_strict", "array_api_strict", "array_api_strict" - NUMPY = "numpy", "numpy", "numpy" - NUMPY_READONLY = "numpy_readonly", "numpy", "numpy" - CUPY = "cupy", "cupy", "cupy" - TORCH = "torch", "torch", "torch" - DASK_ARRAY = "dask.array", "dask", "dask.array" - SPARSE = "sparse", "pydata_sparse", "sparse" - JAX_NUMPY = "jax.numpy", "jax", "jax.numpy" - - def __new__( - cls, value: str, _library_name: str, _module_name: str - ): # numpydoc ignore=GL08 - obj = object.__new__(cls) - obj._value_ = value - return obj - - def __init__( - self, _value: str, library_name: str, module_name: str - ): # numpydoc ignore=GL08 - self.library_name = library_name - self.module_name = module_name - - def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 - """Pretty-print parameterized test names.""" - return cast(str, self.value) - - def is_namespace(self, xp: ModuleType) -> bool: - """ - Call the corresponding is_namespace function. - - Parameters - ---------- - xp : array_namespace - Array namespace to check. - - Returns - ------- - bool - ``True`` if xp matches the namespace, ``False`` otherwise. - """ - is_namespace_func = getattr(_compat, f"is_{self.library_name}_namespace") - is_namespace_func = cast(Callable[[ModuleType], bool], is_namespace_func) - return is_namespace_func(xp) diff --git a/tests/conftest.py b/tests/conftest.py index 51b44b04..4b07c205 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,27 +5,27 @@ import pytest -from array_api_extra._lib import Library +from array_api_extra._lib import Backend from array_api_extra._lib._utils._compat import array_namespace from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._typing import Device -@pytest.fixture(params=tuple(Library)) -def library(request: pytest.FixtureRequest) -> Library: # numpydoc ignore=PR01,RT03 +@pytest.fixture(params=tuple(Backend)) +def library(request: pytest.FixtureRequest) -> Backend: # numpydoc ignore=PR01,RT03 """ Parameterized fixture that iterates on all libraries. Returns ------- - The current Library enum. + The current Backend enum. """ - elem = cast(Library, request.param) + elem = cast(Backend, request.param) for marker in request.node.iter_markers("skip_xp_backend"): skip_library = marker.kwargs.get("library") or marker.args[0] # type: ignore[no-untyped-usage] - if not isinstance(skip_library, Library): - msg = "argument of skip_xp_backend must be a Library enum" + if not isinstance(skip_library, Backend): + msg = "argument of skip_xp_backend must be a Backend enum" raise TypeError(msg) if skip_library == elem: reason = cast(str, marker.kwargs.get("reason", "skip_xp_backend")) @@ -35,7 +35,7 @@ def library(request: pytest.FixtureRequest) -> Library: # numpydoc ignore=PR01, @pytest.fixture -def xp(library: Library) -> ModuleType: # numpydoc ignore=PR01,RT03 +def xp(library: Backend) -> ModuleType: # numpydoc ignore=PR01,RT03 """ Parameterized fixture that iterates on all libraries. @@ -44,7 +44,7 @@ def xp(library: Library) -> ModuleType: # numpydoc ignore=PR01,RT03 The current array namespace. """ xp = pytest.importorskip(library.module_name) - if library == Library.JAX_NUMPY: + if library == Backend.JAX_NUMPY: import jax # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] jax.config.update("jax_enable_x64", True) @@ -55,14 +55,14 @@ def xp(library: Library) -> ModuleType: # numpydoc ignore=PR01,RT03 @pytest.fixture def device( - library: Library, xp: ModuleType + library: Backend, xp: ModuleType ) -> Device: # numpydoc ignore=PR01,RT01,RT03 """ Return a valid device for the backend. Where possible, return a device that is not the default one. """ - if library == Library.ARRAY_API_STRICT: + if library == Backend.ARRAY_API_STRICT: d = xp.Device("device1") assert get_device(xp.empty(0)) != d return d diff --git a/tests/test_at.py b/tests/test_at.py index 52d40d54..e9159712 100644 --- a/tests/test_at.py +++ b/tests/test_at.py @@ -12,16 +12,16 @@ ) from array_api_extra import at -from array_api_extra._lib import Library +from array_api_extra._lib import Backend from array_api_extra._lib._funcs import _AtOp from array_api_extra._lib._testing import xp_assert_equal from array_api_extra._lib._utils._typing import Array @pytest.fixture -def array(library: Library, xp: ModuleType) -> Array: +def array(library: Backend, xp: ModuleType) -> Array: x = xp.asarray([10.0, 20.0, 30.0]) - if library == Library.NUMPY_READONLY: + if library == Backend.NUMPY_READONLY: x.flags.writeable = False return x diff --git a/tests/test_funcs.py b/tests/test_funcs.py index ed0e41ed..fd1c106d 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -17,7 +17,7 @@ setdiff1d, sinc, ) -from array_api_extra._lib import Library +from array_api_extra._lib import Backend from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._typing import Array, Device @@ -25,7 +25,7 @@ # mypy: disable-error-code=no-untyped-usage -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no expand_dims") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no expand_dims") class TestAtLeastND: def test_0D(self, xp: ModuleType): x = xp.asarray(1.0) @@ -97,7 +97,7 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(y, x) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no isdtype") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") class TestCov: def test_basic(self, xp: ModuleType): xp_assert_close( @@ -143,7 +143,7 @@ def test_xp(self, xp: ModuleType): ) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no device") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") class TestCreateDiagonal: def test_1d(self, xp: ModuleType): # from np.diag tests @@ -189,10 +189,10 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(y, xp.asarray([[1, 0], [0, 2]])) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no sparse.expand_dims") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no sparse.expand_dims") class TestExpandDims: - @pytest.mark.skip_xp_backend(Library.DASK_ARRAY, reason="tuple index out of range") - @pytest.mark.skip_xp_backend(Library.TORCH, reason="tuple index out of range") + @pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="tuple index out of range") + @pytest.mark.skip_xp_backend(Backend.TORCH, reason="tuple index out of range") def test_functionality(self, xp: ModuleType): def _squeeze_all(b: Array) -> Array: """Mimics `np.squeeze(b)`. `xpx.squeeze`?""" @@ -250,7 +250,7 @@ def test_xp(self, xp: ModuleType): assert y.shape == (1, 1, 1, 3) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no sparse.expand_dims") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no sparse.expand_dims") class TestKron: def test_basic(self, xp: ModuleType): # Using 0-dimensional array @@ -329,11 +329,11 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(kron(a, b, xp=xp), k) -@pytest.mark.skip_xp_backend(Library.DASK_ARRAY, reason="no argsort") -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no device") +@pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="no argsort") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") class TestSetDiff1D: @pytest.mark.skip_xp_backend( - Library.TORCH, reason="index_select not implemented for uint32" + Backend.TORCH, reason="index_select not implemented for uint32" ) def test_setdiff1d(self, xp: ModuleType): x1 = xp.asarray([6, 5, 4, 7, 1, 2, 7, 4]) @@ -374,7 +374,7 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(actual, expected) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no isdtype") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") class TestSinc: def test_simple(self, xp: ModuleType): xp_assert_equal(sinc(xp.asarray(0.0)), xp.asarray(1.0)) @@ -401,7 +401,7 @@ def test_xp(self, xp: ModuleType): xp_assert_equal(sinc(xp.asarray(0.0), xp=xp), xp.asarray(1.0)) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no arange, no device") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no arange, no device") class TestPad: def test_simple(self, xp: ModuleType): a = xp.arange(1, 4) @@ -439,7 +439,7 @@ def test_tuple_width(self, xp: ModuleType): padded = pad(a, (1, 2)) assert padded.shape == (6, 7) - with pytest.raises(ValueError, match="expect a 2-tuple"): + with pytest.raises((ValueError, RuntimeError)): pad(a, [(1, 2, 3)]) # type: ignore[list-item] # pyright: ignore[reportArgumentType] def test_list_of_tuples_width(self, xp: ModuleType): diff --git a/tests/test_testing.py b/tests/test_testing.py index fd534e37..2dbc913a 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from array_api_extra._lib import Library +from array_api_extra._lib import Backend from array_api_extra._lib._testing import xp_assert_close, xp_assert_equal # mypy: disable-error-code=no-any-decorated @@ -14,7 +14,7 @@ xp_assert_equal, pytest.param( xp_assert_close, - marks=pytest.mark.skip_xp_backend(Library.SPARSE, reason="no isdtype"), + marks=pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype"), ), ], ) @@ -35,15 +35,15 @@ def test_assert_close_equal_basic(xp, func): func(xp.asarray([1, 2]), xp.asarray([1, 3]), err_msg="hello") -@pytest.mark.skip_xp_backend(Library.NUMPY) -@pytest.mark.skip_xp_backend(Library.NUMPY_READONLY) +@pytest.mark.skip_xp_backend(Backend.NUMPY) +@pytest.mark.skip_xp_backend(Backend.NUMPY_READONLY) @pytest.mark.parametrize( "func", [ xp_assert_equal, pytest.param( xp_assert_close, - marks=pytest.mark.skip_xp_backend(Library.SPARSE, reason="no isdtype"), + marks=pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype"), ), ], ) @@ -56,7 +56,7 @@ def test_assert_close_equal_namespace(xp, func): func(xp.asarray([0]), [0]) -@pytest.mark.skip_xp_backend(Library.SPARSE, reason="no isdtype") +@pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no isdtype") def test_assert_close_tolerance(xp): xp_assert_close(xp.asarray([100.0]), xp.asarray([102.0]), rtol=0.03) with pytest.raises(AssertionError): diff --git a/tests/test_utils.py b/tests/test_utils.py index e12fd16e..1960b3eb 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -3,7 +3,7 @@ import numpy as np import pytest -from array_api_extra._lib import Library +from array_api_extra._lib import Backend from array_api_extra._lib._testing import xp_assert_equal from array_api_extra._lib._utils._compat import device as get_device from array_api_extra._lib._utils._helpers import in1d @@ -13,8 +13,8 @@ class TestIn1D: - @pytest.mark.skip_xp_backend(Library.DASK_ARRAY, reason="no argsort") - @pytest.mark.skip_xp_backend(Library.SPARSE, reason="no unique_inverse, no device") + @pytest.mark.skip_xp_backend(Backend.DASK_ARRAY, reason="no argsort") + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no unique_inverse, no device") # cover both code paths @pytest.mark.parametrize("x2", [np.arange(9), np.arange(15)]) def test_no_invert_assume_unique(self, xp: ModuleType, x2: Array): @@ -24,13 +24,13 @@ def test_no_invert_assume_unique(self, xp: ModuleType, x2: Array): actual = in1d(x1, x2) xp_assert_equal(actual, expected) - @pytest.mark.skip_xp_backend(Library.SPARSE, reason="no device") + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no device") def test_device(self, xp: ModuleType, device: Device): x1 = xp.asarray([3, 8, 20], device=device) x2 = xp.asarray([2, 3, 4], device=device) assert get_device(in1d(x1, x2)) == device - @pytest.mark.skip_xp_backend(Library.SPARSE, reason="no arange, no device") + @pytest.mark.skip_xp_backend(Backend.SPARSE, reason="no arange, no device") def test_xp(self, xp: ModuleType): x1 = xp.asarray([1, 6]) x2 = xp.arange(5) From 15318419c6f0a3084328a883b1bbc241d1ae5d60 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 10:47:29 +0000 Subject: [PATCH 13/21] update lockfile --- pixi.lock | 76 +++++++-------------------- pyproject.toml | 1 - src/array_api_extra/_lib/_backends.py | 72 +++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 57 deletions(-) create mode 100644 src/array_api_extra/_lib/_backends.py diff --git a/pixi.lock b/pixi.lock index 9d0a3389..153a692b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -9,7 +9,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda @@ -191,7 +190,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda @@ -287,7 +285,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda @@ -332,7 +330,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda @@ -365,7 +363,6 @@ environments: - pypi: . win-64: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda @@ -518,7 +515,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -561,7 +557,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -598,7 +593,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -647,7 +641,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -690,7 +683,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -729,7 +721,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -780,7 +771,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://prefix.dev/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda @@ -804,7 +794,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://prefix.dev/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda @@ -823,7 +812,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://prefix.dev/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda @@ -852,7 +840,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -982,7 +969,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1107,7 +1093,6 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1240,7 +1225,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1311,7 +1295,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1376,7 +1359,6 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda @@ -1451,7 +1433,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1553,7 +1534,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1650,7 +1630,6 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-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.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda @@ -1757,7 +1736,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -1800,7 +1778,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -1839,7 +1816,6 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - pypi: . win-64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda @@ -1890,7 +1866,6 @@ environments: linux-64: - conda: https://prefix.dev/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://prefix.dev/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2 - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda @@ -2087,7 +2062,6 @@ environments: - conda: https://prefix.dev/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: . osx-arm64: - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda @@ -2183,7 +2157,7 @@ environments: - conda: https://prefix.dev/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda @@ -2228,7 +2202,7 @@ environments: - conda: https://prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda - conda: https://prefix.dev/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda + - conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - conda: https://prefix.dev/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda @@ -2261,7 +2235,6 @@ environments: - pypi: . win-64: - conda: https://prefix.dev/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-compat-1.10.0-pyhd8ed1ab_0.conda - conda: https://prefix.dev/conda-forge/noarch/array-api-strict-2.2-pyhd8ed1ab_1.conda - conda: https://prefix.dev/conda-forge/win-64/aws-c-auth-0.8.0-hd11252f_16.conda @@ -2469,17 +2442,6 @@ packages: purls: [] size: 49468 timestamp: 1718213032772 -- conda: https://prefix.dev/conda-forge/noarch/aenum-3.1.15-pyhd8ed1ab_1.conda - sha256: 969b3eecb27ad94cfa61256ec46b63bedf64005caa4fc550e195f8c0e9c28e91 - md5: b4aee7f46cb6804e46f6ff0b0256e782 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/aenum?source=hash-mapping - size: 105264 - timestamp: 1734358382625 - conda: https://prefix.dev/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda sha256: 6c4456a138919dae9edd3ac1a74b6fbe5fd66c05675f54df2f8ab8c8d0cc6cea md5: 1fd9696649f65fd6611fcdb4ffec738a @@ -2505,7 +2467,7 @@ packages: - pypi: . name: array-api-extra version: 0.5.1.dev0 - sha256: b1ad0e85422d0758a047455236680f845386243f0e8b15524c39100a61774968 + sha256: 4ec1183114a670b9c9b9b351826c962ad92ab470b1914a163e4a5ed02d0e04a0 requires_dist: - array-api-compat>=1.10.0,<2 - furo>=2023.8.17 ; extra == 'docs' @@ -6830,13 +6792,14 @@ packages: purls: [] size: 53428361 timestamp: 1736828519709 -- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_hb579fdd_8.conda - sha256: 3e1306ca33285261dcb950ebba397dfe47ad36ae66d451746f107f5f9484fc12 - md5: fcd141fc3b6e5df95f175360c32c09eb +- conda: https://prefix.dev/conda-forge/osx-arm64/libtorch-2.5.1-cpu_generic_h266890c_9.conda + sha256: bf5e9ce558b516988a41e1fbc73b368ef03b6f89a6b34edbde3203e131fcd455 + md5: ad9069009d26de3551e1053fa77a6355 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 + - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - libcxx >=18 - liblapack >=3.9.0,<4.0a0 @@ -6848,14 +6811,15 @@ packages: - python_abi 3.10.* *_cp310 - sleef >=3.7,<4.0a0 constrains: - - pytorch 2.5.1 cpu_generic_*_8 - - pytorch-gpu ==99999999 - pytorch-cpu ==2.5.1 + - pytorch 2.5.1 cpu_generic_*_9 + - openblas * openmp_* + - pytorch-gpu ==99999999 license: BSD-3-Clause license_family: BSD purls: [] - size: 28266322 - timestamp: 1736093877602 + size: 28341435 + timestamp: 1736896460239 - conda: https://prefix.dev/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda sha256: 9794e6388e780c3310d46f773bbc924d4053375c3fcdb07a704b57f4616db928 md5: 1e936bd23d737aac62a18e9a1e7f8b18 @@ -8958,9 +8922,9 @@ packages: - pkg:pypi/torch?source=hash-mapping size: 34033082 timestamp: 1736831182336 -- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_8.conda - sha256: 2f548d400e5014028b89339889768093730e0cf2e3e5d7c7ece9eddde646a0a2 - md5: 16985e88a59d007aa4d0a8b13f820e7c +- conda: https://prefix.dev/conda-forge/osx-arm64/pytorch-2.5.1-cpu_generic_py310_h3256795_9.conda + sha256: c2f85319da078b86e81523b6a92c5761342123ed5b7bf8828082e34eab59cbc4 + md5: 5472d797227aa217036da7ec899358c5 depends: - __osx >=11.0 - filelock @@ -8986,14 +8950,14 @@ packages: - sympy >=1.13.1,!=1.13.2 - typing_extensions constrains: - - pytorch-gpu ==99999999 - pytorch-cpu ==2.5.1 + - pytorch-gpu ==99999999 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 22573321 - timestamp: 1736094550662 + size: 22861302 + timestamp: 1736897435420 - conda: https://prefix.dev/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 md5: 3eeeeb9e4827ace8c0c1419c85d590ad diff --git a/pyproject.toml b/pyproject.toml index 1d4aaa17..fee54b1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,6 @@ platforms = ["linux-64", "osx-arm64", "win-64"] [tool.pixi.dependencies] python = ">=3.10,<3.14" array-api-compat = ">=1.10.0,<2" -aenum = ">=3.1.15,<4" [tool.pixi.pypi-dependencies] array-api-extra = { path = ".", editable = true } diff --git a/src/array_api_extra/_lib/_backends.py b/src/array_api_extra/_lib/_backends.py new file mode 100644 index 00000000..7b3c6f38 --- /dev/null +++ b/src/array_api_extra/_lib/_backends.py @@ -0,0 +1,72 @@ +"""Code specifying libraries array-api-extra interacts with.""" + +from collections.abc import Callable +from enum import Enum +from types import ModuleType +from typing import cast + +from ._utils import _compat + +__all__ = ["Backend"] + + +class Backend(Enum): # numpydoc ignore=PR01,PR02 # type: ignore[no-subclass-any] + """ + All array library backends explicitly tested by array-api-extra. + + Parameters + ---------- + value : str + String describing the backend. + library_name : str + Name of the array library of the backend. + module_name : str + Name of the backend's module. + """ + + ARRAY_API_STRICT = "array_api_strict", "array_api_strict", "array_api_strict" + NUMPY = "numpy", "numpy", "numpy" + NUMPY_READONLY = "numpy_readonly", "numpy", "numpy" + CUPY = "cupy", "cupy", "cupy" + TORCH = "torch", "torch", "torch" + DASK_ARRAY = "dask.array", "dask", "dask.array" + SPARSE = "sparse", "pydata_sparse", "sparse" + JAX_NUMPY = "jax.numpy", "jax", "jax.numpy" + + def __new__( + cls, value: str, _library_name: str, _module_name: str + ): # numpydoc ignore=GL08 + obj = object.__new__(cls) + obj._value_ = value + return obj + + def __init__( + self, + value: str, # noqa: ARG002 # pylint: disable=unused-argument + library_name: str, + module_name: str, + ): # numpydoc ignore=GL08 + self.library_name = library_name + self.module_name = module_name + + def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 + """Pretty-print parameterized test names.""" + return cast(str, self.value) + + def is_namespace(self, xp: ModuleType) -> bool: + """ + Call the corresponding is_namespace function. + + Parameters + ---------- + xp : array_namespace + Array namespace to check. + + Returns + ------- + bool + ``True`` if xp matches the namespace, ``False`` otherwise. + """ + is_namespace_func = getattr(_compat, f"is_{self.library_name}_namespace") + is_namespace_func = cast(Callable[[ModuleType], bool], is_namespace_func) + return is_namespace_func(xp) From 64db422ddbaba403e30946c6f8f96a14b6109d8f Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 10:56:32 +0000 Subject: [PATCH 14/21] tweak docstring --- src/array_api_extra/_lib/_backends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/array_api_extra/_lib/_backends.py b/src/array_api_extra/_lib/_backends.py index 7b3c6f38..906a4f94 100644 --- a/src/array_api_extra/_lib/_backends.py +++ b/src/array_api_extra/_lib/_backends.py @@ -1,4 +1,4 @@ -"""Code specifying libraries array-api-extra interacts with.""" +"""Backends with which array-api-extra interacts.""" from collections.abc import Callable from enum import Enum From ed7fd2577b736f9abcf850d514eb68224eee0943 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:00:33 +0000 Subject: [PATCH 15/21] update docstring --- src/array_api_extra/_lib/_backends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/array_api_extra/_lib/_backends.py b/src/array_api_extra/_lib/_backends.py index 906a4f94..cbebfcb5 100644 --- a/src/array_api_extra/_lib/_backends.py +++ b/src/array_api_extra/_lib/_backends.py @@ -1,4 +1,4 @@ -"""Backends with which array-api-extra interacts.""" +"""Backends with which array-api-extra interacts in delegation and testing.""" from collections.abc import Callable from enum import Enum From 93f2591df9b2f1a37d9fa8df2e56c67598762bb2 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:12:10 +0000 Subject: [PATCH 16/21] Update src/array_api_extra/_delegation.py Co-authored-by: Guido Imperiale --- src/array_api_extra/_delegation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index db47ca45..396b8127 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -31,7 +31,7 @@ def _delegate(xp: ModuleType, *backends: Backend) -> bool: def pad( x: Array, pad_width: int | tuple[int, int] | list[tuple[int, int]], - mode: str = "constant", + mode: Literal["constant"] = "constant", *, constant_values: bool | int | float | complex = 0, xp: ModuleType | None = None, From 47e9b5b9c074e6af174964edcf3fb8db3ab2636d Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:13:31 +0000 Subject: [PATCH 17/21] fix CI --- src/array_api_extra/_delegation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/array_api_extra/_delegation.py b/src/array_api_extra/_delegation.py index 396b8127..4a1740e6 100644 --- a/src/array_api_extra/_delegation.py +++ b/src/array_api_extra/_delegation.py @@ -1,6 +1,7 @@ """Delegation to existing implementations for Public API Functions.""" from types import ModuleType +from typing import Literal from ._lib import Backend, _funcs from ._lib._utils._compat import array_namespace From 4c786a255a505ca0f617244da38b7ecad7c2bf74 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:15:10 +0000 Subject: [PATCH 18/21] fix mypy --- tests/test_funcs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_funcs.py b/tests/test_funcs.py index fd1c106d..e8d16888 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -421,7 +421,7 @@ def test_ndim(self, xp: ModuleType): def test_mode_not_implemented(self, xp: ModuleType): a = xp.arange(3) with pytest.raises(NotImplementedError, match="Only `'constant'`"): - pad(a, 2, mode="edge") + pad(a, 2, mode="edge") # type: ignore[arg-type] def test_device(self, xp: ModuleType, device: Device): a = xp.asarray(0.0, device=device) From 9daa33a14221d24e28a4b20c201113133930ff4e Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:31:22 +0000 Subject: [PATCH 19/21] address review --- src/array_api_extra/_lib/_backends.py | 49 ++++++++------------- src/array_api_extra/_lib/_utils/_compat.py | 6 +++ src/array_api_extra/_lib/_utils/_compat.pyi | 2 + tests/test_funcs.py | 2 +- 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/array_api_extra/_lib/_backends.py b/src/array_api_extra/_lib/_backends.py index cbebfcb5..93c43272 100644 --- a/src/array_api_extra/_lib/_backends.py +++ b/src/array_api_extra/_lib/_backends.py @@ -18,23 +18,28 @@ class Backend(Enum): # numpydoc ignore=PR01,PR02 # type: ignore[no-subclass-an ---------- value : str String describing the backend. - library_name : str - Name of the array library of the backend. + is_namespace : Callable[[ModuleType], bool] + Function to check whether an input module is the array namespace + corresponding to the backend. module_name : str Name of the backend's module. """ - ARRAY_API_STRICT = "array_api_strict", "array_api_strict", "array_api_strict" - NUMPY = "numpy", "numpy", "numpy" - NUMPY_READONLY = "numpy_readonly", "numpy", "numpy" - CUPY = "cupy", "cupy", "cupy" - TORCH = "torch", "torch", "torch" - DASK_ARRAY = "dask.array", "dask", "dask.array" - SPARSE = "sparse", "pydata_sparse", "sparse" - JAX_NUMPY = "jax.numpy", "jax", "jax.numpy" + ARRAY_API_STRICT = ( + "array_api_strict", + _compat.is_array_api_strict_namespace, + "array_api_strict", + ) + NUMPY = "numpy", _compat.is_numpy_namespace, "numpy" + NUMPY_READONLY = "numpy_readonly", _compat.is_numpy_namespace, "numpy" + CUPY = "cupy", _compat.is_cupy_namespace, "cupy" + TORCH = "torch", _compat.is_torch_namespace, "torch" + DASK_ARRAY = "dask.array", _compat.is_dask_namespace, "dask.array" + SPARSE = "sparse", _compat.is_pydata_sparse_namespace, "sparse" + JAX_NUMPY = "jax.numpy", _compat.is_jax_namespace, "jax.numpy" def __new__( - cls, value: str, _library_name: str, _module_name: str + cls, value: str, _is_namespace: Callable[[ModuleType], bool], _module_name: str ): # numpydoc ignore=GL08 obj = object.__new__(cls) obj._value_ = value @@ -43,30 +48,12 @@ def __new__( def __init__( self, value: str, # noqa: ARG002 # pylint: disable=unused-argument - library_name: str, + is_namespace: Callable[[ModuleType], bool], module_name: str, ): # numpydoc ignore=GL08 - self.library_name = library_name + self.is_namespace = is_namespace self.module_name = module_name def __str__(self) -> str: # type: ignore[explicit-override] # pyright: ignore[reportImplicitOverride] # numpydoc ignore=RT01 """Pretty-print parameterized test names.""" return cast(str, self.value) - - def is_namespace(self, xp: ModuleType) -> bool: - """ - Call the corresponding is_namespace function. - - Parameters - ---------- - xp : array_namespace - Array namespace to check. - - Returns - ------- - bool - ``True`` if xp matches the namespace, ``False`` otherwise. - """ - is_namespace_func = getattr(_compat, f"is_{self.library_name}_namespace") - is_namespace_func = cast(Callable[[ModuleType], bool], is_namespace_func) - return is_namespace_func(xp) diff --git a/src/array_api_extra/_lib/_utils/_compat.py b/src/array_api_extra/_lib/_utils/_compat.py index 75fb8f1b..d7f7e83a 100644 --- a/src/array_api_extra/_lib/_utils/_compat.py +++ b/src/array_api_extra/_lib/_utils/_compat.py @@ -6,7 +6,9 @@ from ...._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports] array_namespace, device, + is_array_api_strict_namespace, is_cupy_namespace, + is_dask_namespace, is_jax_array, is_jax_namespace, is_numpy_namespace, @@ -19,7 +21,9 @@ from array_api_compat import ( # pyright: ignore[reportMissingTypeStubs] array_namespace, device, + is_array_api_strict_namespace, is_cupy_namespace, + is_dask_namespace, is_jax_array, is_jax_namespace, is_numpy_namespace, @@ -32,7 +36,9 @@ __all__ = [ "array_namespace", "device", + "is_array_api_strict_namespace", "is_cupy_namespace", + "is_dask_namespace", "is_jax_array", "is_jax_namespace", "is_numpy_namespace", diff --git a/src/array_api_extra/_lib/_utils/_compat.pyi b/src/array_api_extra/_lib/_utils/_compat.pyi index 2abd4afe..6086dcfe 100644 --- a/src/array_api_extra/_lib/_utils/_compat.pyi +++ b/src/array_api_extra/_lib/_utils/_compat.pyi @@ -18,7 +18,9 @@ def array_namespace( use_compat: bool | None = None, ) -> ArrayModule: ... def device(x: Array, /) -> Device: ... +def is_array_api_strict_namespace(xp: ModuleType, /) -> bool: ... def is_cupy_namespace(xp: ModuleType, /) -> bool: ... +def is_dask_namespace(xp: ModuleType, /) -> bool: ... def is_jax_namespace(xp: ModuleType, /) -> bool: ... def is_numpy_namespace(xp: ModuleType, /) -> bool: ... def is_torch_namespace(xp: ModuleType, /) -> bool: ... diff --git a/tests/test_funcs.py b/tests/test_funcs.py index e8d16888..5be4a9ad 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -421,7 +421,7 @@ def test_ndim(self, xp: ModuleType): def test_mode_not_implemented(self, xp: ModuleType): a = xp.arange(3) with pytest.raises(NotImplementedError, match="Only `'constant'`"): - pad(a, 2, mode="edge") # type: ignore[arg-type] + pad(a, 2, mode="edge") # type: ignore[arg-type] # pyright: ignore[reportArgumentType] def test_device(self, xp: ModuleType, device: Device): a = xp.asarray(0.0, device=device) From 3ac8e45f82cf2613d991e84b10db85f32847bc04 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 11:38:54 +0000 Subject: [PATCH 20/21] flush ci From 82e52582f8caace41f7d78cbfc6a1e7e342f3fe8 Mon Sep 17 00:00:00 2001 From: Lucas Colley Date: Wed, 15 Jan 2025 12:55:17 +0000 Subject: [PATCH 21/21] update index --- docs/index.md | 61 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/docs/index.md b/docs/index.md index 9470d452..c1998cdd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,7 +10,8 @@ contributors.md ``` This is a library housing "array-agnostic" implementations of functions built on -top of [the Python array API standard](https://data-apis.org/array-api/). +top of [the Python array API standard](https://data-apis.org/array-api/), as +well as delegation to existing implementations for known array library backends. The intended users of this library are "array-consuming" libraries which are using [array-api-compat](https://data-apis.org/array-api-compat/) to make their @@ -23,7 +24,7 @@ It is currently used by: - [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for scientific computing. -- ... +- _your library? Let us know!_ (installation)= @@ -33,6 +34,8 @@ It is currently used by: [on PyPI](https://pypi.org/project/array-api-extra/): ```shell +uv add array-api-extra +# or python -m pip install array-api-extra ``` @@ -40,9 +43,9 @@ And [on conda-forge](https://prefix.dev/channels/conda-forge/packages/array-api-extra): ```shell -mamba install array-api-extra -# or pixi add array-api-extra +# or +mamba install array-api-extra ``` ```{warning} @@ -52,7 +55,7 @@ a specific version, or vendor the library inside your own. ``` ```{note} -This library depends on array-api-compat. We aim for compatibility with +This library depends on `array-api-compat`. We aim for compatibility with the latest released version of array-api-compat, and your mileage may vary with older or dev versions. ``` @@ -69,8 +72,8 @@ and copy it into the appropriate place in your library, like: cp -a array-api-extra/src/array_api_extra mylib/vendored/ ``` -`array-api-extra` depends on `array-api-compat`. You may either add a dependency -in your own project to `array-api-compat` or vendor it too: +You may either add a dependency to array-api-compat in your own project, or +vendor it too: 1. Clone [the array-api-compat repository](https://github.com/data-apis/array-api-compat) @@ -81,14 +84,14 @@ in your own project to `array-api-compat` or vendor it too: ``` 2. Create a new hook file which array-api-extra will use instead of the - top-level `array-api-compat` if present: + top-level array-api-compat if present: ``` echo 'from mylib.vendored.array_api_compat import *' > mylib/vendored/_array_api_compat_vendor.py ``` -This also allows overriding `array-api-compat` functions if you so wish. E.g. -your `mylib/vendored/_array_api_compat_vendor.py` could look like this: +This also allows overriding array-api-compat functions if you so wish. E.g. your +`mylib/vendored/_array_api_compat_vendor.py` could look like this: ```python from mylib.vendored.array_api_compat import * @@ -104,6 +107,13 @@ def array_namespace(*xs, **kwargs): return _array_namespace_orig(*xs, **kwargs) ``` +```{tip} +See [an example of this in SciPy][scipy-vendor-example]. +``` + +[scipy-vendor-example]: +https://github.com/scipy/scipy/blob/main/scipy/_lib/_array_api_compat_vendor.py + (usage)= ## Usage @@ -115,9 +125,9 @@ import array_api_extra as xpx ... xp = array_namespace(x) -y = xp.sum(x) +y = xp.sum(x) # use functions from `xp` as normal ... -return xpx.atleast_nd(y, ndim=2, xp=xp) +return xpx.atleast_nd(y, ndim=2, xp=xp) # use functions from `xpx`, passing `xp=xp` ``` ```{note} @@ -131,13 +141,13 @@ is called internally to determine the namespace. ``` In the examples shown in the docstrings of functions from this library, -[`array-api-strict`](https://data-apis.org/array-api-strict/) is used as the -array namespace `xp`. In reality, code using this library will be written to -work with any compatible array namespace as `xp`, not any particular -implementation. +[array-api-strict](https://data-apis.org/array-api-strict/) is used as the array +namespace `xp`. In reality, code using this library will be written to work with +any compatible array namespace as `xp`, not any particular implementation. -Some functions may only work with array libraries supported by array-api-compat. -This will be clearly indicated in the docs. +Some functions may only work with specific array libraries supported by +array-api-compat. This should be clearly indicated in the docs - please open an +issue if this is not the case! (scope)= @@ -151,13 +161,17 @@ Functions that are in-scope for this library will: libraries. - Be implemented with type annotations and [numpydoc-style docstrings](https://numpydoc.readthedocs.io/en/latest/format.html). -- Be tested against `array-api-strict`. +- Be tested against array-api-strict and various existing backends. Functions are implemented purely in terms of the array API standard where possible. Where functions must use library-specific helpers for libraries supported by array-api-compat, this will be clearly marked in their API reference page. +Delegation is added for some functions to use native implementations for the +given array type, instead of the array-agnostic implementations, as this may +increase performance. + In particular, the following kinds of function are also in-scope: - Functions which implement @@ -168,15 +182,12 @@ In particular, the following kinds of function are also in-scope: The following features are currently out-of-scope for this library: -- Delegation to known, existing array libraries (unless necessary). - - It is quite simple to wrap functions in this library to also use existing - implementations. Such delegation will not live in this library for now, but - the array-agnostic functions in this library could form an array-agnostic - backend for such delegating functions in the future, here or elsewhere. - Functions which accept "array-like" input, or standard-incompatible namespaces. - It is possible to prepare input arrays and a standard-compatible namespace - via `array-api-compat` downstream in consumer libraries. + via array-api-compat downstream in consumer libraries. The `xp` argument can + also be omitted to infer the standard-compatible namespace using + `array_namespace` internally. - Functions which are specific to a particular domain. - These functions may belong better in an array-consuming library which is specific to that domain.