From 366aa78e657b04ee20b12a008d5e3da8f213cd07 Mon Sep 17 00:00:00 2001 From: Martin Fleischmann Date: Thu, 19 Jun 2025 22:31:43 +0200 Subject: [PATCH 1/2] fix geometry detection --- cf_xarray/geometry.py | 5 ++++- cf_xarray/tests/test_geometry.py | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/cf_xarray/geometry.py b/cf_xarray/geometry.py index e6854448..fe90bd0d 100644 --- a/cf_xarray/geometry.py +++ b/cf_xarray/geometry.py @@ -298,8 +298,11 @@ def encode_geometries(ds: xr.Dataset): geom_var_names = [ name for name, var in ds._variables.items() - if var.dtype == "O" and isinstance(var.data.flat[0], SHAPELY_TYPES) + if var.dtype == "geometry" + or (var.dtype == "O" and isinstance(var.data.flat[0], SHAPELY_TYPES)) ] + geom_var_names + if not geom_var_names: return ds diff --git a/cf_xarray/tests/test_geometry.py b/cf_xarray/tests/test_geometry.py index db845a6c..deb784c2 100644 --- a/cf_xarray/tests/test_geometry.py +++ b/cf_xarray/tests/test_geometry.py @@ -507,5 +507,7 @@ def test_encode_decode(geometry_ds, polygon_geometry): ) multi_ds = xr.merge([polyds, geometry_ds[1]]) for ds in (geometry_ds[1], polygon_geometry.to_dataset(), geom_dim_ds, multi_ds): - roundtripped = decode_geometries(encode_geometries(ds)) + encoded = encode_geometries(ds) + assert len(encoded.data_vars) > len(ds.data_vars) + roundtripped = decode_geometries(encoded) xr.testing.assert_identical(ds, roundtripped) From dbba5b48078cd10f4733e11c8df5b3755d52d8e7 Mon Sep 17 00:00:00 2001 From: Martin Fleischmann Date: Thu, 19 Jun 2025 22:33:35 +0200 Subject: [PATCH 2/2] cleanup --- cf_xarray/geometry.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cf_xarray/geometry.py b/cf_xarray/geometry.py index fe90bd0d..fb520796 100644 --- a/cf_xarray/geometry.py +++ b/cf_xarray/geometry.py @@ -301,7 +301,6 @@ def encode_geometries(ds: xr.Dataset): if var.dtype == "geometry" or (var.dtype == "O" and isinstance(var.data.flat[0], SHAPELY_TYPES)) ] - geom_var_names if not geom_var_names: return ds