diff options
author | Antony Lee <anntzer.lee@gmail.com> | 2015-05-02 23:51:04 -0700 |
---|---|---|
committer | Antony Lee <anntzer.lee@gmail.com> | 2016-06-09 08:58:31 -0700 |
commit | 0319d0ce3436d39a739b2537e60c1eaced80a6ca (patch) | |
tree | fa6f30eb45e56af096ad6478f95b24de6524a5ec /numpy | |
parent | bae9aebaa5aeedc3e1ecf69bef65f5fe721a3d37 (diff) | |
download | numpy-0319d0ce3436d39a739b2537e60c1eaced80a6ca.tar.gz |
Don't allow -0. as distribution shape parameter.
At least the gamma generator doesn't support it.
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/random/mtrand/mtrand.pyx | 48 | ||||
-rw-r--r-- | numpy/random/tests/test_random.py | 10 |
2 files changed, 34 insertions, 24 deletions
diff --git a/numpy/random/mtrand/mtrand.pyx b/numpy/random/mtrand/mtrand.pyx index 968836ce6..f7afae58c 100644 --- a/numpy/random/mtrand/mtrand.pyx +++ b/numpy/random/mtrand/mtrand.pyx @@ -1902,12 +1902,12 @@ cdef class RandomState: if oloc.shape == oscale.shape == (): floc = PyFloat_AsDouble(loc) fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont2_array_sc(self.internal_state, rk_normal, size, floc, fscale, self.lock) - if np.any(np.less(oscale, 0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont2_array(self.internal_state, rk_normal, size, oloc, oscale, self.lock) @@ -2026,12 +2026,12 @@ cdef class RandomState: if oscale.shape == (): fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont1_array_sc(self.internal_state, rk_exponential, size, fscale, self.lock) - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont1_array(self.internal_state, rk_exponential, size, oscale, self.lock) @@ -2143,12 +2143,12 @@ cdef class RandomState: if oshape.shape == (): fshape = PyFloat_AsDouble(shape) - if fshape < 0: + if np.signbit(fshape): raise ValueError("shape < 0") return cont1_array_sc(self.internal_state, rk_standard_gamma, size, fshape, self.lock) - if np.any(np.less(oshape, 0.0)): + if np.any(np.signbit(oshape)): raise ValueError("shape < 0") return cont1_array(self.internal_state, rk_standard_gamma, size, oshape, self.lock) @@ -2235,16 +2235,16 @@ cdef class RandomState: if oshape.shape == oscale.shape == (): fshape = PyFloat_AsDouble(shape) fscale = PyFloat_AsDouble(scale) - if fshape < 0: + if np.signbit(fshape): raise ValueError("shape < 0") - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont2_array_sc(self.internal_state, rk_gamma, size, fshape, fscale, self.lock) - if np.any(np.less(oshape, 0.0)): + if np.any(np.signbit(oshape)): raise ValueError("shape < 0") - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont2_array(self.internal_state, rk_gamma, size, oshape, oscale, self.lock) @@ -3116,12 +3116,12 @@ cdef class RandomState: if oa.shape == (): fa = PyFloat_AsDouble(a) - if fa < 0: + if np.signbit(fa): raise ValueError("a < 0") return cont1_array_sc(self.internal_state, rk_weibull, size, fa, self.lock) - if np.any(np.less(oa, 0.0)): + if np.any(np.signbit(oa)): raise ValueError("a < 0") return cont1_array(self.internal_state, rk_weibull, size, oa, self.lock) @@ -3228,12 +3228,12 @@ cdef class RandomState: if oa.shape == (): fa = PyFloat_AsDouble(a) - if fa < 0: + if np.signbit(fa): raise ValueError("a < 0") return cont1_array_sc(self.internal_state, rk_power, size, fa, self.lock) - if np.any(np.less(oa, 0.0)): + if np.any(np.signbit(oa)): raise ValueError("a < 0") return cont1_array(self.internal_state, rk_power, size, oa, self.lock) @@ -3325,12 +3325,12 @@ cdef class RandomState: if oloc.shape == oscale.shape == (): floc = PyFloat_AsDouble(loc) fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont2_array_sc(self.internal_state, rk_laplace, size, floc, fscale, self.lock) - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont2_array(self.internal_state, rk_laplace, size, oloc, oscale, self.lock) @@ -3456,12 +3456,12 @@ cdef class RandomState: if oloc.shape == oscale.shape == (): floc = PyFloat_AsDouble(loc) fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont2_array_sc(self.internal_state, rk_gumbel, size, floc, fscale, self.lock) - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont2_array(self.internal_state, rk_gumbel, size, oloc, oscale, self.lock) @@ -3549,12 +3549,12 @@ cdef class RandomState: if oloc.shape == oscale.shape == (): floc = PyFloat_AsDouble(loc) fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont2_array_sc(self.internal_state, rk_logistic, size, floc, fscale, self.lock) - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0") return cont2_array(self.internal_state, rk_logistic, size, oloc, oscale, self.lock) @@ -3673,12 +3673,12 @@ cdef class RandomState: if omean.shape == osigma.shape == (): fmean = PyFloat_AsDouble(mean) fsigma = PyFloat_AsDouble(sigma) - if fsigma < 0: + if np.signbit(fsigma): raise ValueError("sigma < 0") return cont2_array_sc(self.internal_state, rk_lognormal, size, fmean, fsigma, self.lock) - if np.any(np.less(osigma, 0.0)): + if np.any(np.signbit(osigma)): raise ValueError("sigma < 0.0") return cont2_array(self.internal_state, rk_lognormal, size, omean, osigma, self.lock) @@ -3752,12 +3752,12 @@ cdef class RandomState: if oscale.shape == (): fscale = PyFloat_AsDouble(scale) - if fscale < 0: + if np.signbit(fscale): raise ValueError("scale < 0") return cont1_array_sc(self.internal_state, rk_rayleigh, size, fscale, self.lock) - if np.any(np.less(oscale, 0.0)): + if np.any(np.signbit(oscale)): raise ValueError("scale < 0.0") return cont1_array(self.internal_state, rk_rayleigh, size, oscale, self.lock) diff --git a/numpy/random/tests/test_random.py b/numpy/random/tests/test_random.py index 3f4952d20..08039cbbe 100644 --- a/numpy/random/tests/test_random.py +++ b/numpy/random/tests/test_random.py @@ -483,6 +483,7 @@ class TestRandomDist(TestCase): def test_exponential_0(self): assert_equal(np.random.exponential(scale=0), 0) + assert_raises(ValueError, np.random.exponential, scale=-0.) def test_f(self): np.random.seed(self.seed) @@ -502,6 +503,7 @@ class TestRandomDist(TestCase): def test_gamma_0(self): assert_equal(np.random.gamma(shape=0, scale=0), 0) + assert_raises(ValueError, np.random.gamma, shape=-0., scale=-0.) def test_geometric(self): np.random.seed(self.seed) @@ -521,6 +523,7 @@ class TestRandomDist(TestCase): def test_gumbel_0(self): assert_equal(np.random.gumbel(scale=0), 0) + assert_raises(ValueError, np.random.gumbel, scale=-0.) def test_hypergeometric(self): np.random.seed(self.seed) @@ -558,6 +561,7 @@ class TestRandomDist(TestCase): def test_laplace_0(self): assert_equal(np.random.laplace(scale=0), 0) + assert_raises(ValueError, np.random.laplace, scale=-0.) def test_logistic(self): np.random.seed(self.seed) @@ -569,6 +573,7 @@ class TestRandomDist(TestCase): def test_laplace_0(self): assert_(np.random.laplace(scale=0) in [0, 1]) + assert_raises(ValueError, np.random.laplace, scale=-0.) def test_lognormal(self): np.random.seed(self.seed) @@ -580,6 +585,7 @@ class TestRandomDist(TestCase): def test_lognormal_0(self): assert_equal(np.random.lognormal(sigma=0), 1) + assert_raises(ValueError, np.random.lognormal, sigma=-0.) def test_logseries(self): np.random.seed(self.seed) @@ -673,6 +679,7 @@ class TestRandomDist(TestCase): def test_normal_0(self): assert_equal(np.random.normal(scale=0), 0) + assert_raises(ValueError, np.random.normal, scale=-0.) def test_pareto(self): np.random.seed(self.seed) @@ -723,6 +730,7 @@ class TestRandomDist(TestCase): def test_rayleigh_0(self): assert_equal(np.random.rayleigh(scale=0), 0) + assert_raises(ValueError, np.random.rayleigh, scale=-0.) def test_standard_cauchy(self): np.random.seed(self.seed) @@ -750,6 +758,7 @@ class TestRandomDist(TestCase): def test_standard_gamma_0(self): assert_equal(np.random.standard_gamma(shape=0), 0) + assert_raises(ValueError, np.random.standard_gamma, shape=-0.) def test_standard_normal(self): np.random.seed(self.seed) @@ -828,6 +837,7 @@ class TestRandomDist(TestCase): def test_weibull_0(self): assert_equal(np.random.weibull(a=0), 0) + assert_raises(ValueError, np.random.weibull, a=-0.) def test_zipf(self): np.random.seed(self.seed) |