Source code for utopya.eval.data_ops
"""Custom data operations"""
import copy as _copy
import dantro as _dantro
from .transform import is_operation as _is_operation
# -----------------------------------------------------------------------------
[docs]@_is_operation
def update_attrs(d, attrs: dict):
"""Updates the data attributes in ``d`` with ``attrs``.
Args:
d (xarray.DataArray): The data array to write the attributes *to*.
attrs (dict): The attributes to use for updating
Returns:
xarray.DataArray:
A new data array like ``d`` with updated attributes.
"""
if isinstance(d, _dantro.base.BaseDataContainer):
d = d.data
d = d.copy()
d.attrs.update(_copy.deepcopy(attrs))
return d
[docs]@_is_operation
def update_with_attrs_from(t, s):
"""Updates the data attributes in ``t`` with those from ``s``.
Args:
t (xarray.DataArray): The data array to write the attributes *to*.
s (xarray.DataArray): The data array to copy the attributes *from*.
Returns:
xarray.DataArray:
A new data array for ``t`` with updated attributes from ``s``.
"""
if isinstance(t, _dantro.base.BaseDataContainer):
t = t.data
if isinstance(s, _dantro.base.BaseDataContainer):
s = s.data
return update_attrs(t, s.attrs)