From 3ececee1317f54d095d2abff9b72d89040ac4b95 Mon Sep 17 00:00:00 2001 From: Evgeni Burovski Date: Thu, 8 Jan 2026 21:56:33 +0100 Subject: [PATCH 1/3] TST: dask: xfail searchorted_scalars test on dask Dask does not allow scalars as arguments to searchsorted: $ ARRAY_API_TESTS_MODULE=array_api_compat.dask.array pytest array_api_tests/test_searching_functions.py::test_searchsorted_with_scalars --max-examples 500 ... @given(data=st.data()) > def test_searchsorted_with_scalars(data): ^^^ ... # call np.searchsorted for each pair of blocks in a and v > meta = np.searchsorted(a._meta, v._meta) ^^^^^^^ E AttributeError: 'int' object has no attribute '_meta' E E ========== FAILING CODE SNIPPET: E xp.searchsorted(dask.array, 0, sorter=None, **kw) with kw = {} E ==================== --- dask-xfails.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/dask-xfails.txt b/dask-xfails.txt index bc153d87..93a138cf 100644 --- a/dask-xfails.txt +++ b/dask-xfails.txt @@ -135,6 +135,7 @@ array_api_tests/test_signatures.py::test_func_signature[broadcast_shapes] array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_broadcast_shapes array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_empty array_api_tests/test_data_type_functions.py::TestBroadcastShapes::test_error +array_api_tests/test_searching_functions.py::test_searchsorted_with_scalars array_api_tests/test_linalg.py::test_eig array_api_tests/test_linalg.py::test_eigvals From f48696934c449d111a6736dec8c8ff75019d3ecf Mon Sep 17 00:00:00 2001 From: Evgeni Burovski Date: Tue, 24 Feb 2026 13:01:42 +0100 Subject: [PATCH 2/3] TST: add skips for dask/expand_dims and numpy<2 isin --- dask-xfails.txt | 2 ++ numpy-1-26-xfails.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dask-xfails.txt b/dask-xfails.txt index 93a138cf..c2c54af2 100644 --- a/dask-xfails.txt +++ b/dask-xfails.txt @@ -140,6 +140,8 @@ array_api_tests/test_searching_functions.py::test_searchsorted_with_scalars array_api_tests/test_linalg.py::test_eig array_api_tests/test_linalg.py::test_eigvals +array_api_tests/test_manipulation_functions.py::TestExpandDims::test_expand_dims_tuples + # Stubs have a comment: (**note**: libraries may return ``NaN`` to match Python behavior.) 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] diff --git a/numpy-1-26-xfails.txt b/numpy-1-26-xfails.txt index f09be4a4..831de9e4 100644 --- a/numpy-1-26-xfails.txt +++ b/numpy-1-26-xfails.txt @@ -50,6 +50,8 @@ array_api_tests/test_operators_and_elementwise_functions.py::test_where_with_sca array_api_tests/test_creation_functions.py::test_meshgrid array_api_tests/test_data_type_functions.py::test_broadcast_arrays +# observed with numpy==1.26 only, looks like is fixed on numpy 2.x +array_api_tests/test_set_functions.py::TestIsin::test_isin_scalars # Stubs have a comment: (**note**: libraries may return ``NaN`` to match Python behavior.); Apparently, NumPy does just that array_api_tests/test_special_cases.py::test_binary[floor_divide(x1_i is +infinity and isfinite(x2_i) and x2_i > 0) -> +infinity] From 35b06e5f51008baf9bcd08938edb93a1f031969f Mon Sep 17 00:00:00 2001 From: Evgeni Burovski Date: Tue, 24 Feb 2026 13:03:16 +0100 Subject: [PATCH 3/3] BUG: torch: expand_dims axis is keyword or positional https://data-apis.org/array-api/2025.12/API_specification/generated/array_api.expand_dims.html --- array_api_compat/torch/_aliases.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/array_api_compat/torch/_aliases.py b/array_api_compat/torch/_aliases.py index f97a9c6f..69bd3763 100644 --- a/array_api_compat/torch/_aliases.py +++ b/array_api_compat/torch/_aliases.py @@ -694,7 +694,7 @@ def triu(x: Array, /, *, k: int = 0) -> Array: return torch.triu(x, k) # Functions that aren't in torch https://github.com/pytorch/pytorch/issues/58742 -def expand_dims(x: Array, /, *, axis: int | tuple[int, ...]) -> Array: +def expand_dims(x: Array, /, axis: int | tuple[int, ...]) -> Array: if isinstance(axis, int): return torch.unsqueeze(x, axis) else: