diff --git a/xarray/computation/apply_ufunc.py b/xarray/computation/apply_ufunc.py index 50c3ed4bbd8..41f4adb5fd5 100644 --- a/xarray/computation/apply_ufunc.py +++ b/xarray/computation/apply_ufunc.py @@ -30,10 +30,7 @@ from xarray.core.formatting import limit_lines from xarray.core.indexes import Index, filter_indexes_from_coords from xarray.core.options import _get_keep_attrs -from xarray.core.utils import ( - is_dict_like, - result_name, -) +from xarray.core.utils import is_dict_like, result_name from xarray.core.variable import Variable from xarray.namedarray.parallelcompat import get_chunked_array_type from xarray.namedarray.pycompat import is_chunked_array @@ -1212,6 +1209,8 @@ def apply_ufunc( dask_gufunc_kwargs.setdefault("output_sizes", output_sizes) if kwargs: + if "where" in kwargs and isinstance(kwargs["where"], DataArray): + kwargs["where"] = kwargs["where"].data # type:ignore[index] func = functools.partial(func, **kwargs) if keep_attrs is None: diff --git a/xarray/tests/test_computation.py b/xarray/tests/test_computation.py index dc7016238df..cb12f3df534 100644 --- a/xarray/tests/test_computation.py +++ b/xarray/tests/test_computation.py @@ -2627,3 +2627,14 @@ def test_complex_number_reduce(compute_backend): # Check that xarray doesn't call into numbagg, which doesn't compile for complex # numbers at the moment (but will when numba supports dynamic compilation) da.min() + + +def test_fix() -> None: + val = 3.0 + val_fixed = np.fix(val) + + da = xr.DataArray([val]) + expected = xr.DataArray([val_fixed]) + + actual = np.fix(da) + assert_identical(expected, actual)