From 4f06779070d3c87122725a69ac9d3f75440f3fad Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Mon, 15 Apr 2019 17:00:03 +0100 Subject: ENH: Add fast path for randint broadcasting Add path that voids object conversion unless essential Small doc cleanups related to random_integers PEP-8 cleanups --- numpy/random/tests/test_direct.py | 5 ++++- numpy/random/tests/test_generator_mt19937.py | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'numpy/random/tests') diff --git a/numpy/random/tests/test_direct.py b/numpy/random/tests/test_direct.py index d6042100a..fd2d7eb9a 100644 --- a/numpy/random/tests/test_direct.py +++ b/numpy/random/tests/test_direct.py @@ -51,6 +51,7 @@ def uniform32_from_uint64(x): out = (joined >> np.uint32(9)) * (1.0 / 2 ** 23) return out.astype(np.float32) + def uniform32_from_uint53(x): x = np.uint64(x) >> np.uint64(16) x = np.uint32(x & np.uint64(0xffffffff)) @@ -92,6 +93,7 @@ def uniform_from_uint32(x): out[i // 2] = (a * 67108864.0 + b) / 9007199254740992.0 return out + def uniform_from_dsfmt(x): return x.view(np.double) - 1.0 @@ -414,7 +416,8 @@ class TestPCG64(Base): rs = RandomGenerator(self.brng(*self.data1['seed'])) assert_raises(self.seed_error_type, rs.brng.seed, np.array([np.pi])) assert_raises(self.seed_error_type, rs.brng.seed, np.array([-np.pi])) - assert_raises(self.seed_error_type, rs.brng.seed, np.array([np.pi, -np.pi])) + assert_raises(self.seed_error_type, rs.brng.seed, + np.array([np.pi, -np.pi])) assert_raises(self.seed_error_type, rs.brng.seed, np.array([0, np.pi])) assert_raises(self.seed_error_type, rs.brng.seed, [np.pi]) assert_raises(self.seed_error_type, rs.brng.seed, [0, np.pi]) diff --git a/numpy/random/tests/test_generator_mt19937.py b/numpy/random/tests/test_generator_mt19937.py index ff5dc0150..6503389d5 100644 --- a/numpy/random/tests/test_generator_mt19937.py +++ b/numpy/random/tests/test_generator_mt19937.py @@ -335,6 +335,33 @@ class TestRandint(object): assert_array_equal(val, val_bc) + def test_int64_uint64_broadcast_exceptions(self): + configs = {np.uint64: ((0, 2**65), (-1, 2**62), (10, 9), (0, 0)), + np.int64: ((0, 2**64), (-(2**64), 2**62), (10, 9), (0, 0), + (-2**63-1, -2**63-1))} + for dtype in configs: + for config in configs[dtype]: + low, high = config + low_a = np.array([[low]*10]) + high_a = np.array([high] * 10) + assert_raises(ValueError, random.randint, low, high, + dtype=dtype) + assert_raises(ValueError, random.randint, low_a, high, + dtype=dtype) + assert_raises(ValueError, random.randint, low, high_a, + dtype=dtype) + assert_raises(ValueError, random.randint, low_a, high_a, + dtype=dtype) + + low_o = np.array([[low]*10], dtype=np.object) + high_o = np.array([high] * 10, dtype=np.object) + assert_raises(ValueError, random.randint, low_o, high, + dtype=dtype) + assert_raises(ValueError, random.randint, low, high_o, + dtype=dtype) + assert_raises(ValueError, random.randint, low_o, high_o, + dtype=dtype) + def test_int64_uint64_corner_case(self): # When stored in Numpy arrays, `lbnd` is casted # as np.int64, and `ubnd` is casted as np.uint64. -- cgit v1.2.1