From f662f1e896789b294211d39dbc569cc8f3b916df Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 4 Dec 2023 21:56:16 -0700 Subject: [PATCH] Check compatibility of coordinate variable dimensions before assignment. Closes #428 --- cf_xarray/accessor.py | 11 +++++++---- cf_xarray/tests/test_accessor.py | 13 +++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/cf_xarray/accessor.py b/cf_xarray/accessor.py index 648f8748..56c29b34 100644 --- a/cf_xarray/accessor.py +++ b/cf_xarray/accessor.py @@ -842,11 +842,14 @@ def check_results(names, key): if scalar_key: if len(allnames) == 1: - da: DataArray = ds.reset_coords()[allnames[0]] # type: ignore - if allnames[0] in coords: - coords.remove(allnames[0]) + (name,) = allnames + da: DataArray = ds.reset_coords()[name] # type: ignore + if name in coords: + coords.remove(name) for k1 in coords: - da.coords[k1] = ds.variables[k1] + var = ds.variables[k1] + if set(var.dims) <= set(da.dims): + da.coords[k1] = ds.variables[k1] return da else: raise KeyError( diff --git a/cf_xarray/tests/test_accessor.py b/cf_xarray/tests/test_accessor.py index 85ac2787..566c6f3b 100644 --- a/cf_xarray/tests/test_accessor.py +++ b/cf_xarray/tests/test_accessor.py @@ -2036,3 +2036,16 @@ def test_sgrid(): "Y": {"jface", "jnode"}, "Z": {"kface", "knode"}, } + + +def test_ancillary_variables_extra_dim(): + ds = xr.Dataset( + { + "x": ( + "x", + range(10), + {"axis": "X", "ancillary_variables": "position_flag"}, + ), + } + ) + assert_identical(ds.cf["X"], ds["x"])