diff --git a/doc/whats-new.rst b/doc/whats-new.rst index a10a8c8851f..b35ec7b11db 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -57,7 +57,8 @@ Bug fixes Haacker `_. - Fix ``isel`` for multi-coordinate Xarray indexes (:issue:`10063`, :pull:`10066`). By `Benoit Bovy `_. - +- Always merge coordinates with "no_conflicts" to fix missing attributes after apply_ufunc + operations (:issue:`9317`). By `Jasper de Jong `_. Documentation ~~~~~~~~~~~~~ diff --git a/xarray/core/computation.py b/xarray/core/computation.py index 29de030ac5f..761455caa36 100644 --- a/xarray/core/computation.py +++ b/xarray/core/computation.py @@ -306,7 +306,7 @@ def apply_dataarray_vfunc( first_obj = _first_of_type(args, DataArray) name = first_obj.name result_coords, result_indexes = build_output_coords_and_indexes( - args, signature, exclude_dims, combine_attrs=keep_attrs + args, signature, exclude_dims, combine_attrs="no_conflicts" ) data_vars = [getattr(a, "variable", a) for a in args] @@ -522,7 +522,7 @@ def apply_dataset_vfunc( ) list_of_coords, list_of_indexes = build_output_coords_and_indexes( - args, signature, exclude_dims, combine_attrs=keep_attrs + args, signature, exclude_dims, combine_attrs="no_conflicts" ) args = tuple(getattr(arg, "data_vars", arg) for arg in args) diff --git a/xarray/tests/test_computation.py b/xarray/tests/test_computation.py index 1d80d874df0..864b65ff6b7 100644 --- a/xarray/tests/test_computation.py +++ b/xarray/tests/test_computation.py @@ -691,6 +691,12 @@ def test_broadcast_compat_data_2d() -> None: ) +def test_keep_coordattrs() -> None: + a = xr.DataArray([0, 1], [("x", [0, 1], {"a": "b"})]) + actual = apply_ufunc(operator.abs, a) + assert actual.x.attrs == a.x.attrs + + def test_keep_attrs() -> None: def add(a, b, keep_attrs): if keep_attrs: