From abbffea1995ec671a2af558563e46d49c30a9443 Mon Sep 17 00:00:00 2001 From: Ian Hunt-Isaak Date: Mon, 17 Mar 2025 17:14:08 -0400 Subject: [PATCH 1/2] test: update render of simple_datatree --- xarray/tests/conftest.py | 42 +++++++++++++------------- xarray/tests/test_backends_datatree.py | 18 +++++++++++ 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/xarray/tests/conftest.py b/xarray/tests/conftest.py index c3f1ccbfe3c..8fd509198b4 100644 --- a/xarray/tests/conftest.py +++ b/xarray/tests/conftest.py @@ -164,27 +164,27 @@ def create_test_datatree(): Create a test datatree with this structure: - |-- set1 - | |-- - | | Dimensions: () - | | Data variables: - | | a int64 0 - | | b int64 1 - | |-- set1 - | |-- set2 - |-- set2 - | |-- - | | Dimensions: (x: 2) - | | Data variables: - | | a (x) int64 2, 3 - | | b (x) int64 0.1, 0.2 - | |-- set1 - |-- set3 - |-- - | Dimensions: (x: 2, y: 3) - | Data variables: - | a (y) int64 6, 7, 8 - | set0 (x) int64 9, 10 + Group: / + │ Dimensions: (y: 3, x: 2) + │ Dimensions without coordinates: y, x + │ Data variables: + │ a (y) int64 24B 6 7 8 + │ set0 (x) int64 16B 9 10 + ├── Group: /set1 + │ │ Dimensions: () + │ │ Data variables: + │ │ a int64 8B 0 + │ │ b int64 8B 1 + │ ├── Group: /set1/set1 + │ └── Group: /set1/set2 + ├── Group: /set2 + │ │ Dimensions: (x: 2) + │ │ Dimensions without coordinates: x + │ │ Data variables: + │ │ a (x) int64 16B 2 3 + │ │ b (x) float64 16B 0.1 0.2 + │ └── Group: /set2/set1 + └── Group: /set3 The structure has deliberately repeated names of tags, variables, and dimensions in order to better check for bugs caused by name conflicts. diff --git a/xarray/tests/test_backends_datatree.py b/xarray/tests/test_backends_datatree.py index efc1e131722..60e65bf05e1 100644 --- a/xarray/tests/test_backends_datatree.py +++ b/xarray/tests/test_backends_datatree.py @@ -164,6 +164,24 @@ def test_to_netcdf(self, tmpdir, simple_datatree): assert roundtrip_dt._close is not None assert_equal(original_dt, roundtrip_dt) + def test_decode_cf(self, tmpdir): + filepath = tmpdir / "test-cf-convention.nc" + original_dt = xr.DataTree( + xr.Dataset( + { + "test": xr.DataArray( + data=np.array([0, 1, 2], dtype=np.uint16), + attrs={"_FillValue": 99}, + ), + } + ) + ) + original_dt.to_netcdf(filepath, engine=self.engine) + with open_datatree( + filepath, engine=self.engine, decode_cf=False + ) as roundtrip_dt: + assert original_dt["test"].dtype == roundtrip_dt["test"].dtype + def test_to_netcdf_inherited_coords(self, tmpdir): filepath = tmpdir / "test.nc" original_dt = DataTree.from_dict( From b5a538fe9562659ffea913e8e61d73d16b5a3c32 Mon Sep 17 00:00:00 2001 From: Ian Hunt-Isaak Date: Mon, 17 Mar 2025 18:37:10 -0400 Subject: [PATCH 2/2] bugfix: correctly propagate decode_cf=False for datatrees --- xarray/backends/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index c205ed23aa9..7a23bceb27a 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -1119,7 +1119,7 @@ def open_datatree( decoders = _resolve_decoders_kwargs( decode_cf, - open_backend_dataset_parameters=(), + open_backend_dataset_parameters=backend.open_dataset_parameters, mask_and_scale=mask_and_scale, decode_times=decode_times, decode_timedelta=decode_timedelta,