summaryrefslogtreecommitdiff
path: root/numpy/lib/function_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib/function_base.py')
-rw-r--r--numpy/lib/function_base.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index 11a5a3ad0..d494aed0f 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -4912,6 +4912,25 @@ def trapz(y, x=None, dx=1.0, axis=-1):
return ret
+if overrides.ARRAY_FUNCTION_ENABLED:
+ # If array-function is enabled (normal), we wrap everything into a C
+ # callable, which has no __code__ or other attributes normal Python funcs
+ # have. SciPy however, tries to "clone" `trapz` into a new Python function
+ # which requires `__code__` and a few other attributes.
+ # So we create a dummy clone and copy over its attributes allowing
+ # SciPy <= 1.10 to work: https://github.com/scipy/scipy/issues/17811
+ assert not hasattr(trapz, "__code__")
+
+ def _fake_trapz(y, x=None, dx=1.0, axis=-1):
+ return trapz(y, x=x, dx=dx, axis=axis)
+
+ trapz.__code__ = _fake_trapz.__code__
+ trapz.__globals__ = _fake_trapz.__globals__
+ trapz.__defaults__ = _fake_trapz.__defaults__
+ trapz.__closure__ = _fake_trapz.__closure__
+ trapz.__kwdefaults__ = _fake_trapz.__kwdefaults__
+
+
def _meshgrid_dispatcher(*xi, copy=None, sparse=None, indexing=None):
return xi