From a6c3d0eeab3d65b3ec047e8601da84a2ebb97d70 Mon Sep 17 00:00:00 2001 From: Simon Gibbons Date: Sat, 1 Apr 2017 21:59:53 +0100 Subject: BUG: Ensure Errors are correctly checked when PyFloat_AsDouble is called. There was an error in np.random.uniform where if np.random.uniform were called with a type that throwed exceptions when it was converted to a float this exception wouldn't be raised. This bug was due to an issue where PyFloat_AsDouble was called but no check for PyErr_Occurred was performed after. This PR fixes the issue by ensuring that Cython will always emit a call to PyErr_Occurred if PyFloat_AsDouble returns -1.0 Fixes: #8865 --- numpy/random/tests/test_random.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'numpy/random/tests/test_random.py') diff --git a/numpy/random/tests/test_random.py b/numpy/random/tests/test_random.py index 09ed5bb54..cb2afa9f3 100644 --- a/numpy/random/tests/test_random.py +++ b/numpy/random/tests/test_random.py @@ -822,6 +822,20 @@ class TestRandomDist(TestCase): # DBL_MAX by increasing fmin a bit np.random.uniform(low=np.nextafter(fmin, 1), high=fmax / 1e17) + def test_uniform_propogates_exeptions(self): + # Tests that uniform correctly propogates exceptions + # when called with a type which throws when converted to + # a float + # + # Regression test for gh: 8865 + + class ThrowableType(np.ndarray): + def __float__(self): + raise ValueError + + x = np.array(1.0).view(ThrowableType) + assert_raises(ValueError, np.uniform, x, x) + def test_vonmises(self): np.random.seed(self.seed) actual = np.random.vonmises(mu=1.23, kappa=1.54, size=(3, 2)) -- cgit v1.2.1