Skip to content

Commit 56f311a

Browse files
JJFlorianknappersfy
andauthored
Unpin array api strict (#10983)
* pre-commit * invert assert_equal array, instead of copying * add ignore for mypy * convert arrays to np array * easier to read --------- Co-authored-by: knappersfy <[email protected]>
1 parent 00d18bf commit 56f311a

File tree

4 files changed

+30
-17
lines changed

4 files changed

+30
-17
lines changed

ci/requirements/environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ channels:
44
- nodefaults
55
dependencies:
66
- aiobotocore
7-
- array-api-strict<2.4
7+
- array-api-strict
88
- boto3
99
- bottleneck
1010
- cartopy

pixi.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ scipy = "1.13.*"
111111
# - Update the min version lower-bound in the corresponding feature(s) where applicable
112112
# - Update this section to pin to the min version
113113

114-
array-api-strict = "1.1.*" # dependency for testing the array api compat
114+
array-api-strict = "2.4.*" # dependency for testing the array api compat
115115
boto3 = "1.34.*"
116116
bottleneck = "1.4.*"
117117
cartopy = "0.23.*"
@@ -198,7 +198,7 @@ cartopy = "*"
198198
seaborn = "*"
199199

200200
[feature.test.dependencies]
201-
array-api-strict = "<2.4"
201+
array-api-strict = "*"
202202
pytest = "*"
203203
pytest-asyncio = "*"
204204
pytest-cov = "*"

xarray/tests/test_array_api.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,26 @@ def test_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
3232
expected = np_arr + 7
3333
actual = xp_arr + 7
3434
assert isinstance(actual.data, Array)
35-
assert_equal(actual, expected)
35+
actual_np = actual.copy(data=np.asarray(actual.data))
36+
assert_equal(actual_np, expected)
3637

3738

3839
def test_aggregation(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
3940
np_arr, xp_arr = arrays
4041
expected = np_arr.sum()
4142
actual = xp_arr.sum()
4243
assert isinstance(actual.data, Array)
43-
assert_equal(actual, expected)
44+
actual_np = actual.copy(data=np.asarray(actual.data))
45+
assert_equal(actual_np, expected)
4446

4547

4648
def test_aggregation_skipna(arrays) -> None:
4749
np_arr, xp_arr = arrays
4850
expected = np_arr.sum(skipna=False)
4951
actual = xp_arr.sum(skipna=False)
5052
assert isinstance(actual.data, Array)
51-
assert_equal(actual, expected)
53+
actual_np = actual.copy(data=np.asarray(actual.data))
54+
assert_equal(actual_np, expected)
5255

5356

5457
# casting nan warns
@@ -59,7 +62,8 @@ def test_astype(arrays) -> None:
5962
actual = xp_arr.astype(xp.int64)
6063
assert actual.dtype == xp.int64
6164
assert isinstance(actual.data, Array)
62-
assert_equal(actual, expected)
65+
actual_np = actual.copy(data=np.asarray(actual.data))
66+
assert_equal(actual_np, expected)
6367

6468

6569
def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
@@ -72,7 +76,8 @@ def test_broadcast(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
7276
assert len(actual) == len(expected)
7377
for a, e in zip(actual, expected, strict=True):
7478
assert isinstance(a.data, Array)
75-
assert_equal(a, e)
79+
a_np = a.copy(data=np.asarray(a.data))
80+
assert_equal(a_np, e)
7681

7782

7883
def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
@@ -83,28 +88,32 @@ def test_broadcast_during_arithmetic(arrays: tuple[xr.DataArray, xr.DataArray])
8388
expected = np_arr * np_arr2
8489
actual = xp_arr * xp_arr2
8590
assert isinstance(actual.data, Array)
86-
assert_equal(actual, expected)
91+
actual_np = actual.copy(data=np.asarray(actual.data))
92+
assert_equal(actual_np, expected)
8793

8894
expected = np_arr2 * np_arr
8995
actual = xp_arr2 * xp_arr
9096
assert isinstance(actual.data, Array)
91-
assert_equal(actual, expected)
97+
actual_np = actual.copy(data=np.asarray(actual.data))
98+
assert_equal(actual_np, expected)
9299

93100

94101
def test_concat(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
95102
np_arr, xp_arr = arrays
96103
expected = xr.concat((np_arr, np_arr), dim="x")
97104
actual = xr.concat((xp_arr, xp_arr), dim="x")
98105
assert isinstance(actual.data, Array)
99-
assert_equal(actual, expected)
106+
actual_np = actual.copy(data=np.asarray(actual.data))
107+
assert_equal(actual_np, expected)
100108

101109

102110
def test_indexing(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
103111
np_arr, xp_arr = arrays
104112
expected = np_arr[:, 0]
105113
actual = xp_arr[:, 0]
106114
assert isinstance(actual.data, Array)
107-
assert_equal(actual, expected)
115+
actual_np = actual.copy(data=np.asarray(actual.data))
116+
assert_equal(actual_np, expected)
108117

109118

110119
def test_properties(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
@@ -120,23 +129,26 @@ def test_reorganizing_operation(arrays: tuple[xr.DataArray, xr.DataArray]) -> No
120129
expected = np_arr.transpose()
121130
actual = xp_arr.transpose()
122131
assert isinstance(actual.data, Array)
123-
assert_equal(actual, expected)
132+
actual_np = actual.copy(data=np.asarray(actual.data))
133+
assert_equal(actual_np, expected)
124134

125135

126136
def test_stack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
127137
np_arr, xp_arr = arrays
128138
expected = np_arr.stack(z=("x", "y"))
129139
actual = xp_arr.stack(z=("x", "y"))
130140
assert isinstance(actual.data, Array)
131-
assert_equal(actual, expected)
141+
actual_np = actual.copy(data=np.asarray(actual.data))
142+
assert_equal(actual_np, expected)
132143

133144

134145
def test_unstack(arrays: tuple[xr.DataArray, xr.DataArray]) -> None:
135146
np_arr, xp_arr = arrays
136147
expected = np_arr.stack(z=("x", "y")).unstack()
137148
actual = xp_arr.stack(z=("x", "y")).unstack()
138149
assert isinstance(actual.data, Array)
139-
assert_equal(actual, expected)
150+
actual_np = actual.copy(data=np.asarray(actual.data))
151+
assert_equal(actual_np, expected)
140152

141153

142154
def test_where() -> None:
@@ -145,4 +157,5 @@ def test_where() -> None:
145157
expected = xr.where(np_arr, 1, 0)
146158
actual = xr.where(xp_arr, 1, 0)
147159
assert isinstance(actual.data, Array)
148-
assert_equal(actual, expected)
160+
actual_np = actual.copy(data=np.asarray(actual.data))
161+
assert_equal(actual_np, expected)

xarray/tests/test_dtypes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DummyArrayAPINamespace:
1515
int32 = None # type: ignore[unused-ignore,var-annotated]
1616
float64 = None # type: ignore[unused-ignore,var-annotated]
1717

18-
array_api_strict = DummyArrayAPINamespace
18+
array_api_strict = DummyArrayAPINamespace # type: ignore[misc, assignment, unused-ignore]
1919

2020

2121
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)