Skip to content

Commit 19a067d

Browse files
committed
openeo.testing.results support empty "crs" variables in netCDF
Terrascope netCDF results typically have an empty "crs" variable that trips up data set comparison
1 parent ba19dda commit 19a067d

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

openeo/testing/results.py

+9
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ def _load_xarray_netcdf(path: Union[str, Path], **kwargs) -> xarray.Dataset:
2525
"""
2626
Load a netCDF file as Xarray Dataset
2727
"""
28+
_log.debug(f"_load_xarray_netcdf: {path!r}")
2829
return xarray.load_dataset(path, **kwargs)
2930

3031

3132
def _load_rioxarray_geotiff(path: Union[str, Path], **kwargs) -> xarray.DataArray:
3233
"""
3334
Load a GeoTIFF file as Xarray DataArray (using `rioxarray` extension).
3435
"""
36+
_log.debug(f"_load_rioxarray_geotiff: {path!r}")
3537
try:
3638
import rioxarray
3739
except ImportError as e:
@@ -113,6 +115,7 @@ def _compare_xarray_dataarray(
113115
issues = []
114116

115117
# TODO: isn't there functionality in Xarray itself to compare these aspects?
118+
# TODO: also compare attributes of the DataArray?
116119
if actual.dims != expected.dims:
117120
issues.append(f"Dimension mismatch: {actual.dims} != {expected.dims}")
118121
for dim in set(expected.dims).intersection(actual.dims):
@@ -179,9 +182,15 @@ def _compare_xarray_datasets(
179182
all_issues = []
180183
actual_vars = set(actual.data_vars)
181184
expected_vars = set(expected.data_vars)
185+
_log.debug(f"_compare_xarray_datasets: {actual_vars=} {expected_vars=}")
182186
if actual_vars != expected_vars:
183187
all_issues.append(f"Xarray DataSet variables mismatch: {actual_vars} != {expected_vars}")
184188
for var in expected_vars.intersection(actual_vars):
189+
if not expected.data_vars[var].coords:
190+
_log.debug(f"_compare_xarray_datasets: skipping variable {var!r} (empty coords)")
191+
# TODO: still compare attributes of the DataArray?
192+
continue
193+
_log.debug(f"_compare_xarray_datasets: comparing variable {var!r}")
185194
issues = _compare_xarray_dataarray(actual[var], expected[var], rtol=rtol, atol=atol)
186195
if issues:
187196
all_issues.append(f"Issues for variable {var!r}:")

tests/testing/test_results.py

+15
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,21 @@ def test_assert_xarray_dataset_allclose_tolerance(self, kwargs, assertion_error)
254254
with raises_assertion_error_or_not(message=assertion_error):
255255
assert_xarray_dataset_allclose(actual=actual, expected=expected, **kwargs)
256256

257+
def test_assert_xarray_dataset_allclose_empty_coords_handling(self):
258+
expected = xarray.Dataset(
259+
{
260+
"b02": xarray.DataArray([1, 2, 3]),
261+
"crs": xarray.DataArray(b"", attrs={"spatial_ref": "meh"}),
262+
}
263+
)
264+
actual = xarray.Dataset(
265+
{
266+
"b02": xarray.DataArray([1, 2, 3]),
267+
"crs": xarray.DataArray(b"", attrs={"spatial_ref": "meh"}),
268+
}
269+
)
270+
assert_xarray_dataset_allclose(actual=actual, expected=expected)
271+
257272

258273
class TestAssertJobResults:
259274
@pytest.fixture

0 commit comments

Comments
 (0)