Skip to content

Commit de328a1

Browse files
authored
Update support for Array API to v2024.12 (#863)
1 parent 0044437 commit de328a1

File tree

5 files changed

+130
-18
lines changed

5 files changed

+130
-18
lines changed

ci/Numba-array-api-xfails.txt

Lines changed: 119 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,122 @@ array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__]
5555
array_api_tests/test_signatures.py::test_array_method_signature[__dlpack_device__]
5656
array_api_tests/test_signatures.py::test_array_method_signature[__setitem__]
5757
array_api_tests/test_sorting_functions.py::test_argsort
58-
array_api_tests/test_special_cases.py::test_nan_propagation[max]
59-
array_api_tests/test_special_cases.py::test_nan_propagation[mean]
60-
array_api_tests/test_special_cases.py::test_nan_propagation[min]
61-
array_api_tests/test_special_cases.py::test_nan_propagation[prod]
62-
array_api_tests/test_special_cases.py::test_nan_propagation[std]
63-
array_api_tests/test_special_cases.py::test_nan_propagation[sum]
64-
array_api_tests/test_special_cases.py::test_nan_propagation[var]
58+
array_api_tests/test_has_names.py::test_has_names[fft-hfft]
59+
array_api_tests/test_has_names.py::test_has_names[fft-ihfft]
60+
array_api_tests/test_has_names.py::test_has_names[fft-fftfreq]
61+
array_api_tests/test_has_names.py::test_has_names[fft-rfftfreq]
62+
array_api_tests/test_has_names.py::test_has_names[fft-fftshift]
63+
array_api_tests/test_has_names.py::test_has_names[fft-ifftshift]
64+
array_api_tests/test_has_names.py::test_has_names[fft-fft]
65+
array_api_tests/test_has_names.py::test_has_names[fft-ifft]
66+
array_api_tests/test_has_names.py::test_has_names[fft-fftn]
67+
array_api_tests/test_has_names.py::test_has_names[fft-ifftn]
68+
array_api_tests/test_has_names.py::test_has_names[fft-rfft]
69+
array_api_tests/test_has_names.py::test_has_names[fft-irfft]
70+
array_api_tests/test_has_names.py::test_has_names[fft-rfftn]
71+
array_api_tests/test_has_names.py::test_has_names[fft-irfftn]
72+
array_api_tests/test_creation_functions.py::test_empty_like
73+
array_api_tests/test_data_type_functions.py::test_finfo[complex64]
74+
array_api_tests/test_manipulation_functions.py::test_squeeze
75+
array_api_tests/test_has_names.py::test_has_names[utility-diff]
76+
array_api_tests/test_has_names.py::test_has_names[manipulation-repeat]
77+
array_api_tests/test_has_names.py::test_has_names[elementwise-copysign]
78+
array_api_tests/test_has_names.py::test_has_names[manipulation-tile]
79+
array_api_tests/test_has_names.py::test_has_names[manipulation-unstack]
80+
array_api_tests/test_has_names.py::test_has_names[elementwise-hypot]
81+
array_api_tests/test_has_names.py::test_has_names[elementwise-maximum]
82+
array_api_tests/test_has_names.py::test_has_names[elementwise-minimum]
83+
array_api_tests/test_has_names.py::test_has_names[elementwise-nextafter]
84+
array_api_tests/test_has_names.py::test_has_names[elementwise-reciprocal]
85+
array_api_tests/test_has_names.py::test_has_names[elementwise-signbit]
86+
array_api_tests/test_has_names.py::test_has_names[statistical-cumulative_sum]
87+
array_api_tests/test_has_names.py::test_has_names[statistical-cumulative_prod]
88+
array_api_tests/test_has_names.py::test_has_names[indexing-take_along_axis]
89+
array_api_tests/test_has_names.py::test_has_names[info-__array_namespace_info__]
90+
array_api_tests/test_has_names.py::test_has_names[searching-count_nonzero]
91+
array_api_tests/test_has_names.py::test_has_names[searching-searchsorted]
92+
array_api_tests/test_inspection_functions.py::test_array_namespace_info
93+
array_api_tests/test_inspection_functions.py::test_array_namespace_info_dtypes
94+
array_api_tests/test_signatures.py::test_func_signature[diff]
95+
array_api_tests/test_signatures.py::test_func_signature[repeat]
96+
array_api_tests/test_signatures.py::test_func_signature[tile]
97+
array_api_tests/test_signatures.py::test_func_signature[unstack]
98+
array_api_tests/test_signatures.py::test_func_signature[astype]
99+
array_api_tests/test_signatures.py::test_func_signature[copysign]
100+
array_api_tests/test_signatures.py::test_func_signature[hypot]
101+
array_api_tests/test_signatures.py::test_func_signature[maximum]
102+
array_api_tests/test_signatures.py::test_func_signature[minimum]
103+
array_api_tests/test_signatures.py::test_func_signature[nextafter]
104+
array_api_tests/test_signatures.py::test_func_signature[reciprocal]
105+
array_api_tests/test_signatures.py::test_func_signature[signbit]
106+
array_api_tests/test_signatures.py::test_func_signature[take_along_axis]
107+
array_api_tests/test_signatures.py::test_func_signature[__array_namespace_info__]
108+
array_api_tests/test_signatures.py::test_info_func_signature[capabilities]
109+
array_api_tests/test_signatures.py::test_info_func_signature[default_device]
110+
array_api_tests/test_signatures.py::test_info_func_signature[default_dtypes]
111+
array_api_tests/test_signatures.py::test_info_func_signature[devices]
112+
array_api_tests/test_signatures.py::test_info_func_signature[dtypes]
113+
array_api_tests/test_special_cases.py::test_unary[clip(x_i is NaN) -> NaN]
114+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +0) -> False]
115+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -0) -> True]
116+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +infinity) -> False]
117+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -infinity) -> True]
118+
array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i > 0) -> False]
119+
array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i < 0) -> True]
120+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +NaN) -> False]
121+
array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -NaN) -> True]
122+
array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i < 0) -> NaN]
123+
array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is -0) -> NaN]
124+
array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is +0) -> NaN]
125+
array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i > 0) -> NaN]
126+
array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity]
127+
array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity]
128+
array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity]
129+
array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity]
130+
array_api_tests/test_special_cases.py::test_binary[floor_divide(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0]
131+
array_api_tests/test_operators_and_elementwise_functions.py::test_nextafter
132+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity]
133+
array_api_tests/test_special_cases.py::test_binary[floor_divide(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0]
134+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity]
135+
array_api_tests/test_special_cases.py::test_binary[maximum(x1_i is NaN or x2_i is NaN) -> NaN]
136+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity]
137+
array_api_tests/test_special_cases.py::test_binary[minimum(x1_i is NaN or x2_i is NaN) -> NaN]
138+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity]
139+
array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is NaN or x2_i is NaN) -> NaN]
140+
array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is -0 and x2_i is +0) -> +0]
141+
array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is +0 and x2_i is -0) -> -0]
142+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0]
143+
array_api_tests/test_special_cases.py::test_binary[__floordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0]
144+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity]
145+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity]
146+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity]
147+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0]
148+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity]
149+
array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0]
150+
array_api_tests/test_operators_and_elementwise_functions.py::test_reciprocal
151+
array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_1[1]
152+
array_api_tests/test_statistical_functions.py::test_cumulative_prod
153+
array_api_tests/test_statistical_functions.py::test_cumulative_sum
154+
array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_1[None]
155+
array_api_tests/test_operators_and_elementwise_functions.py::test_signbit
156+
array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_2[1]
157+
array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_2[None]
158+
array_api_tests/test_manipulation_functions.py::test_repeat
159+
array_api_tests/test_searching_functions.py::test_count_nonzero
160+
array_api_tests/test_operators_and_elementwise_functions.py::test_copysign
161+
array_api_tests/test_operators_and_elementwise_functions.py::test_maximum
162+
array_api_tests/test_searching_functions.py::test_searchsorted
163+
array_api_tests/test_manipulation_functions.py::test_tile
164+
array_api_tests/test_signatures.py::test_func_signature[cumulative_sum]
165+
array_api_tests/test_signatures.py::test_func_signature[cumulative_prod]
166+
array_api_tests/test_manipulation_functions.py::test_unstack
167+
array_api_tests/test_operators_and_elementwise_functions.py::test_minimum
168+
array_api_tests/test_operators_and_elementwise_functions.py::test_hypot
169+
array_api_tests/test_operators_and_elementwise_functions.py::test_clip
170+
array_api_tests/test_signatures.py::test_func_signature[count_nonzero]
171+
array_api_tests/test_signatures.py::test_func_signature[searchsorted]
172+
array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[copysign]
173+
array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[hypot]
174+
array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[nextafter]
175+
array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[maximum]
176+
array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[minimum]

