diff --git a/ci/Numba-array-api-xfails.txt b/ci/Numba-array-api-xfails.txt index 6a6200be..7d257d93 100644 --- a/ci/Numba-array-api-xfails.txt +++ b/ci/Numba-array-api-xfails.txt @@ -55,10 +55,122 @@ array_api_tests/test_signatures.py::test_array_method_signature[__dlpack__] array_api_tests/test_signatures.py::test_array_method_signature[__dlpack_device__] array_api_tests/test_signatures.py::test_array_method_signature[__setitem__] array_api_tests/test_sorting_functions.py::test_argsort -array_api_tests/test_special_cases.py::test_nan_propagation[max] -array_api_tests/test_special_cases.py::test_nan_propagation[mean] -array_api_tests/test_special_cases.py::test_nan_propagation[min] -array_api_tests/test_special_cases.py::test_nan_propagation[prod] -array_api_tests/test_special_cases.py::test_nan_propagation[std] -array_api_tests/test_special_cases.py::test_nan_propagation[sum] -array_api_tests/test_special_cases.py::test_nan_propagation[var] +array_api_tests/test_has_names.py::test_has_names[fft-hfft] +array_api_tests/test_has_names.py::test_has_names[fft-ihfft] +array_api_tests/test_has_names.py::test_has_names[fft-fftfreq] +array_api_tests/test_has_names.py::test_has_names[fft-rfftfreq] +array_api_tests/test_has_names.py::test_has_names[fft-fftshift] +array_api_tests/test_has_names.py::test_has_names[fft-ifftshift] +array_api_tests/test_has_names.py::test_has_names[fft-fft] +array_api_tests/test_has_names.py::test_has_names[fft-ifft] +array_api_tests/test_has_names.py::test_has_names[fft-fftn] +array_api_tests/test_has_names.py::test_has_names[fft-ifftn] +array_api_tests/test_has_names.py::test_has_names[fft-rfft] +array_api_tests/test_has_names.py::test_has_names[fft-irfft] +array_api_tests/test_has_names.py::test_has_names[fft-rfftn] +array_api_tests/test_has_names.py::test_has_names[fft-irfftn] +array_api_tests/test_creation_functions.py::test_empty_like +array_api_tests/test_data_type_functions.py::test_finfo[complex64] +array_api_tests/test_manipulation_functions.py::test_squeeze +array_api_tests/test_has_names.py::test_has_names[utility-diff] +array_api_tests/test_has_names.py::test_has_names[manipulation-repeat] +array_api_tests/test_has_names.py::test_has_names[elementwise-copysign] +array_api_tests/test_has_names.py::test_has_names[manipulation-tile] +array_api_tests/test_has_names.py::test_has_names[manipulation-unstack] +array_api_tests/test_has_names.py::test_has_names[elementwise-hypot] +array_api_tests/test_has_names.py::test_has_names[elementwise-maximum] +array_api_tests/test_has_names.py::test_has_names[elementwise-minimum] +array_api_tests/test_has_names.py::test_has_names[elementwise-nextafter] +array_api_tests/test_has_names.py::test_has_names[elementwise-reciprocal] +array_api_tests/test_has_names.py::test_has_names[elementwise-signbit] +array_api_tests/test_has_names.py::test_has_names[statistical-cumulative_sum] +array_api_tests/test_has_names.py::test_has_names[statistical-cumulative_prod] +array_api_tests/test_has_names.py::test_has_names[indexing-take_along_axis] +array_api_tests/test_has_names.py::test_has_names[info-__array_namespace_info__] +array_api_tests/test_has_names.py::test_has_names[searching-count_nonzero] +array_api_tests/test_has_names.py::test_has_names[searching-searchsorted] +array_api_tests/test_inspection_functions.py::test_array_namespace_info +array_api_tests/test_inspection_functions.py::test_array_namespace_info_dtypes +array_api_tests/test_signatures.py::test_func_signature[diff] +array_api_tests/test_signatures.py::test_func_signature[repeat] +array_api_tests/test_signatures.py::test_func_signature[tile] +array_api_tests/test_signatures.py::test_func_signature[unstack] +array_api_tests/test_signatures.py::test_func_signature[astype] +array_api_tests/test_signatures.py::test_func_signature[copysign] +array_api_tests/test_signatures.py::test_func_signature[hypot] +array_api_tests/test_signatures.py::test_func_signature[maximum] +array_api_tests/test_signatures.py::test_func_signature[minimum] +array_api_tests/test_signatures.py::test_func_signature[nextafter] +array_api_tests/test_signatures.py::test_func_signature[reciprocal] +array_api_tests/test_signatures.py::test_func_signature[signbit] +array_api_tests/test_signatures.py::test_func_signature[take_along_axis] +array_api_tests/test_signatures.py::test_func_signature[__array_namespace_info__] +array_api_tests/test_signatures.py::test_info_func_signature[capabilities] +array_api_tests/test_signatures.py::test_info_func_signature[default_device] +array_api_tests/test_signatures.py::test_info_func_signature[default_dtypes] +array_api_tests/test_signatures.py::test_info_func_signature[devices] +array_api_tests/test_signatures.py::test_info_func_signature[dtypes] +array_api_tests/test_special_cases.py::test_unary[clip(x_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +0) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -0) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +infinity) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -infinity) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i > 0) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(isfinite(x_i) and x_i < 0) -> True] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is +NaN) -> False] +array_api_tests/test_special_cases.py::test_unary[signbit(x_i is -NaN) -> True] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i < 0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is -0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i is +0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[copysign(x1_i is NaN and x2_i > 0) -> NaN] +array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity] +array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity] +array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity] +array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity] +array_api_tests/test_special_cases.py::test_binary[floor_divide(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0] +array_api_tests/test_operators_and_elementwise_functions.py::test_nextafter +array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity] +array_api_tests/test_special_cases.py::test_binary[floor_divide(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0] +array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity] +array_api_tests/test_special_cases.py::test_binary[maximum(x1_i is NaN or x2_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity] +array_api_tests/test_special_cases.py::test_binary[minimum(x1_i is NaN or x2_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_binary[__floordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity] +array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is NaN or x2_i is NaN) -> NaN] +array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is -0 and x2_i is +0) -> +0] +array_api_tests/test_special_cases.py::test_binary[nextafter(x1_i is +0 and x2_i is -0) -> -0] +array_api_tests/test_special_cases.py::test_binary[__floordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0] +array_api_tests/test_special_cases.py::test_binary[__floordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i < 0) -> +infinity] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is +infinity and isfinite(x2_i) and x2_i < 0) -> -infinity] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i > 0 and x2_i is -infinity) -> -0] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(x1_i is -infinity and isfinite(x2_i) and x2_i > 0) -> -infinity] +array_api_tests/test_special_cases.py::test_iop[__ifloordiv__(isfinite(x1_i) and x1_i < 0 and x2_i is +infinity) -> -0] +array_api_tests/test_operators_and_elementwise_functions.py::test_reciprocal +array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_1[1] +array_api_tests/test_statistical_functions.py::test_cumulative_prod +array_api_tests/test_statistical_functions.py::test_cumulative_sum +array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_1[None] +array_api_tests/test_operators_and_elementwise_functions.py::test_signbit +array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_2[1] +array_api_tests/test_array_object.py::test_getitem_arrays_and_ints_2[None] +array_api_tests/test_manipulation_functions.py::test_repeat +array_api_tests/test_searching_functions.py::test_count_nonzero +array_api_tests/test_operators_and_elementwise_functions.py::test_copysign +array_api_tests/test_operators_and_elementwise_functions.py::test_maximum +array_api_tests/test_searching_functions.py::test_searchsorted +array_api_tests/test_manipulation_functions.py::test_tile +array_api_tests/test_signatures.py::test_func_signature[cumulative_sum] +array_api_tests/test_signatures.py::test_func_signature[cumulative_prod] +array_api_tests/test_manipulation_functions.py::test_unstack +array_api_tests/test_operators_and_elementwise_functions.py::test_minimum +array_api_tests/test_operators_and_elementwise_functions.py::test_hypot +array_api_tests/test_operators_and_elementwise_functions.py::test_clip +array_api_tests/test_signatures.py::test_func_signature[count_nonzero] +array_api_tests/test_signatures.py::test_func_signature[searchsorted] +array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[copysign] +array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[hypot] +array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[nextafter] +array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[maximum] +array_api_tests/test_operators_and_elementwise_functions.py::test_binary_with_scalars_real[minimum] diff --git a/ci/array-api-tests-rev.txt b/ci/array-api-tests-rev.txt index e401040c..82b846e6 100644 --- a/ci/array-api-tests-rev.txt +++ b/ci/array-api-tests-rev.txt @@ -1 +1 @@ -33f2d2ea2f3dd2b3ceeeb4519d55e08096184149 +2db6c7b807a609a1539e312e01af093a45d34764 diff --git a/sparse/__init__.py b/sparse/__init__.py index 5def04ac..05d67a33 100644 --- a/sparse/__init__.py +++ b/sparse/__init__.py @@ -4,7 +4,7 @@ from ._version import __version__, __version_tuple__ # noqa: F401 -__array_api_version__ = "2022.12" +__array_api_version__ = "2024.12" class _BackendType(Enum): diff --git a/sparse/numba_backend/_coo/common.py b/sparse/numba_backend/_coo/common.py index 543ed3c3..491e1f1e 100644 --- a/sparse/numba_backend/_coo/common.py +++ b/sparse/numba_backend/_coo/common.py @@ -1013,7 +1013,7 @@ def _diagonal_idx(coordlist, axis1, axis2, offset): return np.array([i for i in range(len(coordlist[axis1])) if coordlist[axis1][i] + offset == coordlist[axis2][i]]) -def clip(a, a_min=None, a_max=None, out=None): +def clip(a, min=None, max=None, out=None): """ Clip (limit) the values in the array. @@ -1023,10 +1023,10 @@ def clip(a, a_min=None, a_max=None, out=None): Parameters ---------- a - a_min : scalar or `SparseArray` or `None` + min : scalar or `SparseArray` or `None` Minimum value. If `None`, clipping is not performed on lower interval edge. - a_max : scalar or `SparseArray` or `None` + max : scalar or `SparseArray` or `None` Maximum value. If `None`, clipping is not performed on upper interval edge. out : SparseArray, optional @@ -1044,11 +1044,11 @@ def clip(a, a_min=None, a_max=None, out=None): -------- >>> import sparse >>> x = sparse.COO.from_numpy([0, 0, 0, 1, 2, 3]) - >>> sparse.clip(x, a_min=1).todense() # doctest: +NORMALIZE_WHITESPACE + >>> sparse.clip(x, min=1).todense() # doctest: +NORMALIZE_WHITESPACE array([1, 1, 1, 1, 2, 3]) - >>> sparse.clip(x, a_max=1).todense() # doctest: +NORMALIZE_WHITESPACE + >>> sparse.clip(x, max=1).todense() # doctest: +NORMALIZE_WHITESPACE array([0, 0, 0, 1, 1, 1]) - >>> sparse.clip(x, a_min=1, a_max=2).todense() # doctest: +NORMALIZE_WHITESPACE + >>> sparse.clip(x, min=1, max=2).todense() # doctest: +NORMALIZE_WHITESPACE array([1, 1, 1, 1, 2, 2]) See Also @@ -1056,7 +1056,7 @@ def clip(a, a_min=None, a_max=None, out=None): numpy.clip : Equivalent NumPy function """ a = asCOO(a, name="clip") - return a.clip(a_min, a_max) + return a.clip(min, max) def expand_dims(x, /, *, axis=0): diff --git a/sparse/numba_backend/_sparse_array.py b/sparse/numba_backend/_sparse_array.py index 13180521..628c5d80 100644 --- a/sparse/numba_backend/_sparse_array.py +++ b/sparse/numba_backend/_sparse_array.py @@ -953,9 +953,9 @@ def conj(self): def __array_namespace__(self, *, api_version=None): if api_version is None: - api_version = "2022.12" + api_version = "2024.12" - if api_version not in {"2021.12", "2022.12"}: + if api_version not in {"2021.12", "2022.12", "2023.12", "2024.12"}: raise ValueError(f'"{api_version}" Array API version not supported.') import sparse