diff options
Diffstat (limited to 'numpy/random/tests/test_smoke.py')
-rw-r--r-- | numpy/random/tests/test_smoke.py | 154 |
1 files changed, 22 insertions, 132 deletions
diff --git a/numpy/random/tests/test_smoke.py b/numpy/random/tests/test_smoke.py index c94e1a285..4263335f6 100644 --- a/numpy/random/tests/test_smoke.py +++ b/numpy/random/tests/test_smoke.py @@ -5,10 +5,7 @@ from functools import partial import numpy as np import pytest from numpy.testing import assert_equal, assert_, assert_array_equal -from numpy.random import (Generator, MT19937, DSFMT, ThreeFry, - PCG32, PCG64, Philox, Xoshiro256, Xoshiro512, - entropy) - +from numpy.random import (Generator, MT19937, PCG64, Philox, SFC64, entropy) @pytest.fixture(scope='module', params=(np.bool, np.int8, np.int16, np.int32, np.int64, @@ -99,7 +96,7 @@ class RNG(object): @classmethod def setup_class(cls): # Overridden in test classes. Place holder to silence IDE noise - cls.bit_generator = Xoshiro256 + cls.bit_generator = PCG64 cls.advance = None cls.seed = [12345] cls.rg = Generator(cls.bit_generator(*cls.seed)) @@ -148,7 +145,7 @@ class RNG(object): assert_(comp_state(jumped_state, rejumped_state)) else: bitgen_name = self.rg.bit_generator.__class__.__name__ - if bitgen_name not in ('',): + if bitgen_name not in ('SFC64',): raise AttributeError('no "jumped" in %s' % bitgen_name) pytest.skip('Jump is not supported by {0}'.format(bitgen_name)) @@ -459,56 +456,34 @@ class RNG(object): else: dtype = np.uint64 seed = np.array([1], dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(1) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(1) + state2 = bg.state assert_(comp_state(state1, state2)) seed = np.arange(4, dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) seed = np.arange(1500, dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) seed = 2 ** np.mod(np.arange(1500, dtype=dtype), self.seed_vector_bits - 1) + 1 - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) - def test_seed_array_error(self): - if self.seed_vector_bits == 32: - out_of_bounds = 2 ** 32 - else: - out_of_bounds = 2 ** 64 - - seed = -1 - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([-1], dtype=np.int32) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, -5], dtype=np.int32) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, out_of_bounds]) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - def test_uniform_float(self): rg = Generator(self.bit_generator(12345)) warmup(rg) @@ -777,54 +752,18 @@ class TestPhilox(RNG): cls._extra_setup() -class TestThreeFry(RNG): +class TestSFC64(RNG): @classmethod def setup_class(cls): - cls.bit_generator = ThreeFry - cls.advance = 2 ** 63 + 2 ** 31 + 2 ** 15 + 1 - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 - cls._extra_setup() - - -class TestXoshiro256(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro256 + cls.bit_generator = SFC64 cls.advance = None cls.seed = [12345] cls.rg = Generator(cls.bit_generator(*cls.seed)) cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 + cls.seed_vector_bits = 192 cls._extra_setup() -class TestXoshiro512(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro512 - cls.advance = None - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 - cls._extra_setup() - - -class TestDSFMT(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = DSFMT - cls.advance = None - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls._extra_setup() - cls.seed_vector_bits = 32 - - class TestEntropy(object): def test_entropy(self): e1 = entropy.random_entropy() @@ -843,52 +782,3 @@ class TestEntropy(object): e2 = entropy.random_entropy(source='fallback') assert_((e1 != e2)) - -class TestPCG64(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = PCG64 - cls.advance = 2 ** 96 + 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1 - cls.seed = [2 ** 96 + 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1, - 2 ** 21 + 2 ** 16 + 2 ** 5 + 1] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = None - cls._extra_setup() - - def test_seed_array_error(self): - # GH #82 for error type changes - if self.seed_vector_bits == 32: - out_of_bounds = 2 ** 32 - else: - out_of_bounds = 2 ** 64 - - seed = -1 - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - error_type = ValueError if self.seed_vector_bits else TypeError - seed = np.array([-1], dtype=np.int32) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, -5], dtype=np.int32) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, out_of_bounds]) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - -class TestPCG32(TestPCG64): - @classmethod - def setup_class(cls): - cls.bit_generator = PCG32 - cls.advance = 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1 - cls.seed = [2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1, - 2 ** 21 + 2 ** 16 + 2 ** 5 + 1] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = None - cls._extra_setup() |