ci/array-api-tests-rev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
33f2d2ea2f3dd2b3ceeeb4519d55e08096184149
1+
2db6c7b807a609a1539e312e01af093a45d34764

sparse/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from ._version import __version__, __version_tuple__ # noqa: F401
66

7-
__array_api_version__ = "2022.12"
7+
__array_api_version__ = "2024.12"
88

99

1010
class _BackendType(Enum):

sparse/numba_backend/_coo/common.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ def _diagonal_idx(coordlist, axis1, axis2, offset):
10131013
return np.array([i for i in range(len(coordlist[axis1])) if coordlist[axis1][i] + offset == coordlist[axis2][i]])
10141014

10151015

1016-
def clip(a, a_min=None, a_max=None, out=None):
1016+
def clip(a, min=None, max=None, out=None):
10171017
"""
10181018
Clip (limit) the values in the array.
10191019
@@ -1023,10 +1023,10 @@ def clip(a, a_min=None, a_max=None, out=None):
10231023
Parameters
10241024
----------
10251025
a
1026-
a_min : scalar or `SparseArray` or `None`
1026+
min : scalar or `SparseArray` or `None`
10271027
Minimum value. If `None`, clipping is not performed on lower
10281028
interval edge.
1029-
a_max : scalar or `SparseArray` or `None`
1029+
max : scalar or `SparseArray` or `None`
10301030
Maximum value. If `None`, clipping is not performed on upper
10311031
interval edge.
10321032
out : SparseArray, optional
@@ -1044,19 +1044,19 @@ def clip(a, a_min=None, a_max=None, out=None):
10441044
--------
10451045
>>> import sparse
10461046
>>> x = sparse.COO.from_numpy([0, 0, 0, 1, 2, 3])
1047-
>>> sparse.clip(x, a_min=1).todense() # doctest: +NORMALIZE_WHITESPACE
1047+
>>> sparse.clip(x, min=1).todense() # doctest: +NORMALIZE_WHITESPACE
10481048
array([1, 1, 1, 1, 2, 3])
1049-
>>> sparse.clip(x, a_max=1).todense() # doctest: +NORMALIZE_WHITESPACE
1049+
>>> sparse.clip(x, max=1).todense() # doctest: +NORMALIZE_WHITESPACE
10501050
array([0, 0, 0, 1, 1, 1])
1051-
>>> sparse.clip(x, a_min=1, a_max=2).todense() # doctest: +NORMALIZE_WHITESPACE
1051+
>>> sparse.clip(x, min=1, max=2).todense() # doctest: +NORMALIZE_WHITESPACE
10521052
array([1, 1, 1, 1, 2, 2])
10531053
10541054
See Also
10551055
--------
10561056
numpy.clip : Equivalent NumPy function
10571057
"""
10581058
a = asCOO(a, name="clip")
1059-
return a.clip(a_min, a_max)
1059+
return a.clip(min, max)
10601060

10611061

10621062
def expand_dims(x, /, *, axis=0):

sparse/numba_backend/_sparse_array.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -953,9 +953,9 @@ def conj(self):
953953

954954
def __array_namespace__(self, *, api_version=None):
955955
if api_version is None:
956-
api_version = "2022.12"
956+
api_version = "2024.12"
957957

958-
if api_version not in {"2021.12", "2022.12"}:
958+
if api_version not in {"2021.12", "2022.12", "2023.12", "2024.12"}:
959959
raise ValueError(f'"{api_version}" Array API version not supported.')
960960
import sparse
961961

0 commit comments

Comments
 (0)