The patch there is a backport of some upstream fixes and seems to be
enough to fix the build (it has been uploaded to Ubuntu now)
 yt/units/tests/test_ytarray.py | 15 +++++++++++++++
 yt/units/yt_array.py           | 23 ++++++++++++++++++++---
 2 files changed, 35 insertions(+), 3 deletions(-)

Index: yt-3.5.1/yt/units/tests/test_ytarray.py
===================================================================
--- yt-3.5.1.orig/yt/units/tests/test_ytarray.py
+++ yt-3.5.1/yt/units/tests/test_ytarray.py
@@ -1379,3 +1379,18 @@ def test_ones_and_zeros_like():
     assert_equal(zd.units, data.units)
     assert_equal(od, YTArray([1, 1, 1], 'cm'))
     assert_equal(od.units, data.units)
+    
+def test_clip():
+    km = YTQuantity(1, 'km')
+
+    data = [1, 2, 3, 4, 5, 6] * km
+    answer = [2, 2, 3, 4, 4, 4] * km
+
+    ret = np.clip(data, 2, 4)
+    assert_array_equal(ret, answer)
+    assert ret.units == answer.units
+
+    np.clip(data, 2, 4, out=data)
+
+    assert_array_equal(data, answer)
+    assert data.units == answer.units
Index: yt-3.5.1/yt/units/yt_array.py
===================================================================
--- yt-3.5.1.orig/yt/units/yt_array.py
+++ yt-3.5.1/yt/units/yt_array.py
@@ -50,6 +50,10 @@ from yt.utilities.exceptions import \
 from yt.utilities.lru_cache import lru_cache
 from numbers import Number as numeric_type
 from yt.utilities.on_demand_imports import _astropy
+try:
+    from numpy.core.umath import clip
+except ImportError:
+    clip = None
 from sympy import Rational
 from yt.units.unit_lookup_table import \
     default_unit_symbol_lut
@@ -451,6 +455,7 @@ class YTArray(np.ndarray):
         divmod_: passthrough_unit,
         isnat: return_without_unit,
         heaviside: preserve_units,
+        clip: passthrough_unit,
     }
 
     __array_priority__ = 2.0
@@ -1396,9 +1401,28 @@ class YTArray(np.ndarray):
                     out, out_arr, unit = handle_multiply_divide_units(
                         unit, units, out, out_arr)
             else:
-                raise RuntimeError(
-                    "Support for the %s ufunc with %i inputs has not been"
-                    "added to YTArray." % (str(ufunc), len(inputs)))
+                if ufunc is clip:
+                    inp = []
+                    for i in inputs:
+                        if isinstance(i, YTArray):
+                            inp.append(i.to(inputs[0].units).view(np.ndarray))
+                        elif iterable(i):
+                            inp.append(np.asarray(i))
+                        else:
+                            inp.append(i)
+                    if out is not None:
+                        _out = out.view(np.ndarray)
+                    else:
+                        _out = None
+                    out_arr = ufunc(*inp, out=_out)
+                    unit = inputs[0].units
+                    ret_class = type(inputs[0])
+                    mul = 1
+                else:
+                    raise RuntimeError(
+                        "Support for the %s ufunc with %i inputs has not been "
+                        "added to unyt_array." % (str(ufunc), len(inputs))
+                    )
             if unit is None:
                 out_arr = np.array(out_arr, copy=False)
             elif ufunc in (modf, divmod_):

Reply via email to