summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Lee <anntzer.lee@gmail.com>2015-05-02 23:51:04 -0700
committerAntony Lee <anntzer.lee@gmail.com>2016-06-09 08:58:31 -0700
commit0319d0ce3436d39a739b2537e60c1eaced80a6ca (patch)
treefa6f30eb45e56af096ad6478f95b24de6524a5ec
parentbae9aebaa5aeedc3e1ecf69bef65f5fe721a3d37 (diff)
downloadnumpy-0319d0ce3436d39a739b2537e60c1eaced80a6ca.tar.gz
Don't allow -0. as distribution shape parameter.
At least the gamma generator doesn't support it.
-rw-r--r--numpy/random/mtrand/mtrand.pyx48
-rw-r--r--numpy/random/tests/test_random.py10
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)