Skip to content

Commit 4a66e7c

Browse files
committed
review suggestions.
1 parent 8739ddd commit 4a66e7c

File tree

1 file changed

+28
-45
lines changed

1 file changed

+28
-45
lines changed

xarray/core/duck_array_ops.py

Lines changed: 28 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,10 @@ def as_shared_dtype(scalars_or_arrays):
174174
return [x.astype(out_type, copy=False) for x in arrays]
175175

176176

177-
def allclose_or_equiv(arr1, arr2, rtol=1e-5, atol=1e-8):
178-
"""Like np.allclose, but also allows values to be NaN in both arrays
177+
def lazy_array_equiv(arr1, arr2):
178+
"""Like array_equal, but doesn't actually compare values.
179+
Returns True or False when equality can be determined without computing.
180+
Returns None when equality cannot determined (e.g. one or both of arr1, arr2 are numpy arrays)
179181
"""
180182
arr1 = asarray(arr1)
181183
arr2 = asarray(arr2)
@@ -189,47 +191,34 @@ def allclose_or_equiv(arr1, arr2, rtol=1e-5, atol=1e-8):
189191
# GH3068
190192
if arr1.name == arr2.name:
191193
return True
192-
return bool(isclose(arr1, arr2, rtol=rtol, atol=atol, equal_nan=True).all())
194+
return None
193195

194196

195-
def lazy_array_equiv(arr1, arr2):
196-
"""Like array_equal, but doesn't actually compare values.
197-
Returns True or False when equality can be determined without computing.
198-
Returns None when equality cannot determined (e.g. one or both of arr1, arr2 are numpy arrays)
197+
def allclose_or_equiv(arr1, arr2, rtol=1e-5, atol=1e-8):
198+
"""Like np.allclose, but also allows values to be NaN in both arrays
199199
"""
200200
arr1 = asarray(arr1)
201201
arr2 = asarray(arr2)
202-
if arr1.shape != arr2.shape:
203-
return False
204-
if (
205-
dask_array
206-
and isinstance(arr1, dask_array.Array)
207-
and isinstance(arr2, dask_array.Array)
208-
):
209-
# GH3068
210-
if arr1.name == arr2.name:
211-
return True
202+
lazy_equiv = lazy_array_equiv(arr1, arr2)
203+
if lazy_equiv is None:
204+
return bool(isclose(arr1, arr2, rtol=rtol, atol=atol, equal_nan=True).all())
205+
else:
206+
return lazy_equiv
212207

213208

214209
def array_equiv(arr1, arr2):
215210
"""Like np.array_equal, but also allows values to be NaN in both arrays
216211
"""
217212
arr1 = asarray(arr1)
218213
arr2 = asarray(arr2)
219-
if arr1.shape != arr2.shape:
220-
return False
221-
if (
222-
dask_array
223-
and isinstance(arr1, dask_array.Array)
224-
and isinstance(arr2, dask_array.Array)
225-
):
226-
# GH3068
227-
if arr1.name == arr2.name:
228-
return True
229-
with warnings.catch_warnings():
230-
warnings.filterwarnings("ignore", "In the future, 'NAT == x'")
231-
flag_array = (arr1 == arr2) | (isnull(arr1) & isnull(arr2))
232-
return bool(flag_array.all())
214+
lazy_equiv = lazy_array_equiv(arr1, arr2)
215+
if lazy_equiv is None:
216+
with warnings.catch_warnings():
217+
warnings.filterwarnings("ignore", "In the future, 'NAT == x'")
218+
flag_array = (arr1 == arr2) | (isnull(arr1) & isnull(arr2))
219+
return bool(flag_array.all())
220+
else:
221+
return lazy_equiv
233222

234223

235224
def array_notnull_equiv(arr1, arr2):
@@ -238,20 +227,14 @@ def array_notnull_equiv(arr1, arr2):
238227
"""
239228
arr1 = asarray(arr1)
240229
arr2 = asarray(arr2)
241-
if arr1.shape != arr2.shape:
242-
return False
243-
if (
244-
dask_array
245-
and isinstance(arr1, dask_array.Array)
246-
and isinstance(arr2, dask_array.Array)
247-
):
248-
# GH3068
249-
if arr1.name == arr2.name:
250-
return True
251-
with warnings.catch_warnings():
252-
warnings.filterwarnings("ignore", "In the future, 'NAT == x'")
253-
flag_array = (arr1 == arr2) | isnull(arr1) | isnull(arr2)
254-
return bool(flag_array.all())
230+
lazy_equiv = lazy_array_equiv(arr1, arr2)
231+
if lazy_equiv is None:
232+
with warnings.catch_warnings():
233+
warnings.filterwarnings("ignore", "In the future, 'NAT == x'")
234+
flag_array = (arr1 == arr2) | isnull(arr1) | isnull(arr2)
235+
return bool(flag_array.all())
236+
else:
237+
return lazy_equiv
255238

256239

257240
def count(data, axis=None):

0 commit comments

Comments
 (0)