From 5b9730c0a7bca6b1647c836b9cc709b778a72369 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Thu, 14 Sep 2023 23:23:53 +0200 Subject: [PATCH 1/3] BUG: Fix np.quantile([Fraction(2,1)], 0.5) --- numpy/lib/_function_base_impl.py | 3 ++- numpy/lib/tests/test_function_base.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/numpy/lib/_function_base_impl.py b/numpy/lib/_function_base_impl.py index 26fae88d85ce..f558e0868a02 100644 --- a/numpy/lib/_function_base_impl.py +++ b/numpy/lib/_function_base_impl.py @@ -4585,7 +4585,8 @@ def _lerp(a, b, t, out=None): diff_b_a = subtract(b, a) # asanyarray is a stop-gap until gh-13105 lerp_interpolation = asanyarray(add(a, diff_b_a * t, out=out)) - subtract(b, diff_b_a * (1 - t), out=lerp_interpolation, where=t >= 0.5) + subtract(b, diff_b_a * (1 - t), out=lerp_interpolation, where=t >= 0.5, + casting='unsafe') if lerp_interpolation.ndim == 0 and out is None: lerp_interpolation = lerp_interpolation[()] # unpack 0d arrays return lerp_interpolation diff --git a/numpy/lib/tests/test_function_base.py b/numpy/lib/tests/test_function_base.py index 72d7e34f4a26..b3fc35f6dd55 100644 --- a/numpy/lib/tests/test_function_base.py +++ b/numpy/lib/tests/test_function_base.py @@ -3604,6 +3604,10 @@ def test_fraction(self): assert_equal(q, Fraction(7, 2)) assert_equal(type(q), Fraction) + q = np.quantile(x, .5) + assert_equal(q, 1.75) + assert_equal(type(q), np.float64) + q = np.quantile(x, Fraction(1, 2)) assert_equal(q, Fraction(7, 4)) assert_equal(type(q), Fraction) From 4332695e78f3373f700b600d39da62f37a873e60 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Tue, 19 Sep 2023 15:59:40 +0200 Subject: [PATCH 2/3] address review comments --- numpy/lib/_function_base_impl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/numpy/lib/_function_base_impl.py b/numpy/lib/_function_base_impl.py index f558e0868a02..563c19f4b3d1 100644 --- a/numpy/lib/_function_base_impl.py +++ b/numpy/lib/_function_base_impl.py @@ -4586,7 +4586,7 @@ def _lerp(a, b, t, out=None): # asanyarray is a stop-gap until gh-13105 lerp_interpolation = asanyarray(add(a, diff_b_a * t, out=out)) subtract(b, diff_b_a * (1 - t), out=lerp_interpolation, where=t >= 0.5, - casting='unsafe') + casting='unsafe', dtype=lerp_interpolation.dtype) if lerp_interpolation.ndim == 0 and out is None: lerp_interpolation = lerp_interpolation[()] # unpack 0d arrays return lerp_interpolation From 577d8d409d7ab6b99863722098c23ca04d7c70eb Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Tue, 19 Sep 2023 20:36:53 +0200 Subject: [PATCH 3/3] pass type instead of dtype instance --- numpy/lib/_function_base_impl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/numpy/lib/_function_base_impl.py b/numpy/lib/_function_base_impl.py index 563c19f4b3d1..d697e8d0ab98 100644 --- a/numpy/lib/_function_base_impl.py +++ b/numpy/lib/_function_base_impl.py @@ -4586,7 +4586,7 @@ def _lerp(a, b, t, out=None): # asanyarray is a stop-gap until gh-13105 lerp_interpolation = asanyarray(add(a, diff_b_a * t, out=out)) subtract(b, diff_b_a * (1 - t), out=lerp_interpolation, where=t >= 0.5, - casting='unsafe', dtype=lerp_interpolation.dtype) + casting='unsafe', dtype=type(lerp_interpolation.dtype)) if lerp_interpolation.ndim == 0 and out is None: lerp_interpolation = lerp_interpolation[()] # unpack 0d arrays return lerp_interpolation