From c4d3205ba1e17dc9a01f1fe80eeaf59001fccb9b Mon Sep 17 00:00:00 2001 From: knappersfy Date: Fri, 5 Dec 2025 16:04:14 +0100 Subject: [PATCH 1/5] pre-commit --- ci/requirements/environment.yml | 2 +- pixi.toml | 4 ++-- xarray/tests/test_array_api.py | 26 +++++++++++++------------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ci/requirements/environment.yml b/ci/requirements/environment.yml index eff54fe469e..dee3cc3c5e4 100644 --- a/ci/requirements/environment.yml +++ b/ci/requirements/environment.yml @@ -4,7 +4,7 @@ channels: - nodefaults dependencies: - aiobotocore - - array-api-strict<2.4 + - array-api-strict - boto3 - bottleneck - cartopy diff --git a/pixi.toml b/pixi.toml index 531d829340b..f44ba9a997e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -111,7 +111,7 @@ scipy = "1.13.*" # - Update the min version lower-bound in the corresponding feature(s) where applicable # - Update this section to pin to the min version -array-api-strict = "1.1.*" # dependency for testing the array api compat +array-api-strict = "2.4.*" # dependency for testing the array api compat boto3 = "1.34.*" bottleneck = "1.4.*" cartopy = "0.23.*" @@ -198,7 +198,7 @@ cartopy = "*" seaborn = "*" [feature.test.dependencies] -array-api-strict = "<2.4" +array-api-strict = "*" pytest = "*" pytest-asyncio = "*" pytest-cov = "*" diff --git a/xarray/tests/test_array_api.py b/xarray/tests/test_array_api.py index 022d2e3750e..cf1eca60fea 100644 --- a/xarray/tests/test_array_api.py +++ b/xarray/tests/test_array_api.py @@ -32,7 +32,7 @@ def test_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr + 7 actual = xp_arr + 7 assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -40,7 +40,7 @@ def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.sum() actual = xp_arr.sum() assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_aggregation_skipna(arrays) -> None: @@ -48,7 +48,7 @@ def test_aggregation_skipna(arrays) -> None: expected = np_arr.sum(skipna=False) actual = xp_arr.sum(skipna=False) assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) # casting nan warns @@ -59,7 +59,7 @@ def test_astype(arrays) -> None: actual = xp_arr.astype(xp.int64) assert actual.dtype == xp.int64 assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -72,7 +72,7 @@ def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: assert len(actual) == len(expected) for a, e in zip(actual, expected, strict=True): assert isinstance(a.data, Array) - assert_equal(a, e) + assert_equal(a.copy(data=np.asarray(a.data)), e) def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -83,12 +83,12 @@ def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) expected = np_arr * np_arr2 actual = xp_arr * xp_arr2 assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) expected = np_arr2 * np_arr actual = xp_arr2 * xp_arr assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -96,7 +96,7 @@ def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = xr.concat((np_arr, np_arr), dim="x") actual = xr.concat((xp_arr, xp_arr), dim="x") assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -104,7 +104,7 @@ def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr[:, 0] actual = xp_arr[:, 0] assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_properties(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -120,7 +120,7 @@ def test_reorganizing_operation(arrays: tuple[xr.DataArray, xr.DataArray]) -> No expected = np_arr.transpose() actual = xp_arr.transpose() assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -128,7 +128,7 @@ def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")) actual = xp_arr.stack(z=("x", "y")) assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -136,7 +136,7 @@ def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")).unstack() actual = xp_arr.stack(z=("x", "y")).unstack() assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_where() -> None: @@ -145,4 +145,4 @@ def test_where() -> None: expected = xr.where(np_arr, 1, 0) actual = xr.where(xp_arr, 1, 0) assert isinstance(actual.data, Array) - assert_equal(actual, expected) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) From 6170555c93b626009d68251772170b2206ccaa8f Mon Sep 17 00:00:00 2001 From: knappersfy Date: Fri, 5 Dec 2025 16:25:05 +0100 Subject: [PATCH 2/5] invert assert_equal array, instead of copying --- xarray/tests/test_array_api.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/xarray/tests/test_array_api.py b/xarray/tests/test_array_api.py index cf1eca60fea..427d9d69711 100644 --- a/xarray/tests/test_array_api.py +++ b/xarray/tests/test_array_api.py @@ -32,7 +32,7 @@ def test_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr + 7 actual = xp_arr + 7 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -40,7 +40,7 @@ def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.sum() actual = xp_arr.sum() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_aggregation_skipna(arrays) -> None: @@ -48,7 +48,7 @@ def test_aggregation_skipna(arrays) -> None: expected = np_arr.sum(skipna=False) actual = xp_arr.sum(skipna=False) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) # casting nan warns @@ -59,7 +59,7 @@ def test_astype(arrays) -> None: actual = xp_arr.astype(xp.int64) assert actual.dtype == xp.int64 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -72,7 +72,7 @@ def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: assert len(actual) == len(expected) for a, e in zip(actual, expected, strict=True): assert isinstance(a.data, Array) - assert_equal(a.copy(data=np.asarray(a.data)), e) + assert_equal(e, a) def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -83,12 +83,12 @@ def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) expected = np_arr * np_arr2 actual = xp_arr * xp_arr2 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) expected = np_arr2 * np_arr actual = xp_arr2 * xp_arr assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -96,7 +96,7 @@ def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = xr.concat((np_arr, np_arr), dim="x") actual = xr.concat((xp_arr, xp_arr), dim="x") assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -104,7 +104,7 @@ def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr[:, 0] actual = xp_arr[:, 0] assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_properties(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -120,7 +120,7 @@ def test_reorganizing_operation(arrays: tuple[xr.DataArray, xr.DataArray]) -> No expected = np_arr.transpose() actual = xp_arr.transpose() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -128,7 +128,7 @@ def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")) actual = xp_arr.stack(z=("x", "y")) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -136,7 +136,7 @@ def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")).unstack() actual = xp_arr.stack(z=("x", "y")).unstack() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) def test_where() -> None: @@ -145,4 +145,4 @@ def test_where() -> None: expected = xr.where(np_arr, 1, 0) actual = xr.where(xp_arr, 1, 0) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + assert_equal(expected, actual) From 6ec4a9e26fb1c3bf2b016a44784307d8a820b82a Mon Sep 17 00:00:00 2001 From: knappersfy Date: Mon, 8 Dec 2025 08:45:07 +0100 Subject: [PATCH 3/5] add ignore for mypy --- xarray/tests/test_dtypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/tests/test_dtypes.py b/xarray/tests/test_dtypes.py index 0ccda1d8074..a1bdd9082ef 100644 --- a/xarray/tests/test_dtypes.py +++ b/xarray/tests/test_dtypes.py @@ -15,7 +15,7 @@ class DummyArrayAPINamespace: int32 = None # type: ignore[unused-ignore,var-annotated] float64 = None # type: ignore[unused-ignore,var-annotated] - array_api_strict = DummyArrayAPINamespace + array_api_strict = DummyArrayAPINamespace # type: ignore[misc, assignment, unused-ignore] @pytest.mark.parametrize( From 9a915a33da7b28574f55227de91b124a2306918e Mon Sep 17 00:00:00 2001 From: knappersfy Date: Mon, 8 Dec 2025 09:18:40 +0100 Subject: [PATCH 4/5] convert arrays to np array --- xarray/tests/test_array_api.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/xarray/tests/test_array_api.py b/xarray/tests/test_array_api.py index 427d9d69711..cf1eca60fea 100644 --- a/xarray/tests/test_array_api.py +++ b/xarray/tests/test_array_api.py @@ -32,7 +32,7 @@ def test_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr + 7 actual = xp_arr + 7 assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -40,7 +40,7 @@ def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.sum() actual = xp_arr.sum() assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_aggregation_skipna(arrays) -> None: @@ -48,7 +48,7 @@ def test_aggregation_skipna(arrays) -> None: expected = np_arr.sum(skipna=False) actual = xp_arr.sum(skipna=False) assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) # casting nan warns @@ -59,7 +59,7 @@ def test_astype(arrays) -> None: actual = xp_arr.astype(xp.int64) assert actual.dtype == xp.int64 assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -72,7 +72,7 @@ def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: assert len(actual) == len(expected) for a, e in zip(actual, expected, strict=True): assert isinstance(a.data, Array) - assert_equal(e, a) + assert_equal(a.copy(data=np.asarray(a.data)), e) def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -83,12 +83,12 @@ def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) expected = np_arr * np_arr2 actual = xp_arr * xp_arr2 assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) expected = np_arr2 * np_arr actual = xp_arr2 * xp_arr assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -96,7 +96,7 @@ def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = xr.concat((np_arr, np_arr), dim="x") actual = xr.concat((xp_arr, xp_arr), dim="x") assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -104,7 +104,7 @@ def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr[:, 0] actual = xp_arr[:, 0] assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_properties(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -120,7 +120,7 @@ def test_reorganizing_operation(arrays: tuple[xr.DataArray, xr.DataArray]) -> No expected = np_arr.transpose() actual = xp_arr.transpose() assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -128,7 +128,7 @@ def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")) actual = xp_arr.stack(z=("x", "y")) assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -136,7 +136,7 @@ def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")).unstack() actual = xp_arr.stack(z=("x", "y")).unstack() assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) def test_where() -> None: @@ -145,4 +145,4 @@ def test_where() -> None: expected = xr.where(np_arr, 1, 0) actual = xr.where(xp_arr, 1, 0) assert isinstance(actual.data, Array) - assert_equal(expected, actual) + assert_equal(actual.copy(data=np.asarray(actual.data)), expected) From 8c1f8184d6a3ab2b9badbb6086b87bea006ba3fd Mon Sep 17 00:00:00 2001 From: knappersfy Date: Mon, 8 Dec 2025 09:27:54 +0100 Subject: [PATCH 5/5] easier to read --- xarray/tests/test_array_api.py | 39 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/xarray/tests/test_array_api.py b/xarray/tests/test_array_api.py index cf1eca60fea..9a078cb04cd 100644 --- a/xarray/tests/test_array_api.py +++ b/xarray/tests/test_array_api.py @@ -32,7 +32,8 @@ def test_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr + 7 actual = xp_arr + 7 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -40,7 +41,8 @@ def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.sum() actual = xp_arr.sum() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_aggregation_skipna(arrays) -> None: @@ -48,7 +50,8 @@ def test_aggregation_skipna(arrays) -> None: expected = np_arr.sum(skipna=False) actual = xp_arr.sum(skipna=False) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) # casting nan warns @@ -59,7 +62,8 @@ def test_astype(arrays) -> None: actual = xp_arr.astype(xp.int64) assert actual.dtype == xp.int64 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -72,7 +76,8 @@ def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: assert len(actual) == len(expected) for a, e in zip(actual, expected, strict=True): assert isinstance(a.data, Array) - assert_equal(a.copy(data=np.asarray(a.data)), e) + a_np = a.copy(data=np.asarray(a.data)) + assert_equal(a_np, e) def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -83,12 +88,14 @@ def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) expected = np_arr * np_arr2 actual = xp_arr * xp_arr2 assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) expected = np_arr2 * np_arr actual = xp_arr2 * xp_arr assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -96,7 +103,8 @@ def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = xr.concat((np_arr, np_arr), dim="x") actual = xr.concat((xp_arr, xp_arr), dim="x") assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -104,7 +112,8 @@ def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr[:, 0] actual = xp_arr[:, 0] assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_properties(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -120,7 +129,8 @@ def test_reorganizing_operation(arrays: tuple[xr.DataArray, xr.DataArray]) -> No expected = np_arr.transpose() actual = xp_arr.transpose() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -128,7 +138,8 @@ def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")) actual = xp_arr.stack(z=("x", "y")) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: @@ -136,7 +147,8 @@ def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None: expected = np_arr.stack(z=("x", "y")).unstack() actual = xp_arr.stack(z=("x", "y")).unstack() assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected) def test_where() -> None: @@ -145,4 +157,5 @@ def test_where() -> None: expected = xr.where(np_arr, 1, 0) actual = xr.where(xp_arr, 1, 0) assert isinstance(actual.data, Array) - assert_equal(actual.copy(data=np.asarray(actual.data)), expected) + actual_np = actual.copy(data=np.asarray(actual.data)) + assert_equal(actual_np, expected)