@@ -1202,32 +1202,6 @@ def test_identical_coords_no_computes():
12021202 assert_identical (c , a )
12031203
12041204
1205- def test_lazy_array_equiv ():
1206- lons1 = xr .DataArray (da .zeros ((10 , 10 ), chunks = 2 ), dims = ("y" , "x" ))
1207- lons2 = xr .DataArray (da .zeros ((10 , 10 ), chunks = 2 ), dims = ("y" , "x" ))
1208- var1 = lons1 .variable
1209- var2 = lons2 .variable
1210- with raise_if_dask_computes ():
1211- lons1 .equals (lons2 )
1212- with raise_if_dask_computes ():
1213- var1 .equals (var2 / 2 , equiv = lazy_array_equiv )
1214- assert var1 .equals (var2 .compute (), equiv = lazy_array_equiv ) is None
1215- assert var1 .compute ().equals (var2 .compute (), equiv = lazy_array_equiv ) is None
1216-
1217- with raise_if_dask_computes ():
1218- assert lons1 .equals (lons1 .transpose ("y" , "x" ))
1219-
1220- with raise_if_dask_computes ():
1221- for compat in [
1222- "broadcast_equals" ,
1223- "equals" ,
1224- "override" ,
1225- "identical" ,
1226- "no_conflicts" ,
1227- ]:
1228- xr .merge ([lons1 , lons2 ], compat = compat )
1229-
1230-
12311205@pytest .mark .parametrize (
12321206 "obj" , [make_da (), make_da ().compute (), make_ds (), make_ds ().compute ()]
12331207)
@@ -1315,3 +1289,49 @@ def test_normalize_token_with_backend(map_ds):
13151289 map_ds .to_netcdf (tmp_file )
13161290 read = xr .open_dataset (tmp_file )
13171291 assert not dask .base .tokenize (map_ds ) == dask .base .tokenize (read )
1292+
1293+
1294+ @pytest .mark .parametrize (
1295+ "compat" , ["broadcast_equals" , "equals" , "identical" , "no_conflicts" ]
1296+ )
1297+ def test_lazy_array_equiv_variables (compat ):
1298+ var1 = xr .Variable (("y" , "x" ), da .zeros ((10 , 10 ), chunks = 2 ))
1299+ var2 = xr .Variable (("y" , "x" ), da .zeros ((10 , 10 ), chunks = 2 ))
1300+ var3 = xr .Variable (("y" , "x" ), da .zeros ((20 , 10 ), chunks = 2 ))
1301+
1302+ with raise_if_dask_computes ():
1303+ assert getattr (var1 , compat )(var2 , equiv = lazy_array_equiv )
1304+ # values are actually equal, but we don't know that till we compute, return None
1305+ with raise_if_dask_computes ():
1306+ assert getattr (var1 , compat )(var2 / 2 , equiv = lazy_array_equiv ) is None
1307+
1308+ # shapes are not equal, return False without computes
1309+ with raise_if_dask_computes ():
1310+ assert getattr (var1 , compat )(var3 , equiv = lazy_array_equiv ) is False
1311+
1312+ # if one or both arrays are numpy, return None
1313+ assert getattr (var1 , compat )(var2 .compute (), equiv = lazy_array_equiv ) is None
1314+ assert (
1315+ getattr (var1 .compute (), compat )(var2 .compute (), equiv = lazy_array_equiv ) is None
1316+ )
1317+
1318+ with raise_if_dask_computes ():
1319+ assert getattr (var1 , compat )(var2 .transpose ("y" , "x" ))
1320+
1321+
1322+ @pytest .mark .parametrize (
1323+ "compat" , ["broadcast_equals" , "equals" , "identical" , "no_conflicts" ]
1324+ )
1325+ def test_lazy_array_equiv_merge (compat ):
1326+ da1 = xr .DataArray (da .zeros ((10 , 10 ), chunks = 2 ), dims = ("y" , "x" ))
1327+ da2 = xr .DataArray (da .zeros ((10 , 10 ), chunks = 2 ), dims = ("y" , "x" ))
1328+ da3 = xr .DataArray (da .ones ((20 , 10 ), chunks = 2 ), dims = ("y" , "x" ))
1329+
1330+ with raise_if_dask_computes ():
1331+ xr .merge ([da1 , da2 ], compat = compat )
1332+ # shapes are not equal; no computes necessary
1333+ with raise_if_dask_computes (max_computes = 0 ):
1334+ with pytest .raises (ValueError ):
1335+ xr .merge ([da1 , da3 ], compat = compat )
1336+ with raise_if_dask_computes (max_computes = 2 ):
1337+ xr .merge ([da1 , da2 / 2 ], compat = compat )
0 commit comments