summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattip <matti.picus@gmail.com>2019-04-10 00:50:42 +0300
committermattip <matti.picus@gmail.com>2019-05-20 18:45:27 +0300
commitc53b2eb729bae1f248a2654dfcfa4a3dd3e2902b (patch)
treeeed1d982201dc892984feaca355565217069eb20
parent7e8e19f9a3b452fdbd992568348b393c31fba005 (diff)
downloadnumpy-c53b2eb729bae1f248a2654dfcfa4a3dd3e2902b.tar.gz
BENCH: convert bencmarks to asv format
remove files that were part of the origal repo rework randomgen docs to integrate with numpy and fix some links remove convenience functions, require explicit call to gen.brng move code out of numpy.random.randomgen into numpy.random
-rw-r--r--.circleci/config.yml2
-rw-r--r--.gitignore10
-rw-r--r--MANIFEST.in3
-rw-r--r--_randomgen/.gitattributes1
-rw-r--r--_randomgen/.gitignore26
-rw-r--r--_randomgen/.travis.yml72
-rw-r--r--_randomgen/README-git.md26
-rw-r--r--_randomgen/README.md288
-rw-r--r--_randomgen/README.rst320
-rw-r--r--_randomgen/benchmark.py201
-rw-r--r--_randomgen/setup.py325
-rw-r--r--benchmarks/benchmarks/bench_random.py99
-rw-r--r--doc/source/reference/randomgen/extending.rst2
-rw-r--r--doc/source/reference/randomgen/generator.rst29
-rw-r--r--doc/source/reference/randomgen/index.rst120
-rw-r--r--doc/source/reference/randomgen/new-or-different.rst4
-rw-r--r--numpy/random/LICENSE.md (renamed from numpy/random/randomgen/LICENSE.md)0
-rw-r--r--numpy/random/__init__.py36
-rw-r--r--numpy/random/_mtrand/Python.pxi (renamed from numpy/random/mtrand/Python.pxi)0
-rw-r--r--numpy/random/_mtrand/distributions.c (renamed from numpy/random/mtrand/distributions.c)0
-rw-r--r--numpy/random/_mtrand/distributions.h (renamed from numpy/random/mtrand/distributions.h)0
-rw-r--r--numpy/random/_mtrand/generate_mtrand_c.py42
-rw-r--r--numpy/random/_mtrand/initarray.c (renamed from numpy/random/mtrand/initarray.c)0
-rw-r--r--numpy/random/_mtrand/initarray.h (renamed from numpy/random/mtrand/initarray.h)0
-rw-r--r--numpy/random/_mtrand/mtrand.pyx (renamed from numpy/random/mtrand/mtrand.pyx)0
-rw-r--r--numpy/random/_mtrand/mtrand_py_helper.h (renamed from numpy/random/mtrand/mtrand_py_helper.h)0
-rw-r--r--numpy/random/_mtrand/numpy.pxd (renamed from numpy/random/mtrand/numpy.pxd)0
-rw-r--r--numpy/random/_mtrand/randint_helpers.pxi.in (renamed from numpy/random/mtrand/randint_helpers.pxi.in)0
-rw-r--r--numpy/random/_mtrand/randomkit.c (renamed from numpy/random/mtrand/randomkit.c)0
-rw-r--r--numpy/random/_mtrand/randomkit.h (renamed from numpy/random/mtrand/randomkit.h)0
-rw-r--r--numpy/random/_pickle.py (renamed from numpy/random/randomgen/_pickle.py)0
-rw-r--r--numpy/random/bounded_integers.pxd.in (renamed from numpy/random/randomgen/bounded_integers.pxd.in)0
-rw-r--r--numpy/random/bounded_integers.pyx.in (renamed from numpy/random/randomgen/bounded_integers.pyx.in)0
-rw-r--r--numpy/random/common.pxd (renamed from numpy/random/randomgen/common.pxd)0
-rw-r--r--numpy/random/common.pyx (renamed from numpy/random/randomgen/common.pyx)0
-rw-r--r--numpy/random/distributions.pxd (renamed from numpy/random/randomgen/distributions.pxd)0
-rw-r--r--numpy/random/dsfmt.pyx (renamed from numpy/random/randomgen/dsfmt.pyx)0
-rw-r--r--numpy/random/entropy.pyx (renamed from numpy/random/randomgen/entropy.pyx)0
-rw-r--r--numpy/random/examples/cython/extending.pyx (renamed from numpy/random/randomgen/examples/cython/extending.pyx)0
-rw-r--r--numpy/random/examples/cython/extending_distributions.pyx (renamed from numpy/random/randomgen/examples/cython/extending_distributions.pyx)0
-rw-r--r--numpy/random/examples/cython/setup.py (renamed from numpy/random/randomgen/examples/cython/setup.py)0
-rw-r--r--numpy/random/examples/numba/extending.py (renamed from numpy/random/randomgen/examples/numba/extending.py)0
-rw-r--r--numpy/random/examples/numba/extending_distributions.py (renamed from numpy/random/randomgen/examples/numba/extending_distributions.py)0
-rw-r--r--numpy/random/generator.pyx (renamed from numpy/random/randomgen/generator.pyx)74
-rw-r--r--numpy/random/legacy/__init__.py (renamed from numpy/random/randomgen/legacy/__init__.py)0
-rw-r--r--numpy/random/legacy/legacy_distributions.pxd (renamed from numpy/random/randomgen/legacy/legacy_distributions.pxd)0
-rw-r--r--numpy/random/mt19937.pyx (renamed from numpy/random/randomgen/mt19937.pyx)0
-rw-r--r--numpy/random/mtrand.pyx (renamed from numpy/random/randomgen/mtrand.pyx)0
-rw-r--r--numpy/random/pcg32.pyx (renamed from numpy/random/randomgen/pcg32.pyx)0
-rw-r--r--numpy/random/pcg64.pyx (renamed from numpy/random/randomgen/pcg64.pyx)0
-rw-r--r--numpy/random/philox.pyx (renamed from numpy/random/randomgen/philox.pyx)0
-rw-r--r--numpy/random/randomgen/__init__.py21
-rw-r--r--numpy/random/randomgen/_version.py520
-rw-r--r--numpy/random/randomgen/setup.py191
-rw-r--r--numpy/random/randomgen/tests/data/__init__.py0
-rw-r--r--numpy/random/setup.py153
-rw-r--r--numpy/random/src/aligned_malloc/aligned_malloc.c (renamed from numpy/random/randomgen/src/aligned_malloc/aligned_malloc.c)0
-rw-r--r--numpy/random/src/aligned_malloc/aligned_malloc.h (renamed from numpy/random/randomgen/src/aligned_malloc/aligned_malloc.h)0
-rw-r--r--numpy/random/src/common/LICENSE.md (renamed from numpy/random/randomgen/src/common/LICENSE.md)0
-rw-r--r--numpy/random/src/common/inttypes.h (renamed from numpy/random/randomgen/src/common/inttypes.h)0
-rw-r--r--numpy/random/src/common/stdint.h (renamed from numpy/random/randomgen/src/common/stdint.h)0
-rw-r--r--numpy/random/src/distributions/LICENSE.md (renamed from numpy/random/randomgen/src/distributions/LICENSE.md)0
-rw-r--r--numpy/random/src/distributions/binomial.h (renamed from numpy/random/randomgen/src/distributions/binomial.h)0
-rw-r--r--numpy/random/src/distributions/distributions.c (renamed from numpy/random/randomgen/src/distributions/distributions.c)0
-rw-r--r--numpy/random/src/distributions/distributions.h (renamed from numpy/random/randomgen/src/distributions/distributions.h)0
-rw-r--r--numpy/random/src/distributions/ziggurat.h (renamed from numpy/random/randomgen/src/distributions/ziggurat.h)0
-rw-r--r--numpy/random/src/distributions/ziggurat_constants.h (renamed from numpy/random/randomgen/src/distributions/ziggurat_constants.h)0
-rw-r--r--numpy/random/src/dsfmt/128-bit-jump.poly.txt (renamed from numpy/random/randomgen/src/dsfmt/128-bit-jump.poly.txt)0
-rw-r--r--numpy/random/src/dsfmt/96-bit-jump.poly.txt (renamed from numpy/random/randomgen/src/dsfmt/96-bit-jump.poly.txt)0
-rw-r--r--numpy/random/src/dsfmt/LICENSE.md (renamed from numpy/random/randomgen/src/dsfmt/LICENSE.md)0
-rw-r--r--numpy/random/src/dsfmt/calc-jump.cpp (renamed from numpy/random/randomgen/src/dsfmt/calc-jump.cpp)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-benchmark.c (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-benchmark.c)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-calc-jump.hpp (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-calc-jump.hpp)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-common.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-common.h)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-jump.c (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-jump.c)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-jump.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-jump.h)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-params.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-params.h)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-params19937.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-params19937.h)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-poly.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-poly.h)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT-test-gen.c (renamed from numpy/random/randomgen/src/dsfmt/dSFMT-test-gen.c)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT.c (renamed from numpy/random/randomgen/src/dsfmt/dSFMT.c)0
-rw-r--r--numpy/random/src/dsfmt/dSFMT.h (renamed from numpy/random/randomgen/src/dsfmt/dSFMT.h)0
-rw-r--r--numpy/random/src/entropy/LICENSE.md (renamed from numpy/random/randomgen/src/entropy/LICENSE.md)0
-rw-r--r--numpy/random/src/entropy/entropy.c (renamed from numpy/random/randomgen/src/entropy/entropy.c)0
-rw-r--r--numpy/random/src/entropy/entropy.h (renamed from numpy/random/randomgen/src/entropy/entropy.h)0
-rw-r--r--numpy/random/src/legacy/LICENSE.md (renamed from numpy/random/randomgen/src/legacy/LICENSE.md)0
-rw-r--r--numpy/random/src/legacy/distributions-boxmuller.c (renamed from numpy/random/randomgen/src/legacy/distributions-boxmuller.c)0
-rw-r--r--numpy/random/src/legacy/distributions-boxmuller.h (renamed from numpy/random/randomgen/src/legacy/distributions-boxmuller.h)0
-rw-r--r--numpy/random/src/mt19937/LICENSE.md (renamed from numpy/random/randomgen/src/mt19937/LICENSE.md)0
-rw-r--r--numpy/random/src/mt19937/mt19937-benchmark.c (renamed from numpy/random/randomgen/src/mt19937/mt19937-benchmark.c)0
-rw-r--r--numpy/random/src/mt19937/mt19937-jump.c (renamed from numpy/random/randomgen/src/mt19937/mt19937-jump.c)0
-rw-r--r--numpy/random/src/mt19937/mt19937-jump.h (renamed from numpy/random/randomgen/src/mt19937/mt19937-jump.h)0
-rw-r--r--numpy/random/src/mt19937/mt19937-poly.h (renamed from numpy/random/randomgen/src/mt19937/mt19937-poly.h)0
-rw-r--r--numpy/random/src/mt19937/mt19937-test-data-gen.c (renamed from numpy/random/randomgen/src/mt19937/mt19937-test-data-gen.c)0
-rw-r--r--numpy/random/src/mt19937/mt19937.c (renamed from numpy/random/randomgen/src/mt19937/mt19937.c)0
-rw-r--r--numpy/random/src/mt19937/mt19937.h (renamed from numpy/random/randomgen/src/mt19937/mt19937.h)0
-rw-r--r--numpy/random/src/mt19937/randomkit.c (renamed from numpy/random/randomgen/src/mt19937/randomkit.c)0
-rw-r--r--numpy/random/src/mt19937/randomkit.h (renamed from numpy/random/randomgen/src/mt19937/randomkit.h)0
-rw-r--r--numpy/random/src/pcg32/LICENSE.md (renamed from numpy/random/randomgen/src/pcg32/LICENSE.md)0
-rw-r--r--numpy/random/src/pcg32/pcg-advance-64.c (renamed from numpy/random/randomgen/src/pcg32/pcg-advance-64.c)0
-rw-r--r--numpy/random/src/pcg32/pcg32-test-data-gen.c (renamed from numpy/random/randomgen/src/pcg32/pcg32-test-data-gen.c)0
-rw-r--r--numpy/random/src/pcg32/pcg32.c (renamed from numpy/random/randomgen/src/pcg32/pcg32.c)0
-rw-r--r--numpy/random/src/pcg32/pcg32.h (renamed from numpy/random/randomgen/src/pcg32/pcg32.h)0
-rw-r--r--numpy/random/src/pcg32/pcg_variants.h (renamed from numpy/random/randomgen/src/pcg32/pcg_variants.h)0
-rw-r--r--numpy/random/src/pcg64/LICENSE.md (renamed from numpy/random/randomgen/src/pcg64/LICENSE.md)0
-rw-r--r--numpy/random/src/pcg64/pcg64-benchmark.c (renamed from numpy/random/randomgen/src/pcg64/pcg64-benchmark.c)0
-rw-r--r--numpy/random/src/pcg64/pcg64-test-data-gen.c (renamed from numpy/random/randomgen/src/pcg64/pcg64-test-data-gen.c)0
-rw-r--r--numpy/random/src/pcg64/pcg64.c (renamed from numpy/random/randomgen/src/pcg64/pcg64.c)0
-rw-r--r--numpy/random/src/pcg64/pcg64.h (renamed from numpy/random/randomgen/src/pcg64/pcg64.h)0
-rw-r--r--numpy/random/src/pcg64/pcg64.orig.c (renamed from numpy/random/randomgen/src/pcg64/pcg64.orig.c)0
-rw-r--r--numpy/random/src/pcg64/pcg64.orig.h (renamed from numpy/random/randomgen/src/pcg64/pcg64.orig.h)0
-rw-r--r--numpy/random/src/philox/LICENSE.md (renamed from numpy/random/randomgen/src/philox/LICENSE.md)0
-rw-r--r--numpy/random/src/philox/philox-benchmark.c (renamed from numpy/random/randomgen/src/philox/philox-benchmark.c)0
-rw-r--r--numpy/random/src/philox/philox-test-data-gen.c (renamed from numpy/random/randomgen/src/philox/philox-test-data-gen.c)0
-rw-r--r--numpy/random/src/philox/philox.c (renamed from numpy/random/randomgen/src/philox/philox.c)0
-rw-r--r--numpy/random/src/philox/philox.h (renamed from numpy/random/randomgen/src/philox/philox.h)0
-rw-r--r--numpy/random/src/splitmix64/LICENSE.md (renamed from numpy/random/randomgen/src/splitmix64/LICENSE.md)0
-rw-r--r--numpy/random/src/splitmix64/splitmix64.c (renamed from numpy/random/randomgen/src/splitmix64/splitmix64.c)0
-rw-r--r--numpy/random/src/splitmix64/splitmix64.h (renamed from numpy/random/randomgen/src/splitmix64/splitmix64.h)0
-rw-r--r--numpy/random/src/splitmix64/splitmix64.orig.c (renamed from numpy/random/randomgen/src/splitmix64/splitmix64.orig.c)0
-rw-r--r--numpy/random/src/threefry/LICENSE.md (renamed from numpy/random/randomgen/src/threefry/LICENSE.md)0
-rw-r--r--numpy/random/src/threefry/threefry-benchmark.c (renamed from numpy/random/randomgen/src/threefry/threefry-benchmark.c)0
-rw-r--r--numpy/random/src/threefry/threefry-orig.c (renamed from numpy/random/randomgen/src/threefry/threefry-orig.c)0
-rw-r--r--numpy/random/src/threefry/threefry-test-data-gen.c (renamed from numpy/random/randomgen/src/threefry/threefry-test-data-gen.c)0
-rw-r--r--numpy/random/src/threefry/threefry.c (renamed from numpy/random/randomgen/src/threefry/threefry.c)0
-rw-r--r--numpy/random/src/threefry/threefry.h (renamed from numpy/random/randomgen/src/threefry/threefry.h)0
-rw-r--r--numpy/random/src/threefry32/LICENSE.md (renamed from numpy/random/randomgen/src/threefry32/LICENSE.md)0
-rw-r--r--numpy/random/src/threefry32/threefry32-test-data-gen.c (renamed from numpy/random/randomgen/src/threefry32/threefry32-test-data-gen.c)0
-rw-r--r--numpy/random/src/threefry32/threefry32.c (renamed from numpy/random/randomgen/src/threefry32/threefry32.c)0
-rw-r--r--numpy/random/src/threefry32/threefry32.h (renamed from numpy/random/randomgen/src/threefry32/threefry32.h)0
-rw-r--r--numpy/random/src/xoroshiro128/LICENSE.md (renamed from numpy/random/randomgen/src/xoroshiro128/LICENSE.md)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128-benchmark.c (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128-benchmark.c)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128-test-data-gen.c (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128-test-data-gen.c)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128.c (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128.c)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128.h (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128.h)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128plus.orig.c (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.c)0
-rw-r--r--numpy/random/src/xoroshiro128/xoroshiro128plus.orig.h (renamed from numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.h)0
-rw-r--r--numpy/random/src/xorshift1024/LICENSE.md (renamed from numpy/random/randomgen/src/xorshift1024/LICENSE.md)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024-benchmark.c (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024-benchmark.c)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024-test-data-gen.c (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024-test-data-gen.c)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024.c (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024.c)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024.h (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024.h)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024.orig.c (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.c)0
-rw-r--r--numpy/random/src/xorshift1024/xorshift1024.orig.h (renamed from numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.h)0
-rw-r--r--numpy/random/src/xoshiro256starstar/LICENSE.md (renamed from numpy/random/randomgen/src/xoshiro256starstar/LICENSE.md)0
-rw-r--r--numpy/random/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c (renamed from numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c)0
-rw-r--r--numpy/random/src/xoshiro256starstar/xoshiro256starstar.c (renamed from numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.c)0
-rw-r--r--numpy/random/src/xoshiro256starstar/xoshiro256starstar.h (renamed from numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.h)0
-rw-r--r--numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.c (renamed from numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.c)0
-rw-r--r--numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.h (renamed from numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.h)0
-rw-r--r--numpy/random/src/xoshiro512starstar/LICENSE.md (renamed from numpy/random/randomgen/src/xoshiro512starstar/LICENSE.md)0
-rw-r--r--numpy/random/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c (renamed from numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c)0
-rw-r--r--numpy/random/src/xoshiro512starstar/xoshiro512starstar.c (renamed from numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.c)0
-rw-r--r--numpy/random/src/xoshiro512starstar/xoshiro512starstar.h (renamed from numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.h)0
-rw-r--r--numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.c (renamed from numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.c)0
-rw-r--r--numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.h (renamed from numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.h)0
-rw-r--r--numpy/random/tests/data/__init__.py (renamed from numpy/random/randomgen/tests/__init__.py)0
-rw-r--r--numpy/random/tests/data/dSFMT-testset-1.csv (renamed from numpy/random/randomgen/tests/data/dSFMT-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/dSFMT-testset-2.csv (renamed from numpy/random/randomgen/tests/data/dSFMT-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/mt19937-testset-1.csv (renamed from numpy/random/randomgen/tests/data/mt19937-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/mt19937-testset-2.csv (renamed from numpy/random/randomgen/tests/data/mt19937-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/pcg32-testset-1.csv (renamed from numpy/random/randomgen/tests/data/pcg32-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/pcg32-testset-2.csv (renamed from numpy/random/randomgen/tests/data/pcg32-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/pcg64-testset-1.csv (renamed from numpy/random/randomgen/tests/data/pcg64-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/pcg64-testset-2.csv (renamed from numpy/random/randomgen/tests/data/pcg64-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/philox-testset-1.csv (renamed from numpy/random/randomgen/tests/data/philox-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/philox-testset-2.csv (renamed from numpy/random/randomgen/tests/data/philox-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/threefry-testset-1.csv (renamed from numpy/random/randomgen/tests/data/threefry-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/threefry-testset-2.csv (renamed from numpy/random/randomgen/tests/data/threefry-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/threefry32-testset-1.csv (renamed from numpy/random/randomgen/tests/data/threefry32-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/threefry32-testset-2.csv (renamed from numpy/random/randomgen/tests/data/threefry32-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/xoroshiro128-testset-1.csv (renamed from numpy/random/randomgen/tests/data/xoroshiro128-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/xoroshiro128-testset-2.csv (renamed from numpy/random/randomgen/tests/data/xoroshiro128-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/xorshift1024-testset-1.csv (renamed from numpy/random/randomgen/tests/data/xorshift1024-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/xorshift1024-testset-2.csv (renamed from numpy/random/randomgen/tests/data/xorshift1024-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/xoshiro256starstar-testset-1.csv (renamed from numpy/random/randomgen/tests/data/xoshiro256starstar-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/xoshiro256starstar-testset-2.csv (renamed from numpy/random/randomgen/tests/data/xoshiro256starstar-testset-2.csv)0
-rw-r--r--numpy/random/tests/data/xoshiro512starstar-testset-1.csv (renamed from numpy/random/randomgen/tests/data/xoshiro512starstar-testset-1.csv)0
-rw-r--r--numpy/random/tests/data/xoshiro512starstar-testset-2.csv (renamed from numpy/random/randomgen/tests/data/xoshiro512starstar-testset-2.csv)0
-rw-r--r--numpy/random/tests/test_against_numpy.py (renamed from numpy/random/randomgen/tests/test_against_numpy.py)38
-rw-r--r--numpy/random/tests/test_direct.py (renamed from numpy/random/randomgen/tests/test_direct.py)108
-rw-r--r--numpy/random/tests/test_generator_mt19937.py (renamed from numpy/random/randomgen/tests/test_generator_mt19937.py)169
-rw-r--r--numpy/random/tests/test_generator_mt19937_regressions.py (renamed from numpy/random/randomgen/tests/test_generator_mt19937_regressions.py)26
-rw-r--r--numpy/random/tests/test_randomstate.py (renamed from numpy/random/randomgen/tests/test_randomstate.py)2
-rw-r--r--numpy/random/tests/test_randomstate_regression.py (renamed from numpy/random/randomgen/tests/test_randomstate_regression.py)2
-rw-r--r--numpy/random/tests/test_smoke.py (renamed from numpy/random/randomgen/tests/test_smoke.py)228
-rw-r--r--numpy/random/threefry.pyx (renamed from numpy/random/randomgen/threefry.pyx)0
-rw-r--r--numpy/random/threefry32.pyx (renamed from numpy/random/randomgen/threefry32.pyx)0
-rw-r--r--numpy/random/xoroshiro128.pyx (renamed from numpy/random/randomgen/xoroshiro128.pyx)0
-rw-r--r--numpy/random/xorshift1024.pyx (renamed from numpy/random/randomgen/xorshift1024.pyx)0
-rw-r--r--numpy/random/xoshiro256starstar.pyx (renamed from numpy/random/randomgen/xoshiro256starstar.pyx)0
-rw-r--r--numpy/random/xoshiro512starstar.pyx (renamed from numpy/random/randomgen/xoshiro512starstar.pyx)0
-rwxr-xr-xsetup.py4
193 files changed, 693 insertions, 2449 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index e7fbf55fe..ff26afeb8 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -20,7 +20,7 @@ jobs:
command: |
python3 -m venv venv
. venv/bin/activate
- pip install cython sphinx>=1.8.5 matplotlib ipython
+ pip install cython sphinx==1.8.5 matplotlib ipython
sudo apt-get update
sudo apt-get install -y graphviz texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra texlive-generic-extra latexmk texlive-xetex
diff --git a/.gitignore b/.gitignore
index ac5693fad..485f37957 100644
--- a/.gitignore
+++ b/.gitignore
@@ -176,8 +176,8 @@ benchmarks/numpy
# cythonized files
cythonize.dat
numpy/random/mtrand/mtrand.c
-numpy/random/randomgen/*.c
-numpy/random/randomgen/legacy/*.c
-numpy/random/mtrand/randint_helpers.pxi
-numpy/random/randomgen/bounded_integers.pyx
-numpy/random/randomgen/bounded_integers.pxd
+numpy/random/*.c
+numpy/random/legacy/*.c
+numpy/random/_mtrand/randint_helpers.pxi
+numpy/random/bounded_integers.pyx
+numpy/random/bounded_integers.pxd
diff --git a/MANIFEST.in b/MANIFEST.in
index 16d066519..e27b843a9 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,7 +9,8 @@ include pytest.ini
include *.txt
include README.md
include site.cfg.example
-recursive-include numpy/random/mtrand *.pyx *.pxd
+include numpy/random/_mtrand/generate_mtrand_c.py
+recursive-include numpy/random *.pyx *.pxd *.pyx.in *.pxd.in
# Add build support that should go in sdist, but not go in bdist/be installed
# Note that sub-directories that don't have __init__ are apparently not
# included by 'recursive-include', so list those separately
diff --git a/_randomgen/.gitattributes b/_randomgen/.gitattributes
deleted file mode 100644
index 9b447556a..000000000
--- a/_randomgen/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-randomgen/_version.py export-subst
diff --git a/_randomgen/.gitignore b/_randomgen/.gitignore
deleted file mode 100644
index 381421b39..000000000
--- a/_randomgen/.gitignore
+++ /dev/null
@@ -1,26 +0,0 @@
-.idea/
-build/
-*.egg-info/
-*.pyd
-*.pyc
-*.html
-*.obj
-*.exe
-**/Random123
-settings.json
-*.so
-randomgen/bounded_integers.pyx
-randomgen/bounded_integers.pxd
-randomgen/bounded_integers.c
-randomgen/common.c
-randomgen/dsfmt.c
-randomgen/entropy.c
-randomgen/generator.c
-randomgen/mt19937.c
-randomgen/pcg32.c
-randomgen/pcg64.c
-randomgen/philox.c
-randomgen/threefry.c
-randomgen/threefry32.c
-randomgen/xoroshiro128.c
-randomgen/xorshift1024.c
diff --git a/_randomgen/.travis.yml b/_randomgen/.travis.yml
deleted file mode 100644
index 89c5be3fa..000000000
--- a/_randomgen/.travis.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-group: edge
-dist: trusty
-sudo: required
-language: python
-
-env:
- global:
- # Doctr deploy key for bashtage/randomgen
- - secure: "czwFlflS1lcfbSQ9ktv+pLAPV9/6+wmwiMTyIYyv5xgQVWRL5NRebWH+ZhQ6s2T5x17wFMtlafcAvkdV0CHQZLru34V2UNldCapuEtQ8b32EDHBXHKbs45b7SSkLx4TFXdjiJurleY4ZIKle0gX6BW21zYBwaHJqbN6I8nRv9Rp47XEU1UV1Mdf/PhfTnxY31rFrPYL77xeWJzoFfT8zao39V4gQds+1Ag7FjdNVdSDVKwDduF4kS7tIbKqb4M+jsbc3PIKyP9nyQpEQF5ebJuG7mqXJhVJGEL83rBx8MLFPA/1X3cUzKacgKyp2+Wmlt0EVhwCa1aRf9cSK6I7TbMC7/eGtDnC2ToiRlFJurVRblaEmhzVQS1yQ4Dkooqsj9hNVl6nhu7JfR52GLogns33Ec/yYuRcWcULKSlR5Cerfef/5YijBEhlr9X76SJiOpjvS4lwWFYX+h8xzuVhRLGwIVB9oQNllxYItzcDSGmRx+EOMXWASHmoUDnBOZg4GMVukqOcF5l0ynoepiA1YHLdZlMy6SB3P7BZKF/aNCOn9nXw+N9X4U/yUpkM3Pb7HoGdNrC8RO4SwrNjGrarkdEB6e1lBReK/dqcylaF/mpK9VLpfQszDI8xnR4VCmlEM+le0xOsyHfeGciabdI4KH0i0SfYl4ls5XrN+CaqFWdo="
- - PYPI=false
-
-cache:
- directories:
- - $HOME/.cache/pip
-
-matrix:
- fast_finish: true
- include:
- - os: linux
- env: [PYTHON=2.7, NUMPY=1.13, CYTHON=0.26]
- - os: linux
- env: [PYTHON=2.7]
- - os: linux
- env: [PYTHON=3.5, NUMPY=1.14]
- - os: linux
- env: [PYTHON=3.6, NUMPY=1.15, CYTHON=0.27]
- - os: linux
- python: 3.6
- env: [PYPI=true]
- - os: linux
- env: [PYTHON=3.7, DOCBUILD=true]
- - os: osx
- language: generic
- env: [PYTHON=3.6]
-
-
-before_install:
- - git fetch --tags
- - if [[ $PYPI = true ]]; then source ci/pypi-install.sh; else source ci/conda-install.sh; fi
- - pip install tempita coverage coveralls pytest-cov codecov -q
- - pip list
- - export BUILD_DIR=${PWD}
- - if [[ ${DOCBUILD} == true ]]; then pip install sphinx sphinx_rtd_theme guzzle_sphinx_theme ipython doctr -q; fi
- - gcc --version || true
- - clang --version || true
-
-install:
- - python setup.py develop
-
-script:
- - set -e
- - pytest randomgen
- - |
- if [[ ${DOCBUILD} == true ]]; then
- cd ${BUILD_DIR}/doc
- make html
- make html
- cd ${BUILD_DIR}
- doctr deploy devel --build-tags
- if [[ -z ${TRAVIS_TAG} ]]; then
- echo "Not a tagged build."
- else
- doctr deploy . --build-tags
- fi
- fi
-
-after_success:
- - |
- if [[ ${DOCBUILD} == true ]]; then
- cd ${BUILD_DIR}
- python benchmark.py;
- fi
diff --git a/_randomgen/README-git.md b/_randomgen/README-git.md
deleted file mode 100644
index c77169390..000000000
--- a/_randomgen/README-git.md
+++ /dev/null
@@ -1,26 +0,0 @@
-These are the bash commands used to get the bashtage/randomgen repo into numpy/numpy
-
-```bash
-# from a directory just above a numpy git checkout
-git clone https://github.com/bashtage/randomgen.git
-cd randomgen
-# rewrite the checkout, pushing the content into '_randomgen'
-git filter-branch --index-filter '
- git ls-files -s |
- sed "s-\t-\t_randomgen/-" |
- GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
- mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
-' HEAD
-# write this file, commit it
-git add _randomgen/README-git.md
-git commit -m"Add README-git.md"
-git checkout -b randomgen
-cd ../numpy
-git checkout -b randomgen
-git remote add randomgen ../randomgen
-git fetch randomgen randomgen
-git merge --allow-unrelated-histories randomgen/randomgen
-git remote remove randomgen
-# Now all the randomgen commits are on the randomgen branch in numpy,
-# and there is a subdirectory _randomgen with the content
-```
diff --git a/_randomgen/README.md b/_randomgen/README.md
deleted file mode 100644
index 2e8073645..000000000
--- a/_randomgen/README.md
+++ /dev/null
@@ -1,288 +0,0 @@
-# RandomGen
-
-[![Travis Build Status](https://travis-ci.org/bashtage/randomgen.svg?branch=master)](https://travis-ci.org/bashtage/randomgen)
-[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/odc5c4ukhru5xicl/branch/master?svg=true)](https://ci.appveyor.com/project/bashtage/randomgen/branch/master)
-[![PyPI version](https://badge.fury.io/py/randomgen.svg)](https://pypi.org/project/randomgen/)
-
-Random Number Generator using settable Basic RNG interface for future
-NumPy RandomState evolution.
-
-This is a library and generic interface for alternative random
-generators in Python and NumPy.
-
-## Python 2.7 Support
-
-v1.16 is the final major version that supports Python 2.7. Any bugs
-in v1.16 will be patched until the end of 2019. All future releases
-are Python 3, with an initial minimum version of 3.5.
-
-## Compatibility Warning
-
-`RandomGenerator` does not support Box-Muller normal variates and so it not
-100% compatible with NumPy (or randomstate). Box-Muller normals are slow
-to generate and all functions which previously relied on Box-Muller
-normals now use the faster Ziggurat implementation. If you require backward
-compatibility, a legacy generator, ``LegacyGenerator``, has been created
-which can fully reproduce the sequence produced by NumPy.
-
-## Features
-
-* Replacement for NumPy's RandomState
-
- ```python
- from randomgen import RandomGenerator, MT19937
- rnd = RandomGenerator(MT19937())
- x = rnd.standard_normal(100)
- y = rnd.random_sample(100)
- z = rnd.randn(10,10)
- ```
-
-* Default random generator is a fast generator called Xoroshiro128plus
-* Support for random number generators that support independent streams
- and jumping ahead so that sub-streams can be generated
-* Faster random number generation, especially for normal, standard
- exponential and standard gamma using the Ziggurat method
-
- ```python
- from randomgen import RandomGenerator
- # Default basic PRNG is Xoroshiro128
- rnd = RandomGenerator()
- w = rnd.standard_normal(10000)
- x = rnd.standard_exponential(10000)
- y = rnd.standard_gamma(5.5, 10000)
- ```
-
-* Support for 32-bit floating randoms for core generators.
- Currently supported:
-
- * Uniforms (`random_sample`)
- * Exponentials (`standard_exponential`, both Inverse CDF and Ziggurat)
- * Normals (`standard_normal`)
- * Standard Gammas (via `standard_gamma`)
-
- **WARNING**: The 32-bit generators are **experimental** and subject
- to change.
-
- **Note**: There are _no_ plans to extend the alternative precision
- generation to all distributions.
-
-* Support for filling existing arrays using `out` keyword argument. Currently
- supported in (both 32- and 64-bit outputs)
-
- * Uniforms (`random_sample`)
- * Exponentials (`standard_exponential`)
- * Normals (`standard_normal`)
- * Standard Gammas (via `standard_gamma`)
-
-* Support for Lemire's method of generating uniform integers on an
- arbitrary interval by setting `use_masked=True`.
-
-## Included Pseudo Random Number Generators
-
-This module includes a number of alternative random
-number generators in addition to the MT19937 that is included in NumPy.
-The RNGs include:
-
-* [MT19937](https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/),
- the NumPy rng
-* [dSFMT](http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/) a
- SSE2-aware version of the MT19937 generator that is especially fast at
- generating doubles
-* [xoroshiro128+](http://xoroshiro.di.unimi.it/),
- [xorshift1024*φ](http://xorshift.di.unimi.it/),
- [xoshiro256**](http://xorshift.di.unimi.it/),
- and [xoshiro512**](http://xorshift.di.unimi.it/)
-* [PCG64](http://www.pcg-random.org/)
-* ThreeFry and Philox from [Random123](https://www.deshawresearch.com/resources_random123.html)
-
-## Differences from `numpy.random.RandomState`
-
-### New Features
-
-* `standard_normal`, `normal`, `randn` and `multivariate_normal` all
- use the much faster (100%+) Ziggurat method.
-* `standard_gamma` and `gamma` both use the much faster Ziggurat method.
-* `standard_exponential` `exponential` both support an additional
- `method` keyword argument which can be `inv` or
- `zig` where `inv` corresponds to the current method using the inverse
- CDF and `zig` uses the much faster (100%+) Ziggurat method.
-* Core random number generators can produce either single precision
- (`np.float32`) or double precision (`np.float64`, the default) using
- the optional keyword argument `dtype`
-* Core random number generators can fill existing arrays using the
- `out` keyword argument
-* Standardizes integer-values random values as int64 for all platforms.
-* `randint` supports generating using rejection sampling on masked
- values (the default) or Lemire's method. Lemire's method can be much
- faster when the required interval length is much smaller than the
- closes power of 2.
-
-### New Functions
-
-* `random_entropy` - Read from the system entropy provider, which is
- commonly used in cryptographic applications
-* `random_raw` - Direct access to the values produced by the underlying
- PRNG. The range of the values returned depends on the specifics of the
- PRNG implementation.
-* `random_uintegers` - unsigned integers, either 32- (`[0, 2**32-1]`)
- or 64-bit (`[0, 2**64-1]`)
-* `jump` - Jumps RNGs that support it. `jump` moves the state a great
- distance. _Only available if supported by the RNG._
-* `advance` - Advanced the RNG 'as-if' a number of draws were made,
- without actually drawing the numbers. _Only available if supported by
- the RNG._
-
-## Status
-
-* Builds and passes all tests on:
- * Linux 32/64 bit, Python 2.7, 3.4, 3.5, 3.6, 3.6
- * PC-BSD (FreeBSD) 64-bit, Python 2.7
- * OSX 64-bit, Python 2.7, 3.5, 3.6, 3.7
- * Windows 32/64 bit, Python 2.7, 3.5, 3.6 and 3.7
-
-## Version
-
-The version matched the latest version of NumPy where
-`LegacyGenerator(MT19937())` passes all NumPy test.
-
-## Documentation
-
-Documentation for the latest release is available on
-[my GitHub pages](http://bashtage.github.io/randomgen/). Documentation for
-the latest commit (unreleased) is available under
-[devel](http://bashtage.github.io/randomgen/devel/).
-
-## Plans
-
-This module is essentially complete. There are a few rough edges that
-need to be smoothed.
-
-* Creation of additional streams from where supported
- (i.e. a `next_stream()` method)
-
-## Requirements
-Building requires:
-
-* Python (2.7, 3.5, 3.6, 3.7)
-* NumPy (1.13, 1.14, 1.15, 1.16)
-* Cython (0.26+)
-* tempita (0.5+), if not provided by Cython
-
-Testing requires pytest (4.0+).
-
-**Note:** it might work with other versions but only tested with these
-versions.
-
-## Development and Testing
-
-All development has been on 64-bit Linux, and it is regularly tested on
-Travis-CI (Linux/OSX) and Appveyor (Windows). The library is occasionally
-tested on Linux 32-bit and Free BSD 11.1.
-
-Basic tests are in place for all RNGs. The MT19937 is tested against
-NumPy's implementation for identical results. It also passes NumPy's
-test suite where still relevant.
-
-## Installing
-
-Either install from PyPi using
-
-```bash
-pip install randomgen
-```
-
-or, if you want the latest version,
-
-```bash
-pip install git+https://github.com/bashtage/randomgen.git
-```
-
-or from a cloned repo,
-
-```bash
-python setup.py install
-```
-
-### SSE2
-
-`dSFTM` makes use of SSE2 by default. If you have a very old computer
-or are building on non-x86, you can install using:
-
-```bash
-python setup.py install --no-sse2
-```
-
-### Windows
-
-Either use a binary installer, or if building from scratch, use
-Python 3.6 with Visual Studio 2015/2017 Community Edition. It can also
-be build using Microsoft Visual C++ Compiler for Python 2.7 and
-Python 2.7.
-
-## Using
-
-The separate generators are importable from `randomgen`
-
-```python
-from randomgen import RandomGenerator, ThreeFry, PCG64, MT19937
-rg = RandomGenerator(ThreeFry())
-rg.random_sample(100)
-
-rg = RandomGenerator(PCG64())
-rg.random_sample(100)
-
-# Identical to NumPy
-rg = RandomGenerator(MT19937())
-rg.random_sample(100)
-```
-
-## License
-
-Standard NCSA, plus sub licenses for components.
-
-## Performance
-
-Performance is promising, and even the mt19937 seems to be faster than
-NumPy's mt19937.
-
- Speed-up relative to NumPy (Uniform Doubles)
- ************************************************************
- DSFMT 184.9%
- MT19937 17.3%
- PCG32 83.3%
- PCG64 108.3%
- Philox -4.9%
- ThreeFry -12.0%
- ThreeFry32 -63.9%
- Xoroshiro128 159.5%
- Xorshift1024 150.4%
- Xoshiro256StarStar 145.7%
- Xoshiro512StarStar 113.1%
-
- Speed-up relative to NumPy (64-bit unsigned integers)
- ************************************************************
- DSFMT 17.4%
- MT19937 7.8%
- PCG32 60.3%
- PCG64 73.5%
- Philox -25.5%
- ThreeFry -30.5%
- ThreeFry32 -67.8%
- Xoroshiro128 124.0%
- Xorshift1024 109.4%
- Xoshiro256StarStar 100.3%
- Xoshiro512StarStar 63.5%
-
- Speed-up relative to NumPy (Standard normals)
- ************************************************************
- DSFMT 183.0%
- MT19937 169.0%
- PCG32 240.7%
- PCG64 231.6%
- Philox 131.3%
- ThreeFry 118.3%
- ThreeFry32 21.6%
- Xoroshiro128 332.1%
- Xorshift1024 232.4%
- Xoshiro256StarStar 306.6%
- Xoshiro512StarStar 274.6%
diff --git a/_randomgen/README.rst b/_randomgen/README.rst
deleted file mode 100644
index 7e91b898d..000000000
--- a/_randomgen/README.rst
+++ /dev/null
@@ -1,320 +0,0 @@
-RandomGen
-=========
-
-|Travis Build Status| |Appveyor Build Status| |PyPI version|
-
-Random Number Generator using settable Basic RNG interface for future
-NumPy RandomState evolution.
-
-This is a library and generic interface for alternative random
-generators in Python and NumPy.
-
-Python 2.7 Support
-------------------
-
-Release 1.16.0 is the final version that supports Python 2.7. Any bugs
-in v1.16.0 will be patched until the end of 2019. All future releases
-are Python 3, with an initial minimum version of 3.5.
-
-Compatibility Warning
----------------------
-
-``RandomGenerator`` does not support Box-Muller normal variates and so
-it not 100% compatible with NumPy (or randomstate). Box-Muller normals
-are slow to generate and all functions which previously relied on
-Box-Muller normals now use the faster Ziggurat implementation. If you
-require backward compatibility, a legacy generator, ``LegacyGenerator``,
-has been created which can fully reproduce the sequence produced by
-NumPy.
-
-Features
---------
-
-- Replacement for NumPy’s RandomState
-
- .. code:: python
-
- from randomgen import RandomGenerator, MT19937
- rnd = RandomGenerator(MT19937())
- x = rnd.standard_normal(100)
- y = rnd.random_sample(100)
- z = rnd.randn(10,10)
-
-- Default random generator is a fast generator called Xoroshiro128plus
-- Support for random number generators that support independent streams
- and jumping ahead so that sub-streams can be generated
-- Faster random number generation, especially for normal, standard
- exponential and standard gamma using the Ziggurat method
-
- .. code:: python
-
- from randomgen import RandomGenerator
- # Default basic PRNG is Xoroshiro128
- rnd = RandomGenerator()
- w = rnd.standard_normal(10000)
- x = rnd.standard_exponential(10000)
- y = rnd.standard_gamma(5.5, 10000)
-
-- Support for 32-bit floating randoms for core generators. Currently
- supported:
-
- - Uniforms (``random_sample``)
- - Exponentials (``standard_exponential``, both Inverse CDF and
- Ziggurat)
- - Normals (``standard_normal``)
- - Standard Gammas (via ``standard_gamma``)
-
- **WARNING**: The 32-bit generators are **experimental** and subject
- to change.
-
- **Note**: There are *no* plans to extend the alternative precision
- generation to all distributions.
-
-- Support for filling existing arrays using ``out`` keyword argument.
- Currently supported in (both 32- and 64-bit outputs)
-
- - Uniforms (``random_sample``)
- - Exponentials (``standard_exponential``)
- - Normals (``standard_normal``)
- - Standard Gammas (via ``standard_gamma``)
-
-- Support for Lemire’s method of generating uniform integers on an
- arbitrary interval by setting ``use_masked=True``.
-
-Included Pseudo Random Number Generators
-----------------------------------------
-
-This module includes a number of alternative random number generators in
-addition to the MT19937 that is included in NumPy. The RNGs include:
-
-- `MT19937 <https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/>`__,
- the NumPy rng
-- `dSFMT <http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/>`__ a
- SSE2-aware version of the MT19937 generator that is especially fast
- at generating doubles
-- `xoroshiro128+ <http://xoroshiro.di.unimi.it/>`__,
- `xorshift1024*φ <http://xorshift.di.unimi.it/>`__,
- `xoshiro256*\* <http://xorshift.di.unimi.it/>`__, and
- `xoshiro512*\* <http://xorshift.di.unimi.it/>`__
-- `PCG64 <http://www.pcg-random.org/>`__
-- ThreeFry and Philox from
- `Random123 <https://www.deshawresearch.com/resources_random123.html>`__
-
-Differences from ``numpy.random.RandomState``
----------------------------------------------
-
-New Features
-~~~~~~~~~~~~
-
-- ``standard_normal``, ``normal``, ``randn`` and
- ``multivariate_normal`` all use the much faster (100%+) Ziggurat
- method.
-- ``standard_gamma`` and ``gamma`` both use the much faster Ziggurat
- method.
-- ``standard_exponential`` ``exponential`` both support an additional
- ``method`` keyword argument which can be ``inv`` or ``zig`` where
- ``inv`` corresponds to the current method using the inverse CDF and
- ``zig`` uses the much faster (100%+) Ziggurat method.
-- Core random number generators can produce either single precision
- (``np.float32``) or double precision (``np.float64``, the default)
- using the optional keyword argument ``dtype``
-- Core random number generators can fill existing arrays using the
- ``out`` keyword argument
-- Standardizes integer-values random values as int64 for all platforms.
-- ``randint`` supports generating using rejection sampling on masked
- values (the default) or Lemire’s method. Lemire’s method can be much
- faster when the required interval length is much smaller than the
- closes power of 2.
-
-New Functions
-~~~~~~~~~~~~~
-
-- ``random_entropy`` - Read from the system entropy provider, which is
- commonly used in cryptographic applications
-- ``random_raw`` - Direct access to the values produced by the
- underlying PRNG. The range of the values returned depends on the
- specifics of the PRNG implementation.
-- ``random_uintegers`` - unsigned integers, either 32-
- (``[0, 2**32-1]``) or 64-bit (``[0, 2**64-1]``)
-- ``jump`` - Jumps RNGs that support it. ``jump`` moves the state a
- great distance. *Only available if supported by the RNG.*
-- ``advance`` - Advanced the RNG ‘as-if’ a number of draws were made,
- without actually drawing the numbers. *Only available if supported by
- the RNG.*
-
-Status
-------
-
-- Builds and passes all tests on:
-
- - Linux 32/64 bit, Python 2.7, 3.5, 3.6, 3.7
- - PC-BSD (FreeBSD) 64-bit, Python 2.7
- - OSX 64-bit, Python 2.7, 3.5, 3.6, 3.7
- - Windows 32/64 bit, Python 2.7, 3.5, 3.6, and 3.7
-
-Version
--------
-
-The version matched the latest version of NumPy where
-``LegacyGenerator(MT19937())`` passes all NumPy test.
-
-Documentation
--------------
-
-Documentation for the latest release is available on `my GitHub
-pages <http://bashtage.github.io/randomgen/>`__. Documentation for the
-latest commit (unreleased) is available under
-`devel <http://bashtage.github.io/randomgen/devel/>`__.
-
-Plans
------
-
-This module is essentially complete. There are a few rough edges that
-need to be smoothed.
-
-- Creation of additional streams from where supported (i.e. a
- ``next_stream()`` method)
-
-Requirements
-------------
-
-Building requires:
-
-- Python (2.7, 3.5, 3.6, 3.7)
-- NumPy (1.13, 1.14, 1.15, 1.16)
-- Cython (0.26+)
-- tempita (0.5+), if not provided by Cython
-
-Testing requires pytest (4.0+).
-
-**Note:** it might work with other versions but only tested with these
-versions.
-
-Development and Testing
------------------------
-
-All development has been on 64-bit Linux, and it is regularly tested on
-Travis-CI (Linux/OSX) and Appveyor (Windows). The library is
-occasionally tested on Linux 32-bit and Free BSD 11.1.
-
-Basic tests are in place for all RNGs. The MT19937 is tested against
-NumPy’s implementation for identical results. It also passes NumPy’s
-test suite where still relevant.
-
-Installing
-----------
-
-Either install from PyPi using
-
-.. code:: bash
-
- pip install randomgen
-
-or, if you want the latest version,
-
-.. code:: bash
-
- pip install git+https://github.com/bashtage/randomgen.git
-
-or from a cloned repo,
-
-.. code:: bash
-
- python setup.py install
-
-SSE2
-~~~~
-
-``dSFTM`` makes use of SSE2 by default. If you have a very old computer
-or are building on non-x86, you can install using:
-
-.. code:: bash
-
- python setup.py install --no-sse2
-
-Windows
-~~~~~~~
-
-Either use a binary installer, or if building from scratch, use Python
-3.6 with Visual Studio 2015/2017 Community Edition. It can also be build
-using Microsoft Visual C++ Compiler for Python 2.7 and Python 2.7.
-
-Using
------
-
-The separate generators are importable from ``randomgen``
-
-.. code:: python
-
- from randomgen import RandomGenerator, ThreeFry, PCG64, MT19937
- rg = RandomGenerator(ThreeFry())
- rg.random_sample(100)
-
- rg = RandomGenerator(PCG64())
- rg.random_sample(100)
-
- # Identical to NumPy
- rg = RandomGenerator(MT19937())
- rg.random_sample(100)
-
-License
--------
-
-Standard NCSA, plus sub licenses for components.
-
-Performance
------------
-
-Performance is promising, and even the mt19937 seems to be faster than
-NumPy’s mt19937.
-
-::
-
- Speed-up relative to NumPy (Uniform Doubles)
- ************************************************************
- DSFMT 184.9%
- MT19937 17.3%
- PCG32 83.3%
- PCG64 108.3%
- Philox -4.9%
- ThreeFry -12.0%
- ThreeFry32 -63.9%
- Xoroshiro128 159.5%
- Xorshift1024 150.4%
- Xoshiro256StarStar 145.7%
- Xoshiro512StarStar 113.1%
-
- Speed-up relative to NumPy (64-bit unsigned integers)
- ************************************************************
- DSFMT 17.4%
- MT19937 7.8%
- PCG32 60.3%
- PCG64 73.5%
- Philox -25.5%
- ThreeFry -30.5%
- ThreeFry32 -67.8%
- Xoroshiro128 124.0%
- Xorshift1024 109.4%
- Xoshiro256StarStar 100.3%
- Xoshiro512StarStar 63.5%
-
- Speed-up relative to NumPy (Standard normals)
- ************************************************************
- DSFMT 183.0%
- MT19937 169.0%
- PCG32 240.7%
- PCG64 231.6%
- Philox 131.3%
- ThreeFry 118.3%
- ThreeFry32 21.6%
- Xoroshiro128 332.1%
- Xorshift1024 232.4%
- Xoshiro256StarStar 306.6%
- Xoshiro512StarStar 274.6%
-
-.. |Travis Build Status| image:: https://travis-ci.org/bashtage/randomgen.svg?branch=master
- :target: https://travis-ci.org/bashtage/randomgen
-.. |Appveyor Build Status| image:: https://ci.appveyor.com/api/projects/status/odc5c4ukhru5xicl/branch/master?svg=true
- :target: https://ci.appveyor.com/project/bashtage/randomgen/branch/master
-.. |PyPI version| image:: https://badge.fury.io/py/randomgen.svg
- :target: https://pypi.org/project/randomgen/
diff --git a/_randomgen/benchmark.py b/_randomgen/benchmark.py
deleted file mode 100644
index c4c4ab93d..000000000
--- a/_randomgen/benchmark.py
+++ /dev/null
@@ -1,201 +0,0 @@
-import os
-import struct
-import timeit
-
-import numpy as np
-import pandas as pd
-from numpy.random import RandomState
-
-rs = RandomState()
-
-SETUP = '''
-import numpy as np
-if '{brng}' == 'numpy':
- import numpy.random
- rg = numpy.random.RandomState()
-else:
- from randomgen import RandomGenerator, {brng}
- rg = RandomGenerator({brng}())
-rg.random_sample()
-'''
-
-scale_32 = scale_64 = 1
-if struct.calcsize('P') == 8 and os.name != 'nt':
- # 64 bit
- scale_32 = 0.5
-else:
- scale_64 = 2
-
-PRNGS = ['DSFMT', 'PCG64', 'PCG32', 'MT19937', 'Xoroshiro128', 'Xorshift1024',
- 'Xoshiro256StarStar', 'Xoshiro512StarStar', 'Philox', 'ThreeFry',
- 'ThreeFry32', 'numpy']
-
-
-def timer(code, setup):
- return 1000 * min(timeit.Timer(code, setup=setup).repeat(10, 10)) / 10.0
-
-
-def print_legend(legend):
- print('\n' + legend + '\n' + '*' * max(60, len(legend)))
-
-
-def run_timer(dist, command, numpy_command=None, setup='', random_type=''):
- print('-' * 80)
- if numpy_command is None:
- numpy_command = command
-
- res = {}
- for brng in PRNGS:
- cmd = numpy_command if brng == 'numpy' else command
- res[brng] = timer(cmd, setup=setup.format(brng=brng))
-
- s = pd.Series(res)
- t = s.apply(lambda x: '{0:0.2f} ms'.format(x))
- print_legend('Time to produce 1,000,000 ' + random_type)
- print(t.sort_index())
-
- p = 1000.0 / s
- p = p.apply(lambda x: '{0:0.2f} million'.format(x))
- print_legend(random_type + ' per second')
- print(p.sort_index())
-
- baseline = [k for k in p.index if 'numpy' in k][0]
- p = 1000.0 / s
- p = p / p[baseline] * 100 - 100
- p = p.drop(baseline, 0)
- p = p.apply(lambda x: '{0:0.1f}%'.format(x))
- print_legend('Speed-up relative to NumPy')
- print(p.sort_index())
- print('-' * 80)
-
-
-def timer_raw():
- dist = 'random_raw'
- command = 'rg.random_raw(size=1000000, output=False)'
- info = np.iinfo(np.int32)
- command_numpy = 'rg.random_integers({max},size=1000000)'
- command_numpy = command_numpy.format(max=info.max)
- run_timer(dist, command, command_numpy, SETUP, 'Raw Values')
-
-
-def timer_uniform():
- dist = 'random_sample'
- command = 'rg.random_sample(1000000)'
- run_timer(dist, command, None, SETUP, 'Uniforms')
-
-
-def timer_bounded(bits=8, max=95, use_masked=True):
- """
- Timer for 8-bit bounded values.
-
- Parameters
- ----------
- bits : {8, 16, 32, 64}
- Bit width of unsigned output type
- max : int
- Upper bound for range. Lower is always 0. Must be <= 2**bits.
- use_masked: bool
- If True, masking and rejection sampling is used to generate a random
- number in an interval. If False, Lemire's algorithm is used if
- available to generate a random number in an interval.
-
- Notes
- -----
- Lemire's algorithm has improved performance when {max}+1 is not a
- power of two.
- """
- if bits not in (8, 16, 32, 64):
- raise ValueError('bits must be one of 8, 16, 32, 64.')
- minimum = 0
-
- dist = 'random_uintegers'
-
- if use_masked: # Use masking & rejection.
- command = 'rg.randint({min}, {max}+1, 1000000, dtype=np.uint{bits}, use_masked=True)'
- else: # Use Lemire's algo.
- command = 'rg.randint({min}, {max}+1, 1000000, dtype=np.uint{bits}, use_masked=False)'
-
- command = command.format(min=minimum, max=max, bits=bits)
-
- command_numpy = 'rg.randint({min}, {max}+1, 1000000, dtype=np.uint{bits})'
- command_numpy = command_numpy.format(min=minimum, max=max, bits=bits)
-
- run_timer(dist, command, command_numpy, SETUP,
- '{bits}-bit bounded unsigned integers (max={max}, '
- 'use_masked={use_masked})'.format(max=max, use_masked=use_masked, bits=bits))
-
-
-def timer_32bit():
- info = np.iinfo(np.uint32)
- minimum, maximum = info.min, info.max
- dist = 'random_uintegers'
- command = 'rg.random_uintegers(1000000, 32)'
- command_numpy = 'rg.randint({min}, {max}+1, 1000000, dtype=np.uint32)'
- command_numpy = command_numpy.format(min=minimum, max=maximum)
- run_timer(dist, command, command_numpy, SETUP, '32-bit unsigned integers')
-
-
-def timer_64bit():
- info = np.iinfo(np.uint64)
- minimum, maximum = info.min, info.max
- dist = 'random_uintegers'
- command = 'rg.random_uintegers(1000000)'
- command_numpy = 'rg.randint({min}, {max}+1, 1000000, dtype=np.uint64)'
- command_numpy = command_numpy.format(min=minimum, max=maximum)
- run_timer(dist, command, command_numpy, SETUP, '64-bit unsigned integers')
-
-
-def timer_normal_zig():
- dist = 'standard_normal'
- command = 'rg.standard_normal(1000000)'
- command_numpy = 'rg.standard_normal(1000000)'
- run_timer(dist, command, command_numpy, SETUP,
- 'Standard normals (Ziggurat)')
-
-
-if __name__ == '__main__':
- import argparse
-
- parser = argparse.ArgumentParser()
- parser.add_argument('-f', '--full',
- help='Run benchmarks for a wide range of distributions.'
- ' If not provided, only tests the production of '
- 'uniform values.',
- dest='full', action='store_true')
- parser.add_argument('-bi', '--bounded-ints',
- help='Included benchmark coverage of the bounded '
- 'integer generators in a full run.',
- dest='bounded_ints', action='store_true')
- args = parser.parse_args()
-
- timer_uniform()
- if args.full:
- timer_raw()
- if args.bounded_ints:
- timer_bounded(use_masked=True)
- timer_bounded(max=64, use_masked=False) # Worst case for Numpy.
- timer_bounded(max=95, use_masked=False) # Typ. avrg. case for Numpy.
- timer_bounded(max=127, use_masked=False) # Best case for Numpy.
-
- timer_bounded(16, use_masked=True)
- timer_bounded(16, max=1024, use_masked=False) # Worst case for Numpy.
- timer_bounded(16, max=1535, use_masked=False) # Typ. avrg. case for Numpy.
- timer_bounded(16, max=2047, use_masked=False) # Best case for Numpy.
-
- timer_32bit()
-
- if args.bounded_ints:
- timer_bounded(32, use_masked=True)
- timer_bounded(32, max=1024, use_masked=False) # Worst case for Numpy.
- timer_bounded(32, max=1535, use_masked=False) # Typ. avrg. case for Numpy.
- timer_bounded(32, max=2047, use_masked=False) # Best case for Numpy.
-
- timer_64bit()
-
- if args.bounded_ints:
- timer_bounded(64, use_masked=True)
- timer_bounded(64, max=1024, use_masked=False) # Worst case for Numpy.
- timer_bounded(64, max=1535, use_masked=False) # Typ. avrg. case for Numpy.
- timer_bounded(64, max=2047, use_masked=False) # Best case for Numpy.
-
- timer_normal_zig()
diff --git a/_randomgen/setup.py b/_randomgen/setup.py
deleted file mode 100644
index 9e9517e97..000000000
--- a/_randomgen/setup.py
+++ /dev/null
@@ -1,325 +0,0 @@
-import os
-import glob
-import platform
-import struct
-import sys
-from os.path import join
-
-import Cython.Compiler.Options
-import numpy as np
-from Cython.Build import cythonize
-from setuptools import setup, find_packages, Distribution
-from setuptools.extension import Extension
-
-try:
- import Cython.Tempita as tempita
-except ImportError:
- try:
- import tempita
- except ImportError:
- raise ImportError('tempita required to install, '
- 'use pip install tempita')
-
-try:
- import pypandoc
- # With an input file: it will infer the input format from the filename
- with open('README.rst', 'wb') as readme:
- readme.write(pypandoc.convert_file('README.md', 'rst').encode('utf8'))
-except ImportError:
- import warnings
- warnings.warn(
- 'Unable to import pypandoc. Do not use this as a release build!')
-
-import versioneer
-
-with open('requirements.txt') as f:
- required = f.read().splitlines()
-
-Cython.Compiler.Options.annotate = True
-
-# Make a guess as to whether SSE2 is present for now, TODO: Improve
-USE_SSE2 = False
-for k in platform.uname():
- for val in ('x86', 'i686', 'i386', 'amd64'):
- USE_SSE2 = USE_SSE2 or val in k.lower()
-print('Building with SSE?: {0}'.format(USE_SSE2))
-if '--no-sse2' in sys.argv:
- USE_SSE2 = False
- sys.argv.remove('--no-sse2')
-
-MOD_DIR = './randomgen'
-
-DEBUG = False
-PCG_EMULATED_MATH = False
-
-EXTRA_INCLUDE_DIRS = []
-EXTRA_LINK_ARGS = []
-EXTRA_LIBRARIES = ['m'] if os.name != 'nt' else []
-# Undef for manylinux
-EXTRA_COMPILE_ARGS = [] if os.name == 'nt' else [
- '-std=c99', '-U__GNUC_GNU_INLINE__']
-if os.name == 'nt':
- EXTRA_LINK_ARGS = ['/LTCG', '/OPT:REF', 'Advapi32.lib', 'Kernel32.lib']
- if DEBUG:
- EXTRA_LINK_ARGS += ['-debug']
- EXTRA_COMPILE_ARGS += ["-Zi", "/Od"]
- if sys.version_info < (3, 0):
- EXTRA_INCLUDE_DIRS += [join(MOD_DIR, 'src', 'common')]
-
-PCG64_DEFS = []
-if sys.maxsize < 2 ** 32 or os.name == 'nt':
- # Force emulated mode here
- PCG_EMULATED_MATH = True
- PCG64_DEFS += [('PCG_FORCE_EMULATED_128BIT_MATH', '1')]
-
-DSFMT_DEFS = [('DSFMT_MEXP', '19937')]
-if USE_SSE2:
- if os.name == 'nt':
- EXTRA_COMPILE_ARGS += ['/wd4146', '/GL']
- if struct.calcsize('P') < 8:
- EXTRA_COMPILE_ARGS += ['/arch:SSE2']
- else:
- EXTRA_COMPILE_ARGS += ['-msse2']
- DSFMT_DEFS += [('HAVE_SSE2', '1')]
-if struct.calcsize('P') < 8:
- PCG_EMULATED_MATH = True
-
-files = glob.glob('./randomgen/*.in')
-for templated_file in files:
- output_file_name = os.path.splitext(templated_file)[0]
- if (os.path.exists(output_file_name) and
- (os.path.getmtime(templated_file) < os.path.getmtime(output_file_name))):
- continue
- with open(templated_file, 'r') as source_file:
- template = tempita.Template(source_file.read())
- with open(output_file_name, 'w') as output_file:
- output_file.write(template.substitute())
-
-
-extensions = [Extension('randomgen.entropy',
- sources=[join(MOD_DIR, 'entropy.pyx'),
- join(MOD_DIR, 'src', 'entropy', 'entropy.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'entropy')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.dsfmt",
- ["randomgen/dsfmt.pyx",
- join(MOD_DIR, 'src', 'dsfmt', 'dSFMT.c'),
- join(MOD_DIR, 'src', 'dsfmt', 'dSFMT-jump.c'),
- join(MOD_DIR, 'src', 'aligned_malloc', 'aligned_malloc.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'dsfmt')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- define_macros=DSFMT_DEFS,
- ),
- Extension("randomgen.mt19937",
- ["randomgen/mt19937.pyx",
- join(MOD_DIR, 'src', 'mt19937', 'mt19937.c'),
- join(MOD_DIR, 'src', 'mt19937', 'mt19937-jump.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'mt19937')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.philox",
- ["randomgen/philox.pyx",
- join(MOD_DIR, 'src', 'philox', 'philox.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'philox')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.pcg64",
- ["randomgen/pcg64.pyx",
- join(MOD_DIR, 'src', 'pcg64', 'pcg64.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'pcg64')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- define_macros=PCG64_DEFS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.pcg32",
- ["randomgen/pcg32.pyx",
- join(MOD_DIR, 'src', 'pcg32', 'pcg32.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'pcg32')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.threefry",
- ["randomgen/threefry.pyx",
- join(MOD_DIR, 'src', 'threefry', 'threefry.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'threefry')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.threefry32",
- ["randomgen/threefry32.pyx",
- join(MOD_DIR, 'src', 'threefry32', 'threefry32.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'threefry32')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.xoroshiro128",
- ["randomgen/xoroshiro128.pyx",
- join(MOD_DIR, 'src', 'xoroshiro128',
- 'xoroshiro128.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(
- MOD_DIR, 'src',
- 'xoroshiro128')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.xorshift1024",
- ["randomgen/xorshift1024.pyx",
- join(MOD_DIR, 'src', 'xorshift1024',
- 'xorshift1024.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(MOD_DIR, 'src',
- 'xorshift1024')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.xoshiro256starstar",
- ["randomgen/xoshiro256starstar.pyx",
- join(MOD_DIR, 'src', 'xoshiro256starstar',
- 'xoshiro256starstar.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(
- MOD_DIR, 'src',
- 'xoshiro256starstar')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.xoshiro512starstar",
- ["randomgen/xoshiro512starstar.pyx",
- join(MOD_DIR, 'src', 'xoshiro512starstar',
- 'xoshiro512starstar.c')],
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include(),
- join(
- MOD_DIR, 'src',
- 'xoshiro512starstar')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.generator",
- ["randomgen/generator.pyx",
- join(MOD_DIR, 'src', 'distributions',
- 'distributions.c')],
- libraries=EXTRA_LIBRARIES,
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include()],
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.common",
- ["randomgen/common.pyx"],
- libraries=EXTRA_LIBRARIES,
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include()],
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.bounded_integers",
- ["randomgen/bounded_integers.pyx",
- join(MOD_DIR, 'src', 'distributions',
- 'distributions.c')],
- libraries=EXTRA_LIBRARIES,
- include_dirs=EXTRA_INCLUDE_DIRS + [np.get_include()],
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- Extension("randomgen.legacy.legacy",
- ["randomgen/legacy/legacy.pyx",
- join(MOD_DIR, 'src', 'legacy',
- 'distributions-boxmuller.c'),
- join(MOD_DIR, 'src', 'distributions', 'distributions.c')],
- libraries=EXTRA_LIBRARIES,
- include_dirs=EXTRA_INCLUDE_DIRS +
- [np.get_include()] + [join(MOD_DIR, 'legacy')],
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS
- ),
- ]
-
-
-classifiers = ['Development Status :: 5 - Production/Stable',
- 'Environment :: Console',
- 'Intended Audience :: End Users/Desktop',
- 'Intended Audience :: Financial and Insurance Industry',
- 'Intended Audience :: Information Technology',
- 'Intended Audience :: Science/Research',
- 'License :: OSI Approved',
- 'Operating System :: MacOS :: MacOS X',
- 'Operating System :: Microsoft :: Windows',
- 'Operating System :: POSIX :: Linux',
- 'Operating System :: Unix',
- 'Programming Language :: C',
- 'Programming Language :: Cython',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7',
- 'Topic :: Adaptive Technologies',
- 'Topic :: Artistic Software',
- 'Topic :: Office/Business :: Financial',
- 'Topic :: Scientific/Engineering',
- 'Topic :: Security :: Cryptography']
-
-
-class BinaryDistribution(Distribution):
- def is_pure(self):
- return False
-
-
-setup(
- name='randomgen',
- version=versioneer.get_version(),
- classifiers=classifiers,
- cmdclass=versioneer.get_cmdclass(),
- ext_modules=cythonize(extensions,
- compile_time_env={"PCG_EMULATED_MATH": PCG_EMULATED_MATH},
- compiler_directives={'language_level': '3'}),
- packages=find_packages(),
- package_dir={'randomgen': './randomgen'},
- package_data={'': ['*.h', '*.pxi', '*.pyx', '*.pxd', '*.in'],
- 'randomgen.tests.data': ['*.csv']},
- include_package_data=True,
- license='NSCA',
- author='Kevin Sheppard',
- author_email='kevin.k.sheppard@gmail.com',
- distclass=BinaryDistribution,
- long_description=open('README.rst').read(),
- description='Random generator supporting multiple PRNGs',
- url='https://github.com/bashtage/randomgen',
- keywords=['pseudo random numbers', 'PRNG', 'RNG', 'RandomState', 'random',
- 'random numbers', 'parallel random numbers', 'PCG',
- 'XorShift', 'dSFMT', 'MT19937', 'Random123', 'ThreeFry',
- 'Philox'],
- zip_safe=False,
- install_requires=required
-)
diff --git a/benchmarks/benchmarks/bench_random.py b/benchmarks/benchmarks/bench_random.py
index 9d84d83d3..38a079e84 100644
--- a/benchmarks/benchmarks/bench_random.py
+++ b/benchmarks/benchmarks/bench_random.py
@@ -4,6 +4,8 @@ from .common import Benchmark
import numpy as np
+from numpy.random import RandomState
+from numpy.random.randomgen import RandomGenerator
class Random(Benchmark):
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
@@ -80,3 +82,100 @@ class Permutation(Benchmark):
def time_permutation_int(self):
np.random.permutation(self.n)
+
+nom_size = 100000
+
+class RNG(Benchmark):
+ param_names = ['rng']
+ params = ['DSFMT', 'PCG64', 'PCG32', 'MT19937', 'Xoroshiro128',
+ 'Xorshift1024', 'Xoshiro256StarStar', 'Xoshiro512StarStar',
+ 'Philox', 'ThreeFry', 'ThreeFry32', 'numpy']
+
+ def setup(self, brng):
+ if brng == 'numpy':
+ self.rg = np.random.RandomState()
+ else:
+ self.rg = RandomGenerator(getattr(np.random.randomgen, brng)())
+ self.rg.random_sample()
+ self.int32info = np.iinfo(np.int32)
+ self.uint32info = np.iinfo(np.uint32)
+ self.uint64info = np.iinfo(np.uint64)
+
+ def time_raw(self, brng):
+ if brng == 'numpy':
+ self.rg.random_integers(self.int32info.max, size=nom_size)
+ else:
+ self.rg.random_integers(self.int32info.max, size=nom_size)
+
+ def time_32bit(self, brng):
+ min, max = self.uint32info.min, self.uint32info.max
+ self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
+
+ def time_64bit(self, brng):
+ min, max = self.uint64info.min, self.uint64info.max
+ self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
+
+ def time_normal_zig(self, brng):
+ self.rg.standard_normal(nom_size)
+
+class Bounded(Benchmark):
+ u8 = np.uint8
+ u16 = np.uint16
+ u32 = np.uint32
+ u64 = np.uint64
+ param_names = ['rng', 'dt_max_masked']
+ params = [['DSFMT', 'PCG64', 'PCG32', 'MT19937', 'Xoroshiro128',
+ 'Xorshift1024', 'Xoshiro256StarStar', 'Xoshiro512StarStar',
+ 'Philox', 'ThreeFry', 'ThreeFry32', 'numpy'],
+ [[u8, 95, True],
+ [u8, 64, False], # Worst case for legacy
+ [u8, 95, False], # Typ. avg. case for legacy
+ [u8, 127, False], # Best case for legacy
+ [u16, 95, True],
+ [u16, 1024, False], # Worst case for legacy
+ [u16, 1535, False], # Typ. avg. case for legacy
+ [u16, 2047, False], # Best case for legacy
+ [u32, 95, True],
+ [u32, 1024, False], # Worst case for legacy
+ [u32, 1535, False], # Typ. avg. case for legacy
+ [u32, 2047, False], # Best case for legacy
+ [u64, 95, True],
+ [u64, 1024, False], # Worst case for legacy
+ [u64, 1535, False], # Typ. avg. case for legacy
+ [u64, 2047, False], # Best case for legacy
+ ]]
+
+ def setup(self, brng, args):
+ if brng == 'numpy':
+ self.rg = np.random.RandomState()
+ else:
+ self.rg = RandomGenerator(getattr(np.random.randomgen, brng)())
+ self.rg.random_sample()
+
+ def time_bounded(self, brng, args):
+ """
+ Timer for 8-bit bounded values.
+
+ Parameters (packed as args)
+ ----------
+ dt : {uint8, uint16, uint32, unit64}
+ output dtype
+ max : int
+ Upper bound for range. Lower is always 0. Must be <= 2**bits.
+ use_masked: bool
+ If True, masking and rejection sampling is used to generate a random
+ number in an interval. If False, Lemire's algorithm is used if
+ available to generate a random number in an interval.
+
+ Notes
+ -----
+ Lemire's algorithm has improved performance when max+1 is not a
+ power of two.
+ """
+ dt, max, use_masked = args
+ if brng == 'numpy':
+ self.rg.randint(0, max + 1, nom_size, dtype=dt)
+ else:
+ self.rg.randint(0, max + 1, nom_size, dtype=dt,
+ use_masked=use_masked)
+
diff --git a/doc/source/reference/randomgen/extending.rst b/doc/source/reference/randomgen/extending.rst
index c9d987b59..64f2ddcc1 100644
--- a/doc/source/reference/randomgen/extending.rst
+++ b/doc/source/reference/randomgen/extending.rst
@@ -59,6 +59,8 @@ directly in Numba after compiling the file distributions.c into a DLL or so.
An example showing the use of a more complicated distribution is in the
examples folder.
+.. _randomgen_cython:
+
Cython
======
diff --git a/doc/source/reference/randomgen/generator.rst b/doc/source/reference/randomgen/generator.rst
index d59efd68c..54325f4d3 100644
--- a/doc/source/reference/randomgen/generator.rst
+++ b/doc/source/reference/randomgen/generator.rst
@@ -1,29 +1,26 @@
+.. currentmodule:: numpy.random.randomgen
+
Random Generator
----------------
-The :class:`~randomgen.generator.RandomGenerator` provides access to
-a wide range of distributions, and served as a replacement for
-:class:`~numpy.random.RandomState`. The main difference between
-the two is that :class:`~randomgen.generator.RandomGenerator` relies
-on an additional basic RNG to manage state and generate the random
-bits which are then transformed into random values from useful
-distributions. The default basic RNG used by
-:class:`~randomgen.generator.RandomGenerator` is
-:class:`~randomgen.xoroshiro128.Xoroshiro128`. The basic RNG can be
-changed by passing an instantized basic RNG to
-:class:`~randomgen.generator.RandomGenerator`.
+The :class:`~RandomGenerator` provides access to
+a wide range of distributions, and served as a replacement for
+:class:`~numpy.random.RandomState`. The main difference between
+the two is that ``RandomGenerator`` relies on an additional basic RNG to
+manage state and generate the random bits, which are then transformed into
+random values from useful distributions. The default basic RNG used by
+``RandomGenerator`` is :class:`~xoroshiro128.Xoroshiro128`. The basic RNG can be
+changed by passing an instantized basic RNG to ``RandomGenerator``.
-.. currentmodule:: numpy.random.randomgen.generator
.. autoclass:: RandomGenerator
:exclude-members:
-Seed and State Manipulation
-===========================
+Accessing the RNG
+=================
.. autosummary::
:toctree: generated/
- ~RandomGenerator.seed
- ~RandomGenerator.state
+ ~RandomGenerator.brng
Simple random data
==================
diff --git a/doc/source/reference/randomgen/index.rst b/doc/source/reference/randomgen/index.rst
index 67d0441a2..a8b6f1c9b 100644
--- a/doc/source/reference/randomgen/index.rst
+++ b/doc/source/reference/randomgen/index.rst
@@ -1,17 +1,21 @@
-Randomgen.RandomGen
-===================
-This package contains replacements for the NumPy
-:class:`~numpy.random.RandomState` object that allows the core random number
-generator be be changed.
-
.. current_module numpy.random.randomgen
+numpy.random.randomgen
+======================
+
+This package modernizes the legacy
+`~numpy.random.RandomState` object and allows changing the core random
+number generator (RNG). The `~numpy.random.randomgen.RandomGenerator` can
+be initialized with a number of different RNGs, and exposes many different
+probability distributions.
+
+
Quick Start
-----------
-Like :mod:`numpy.random`, RandomGen can be used at the module level.
-This uses the default :class:`~randomgen.generator.RandomGenerator` which
-uses normals provided by :class:`~randomgen.xoroshiro128.Xoroshiro128`.
+By default, `generator.RandomGenerator` uses normals provided by
+`xoroshiro128.Xoroshiro128` which will be faster than the legacy methods in
+`numpy.random`
.. code-block:: python
@@ -19,12 +23,11 @@ uses normals provided by :class:`~randomgen.xoroshiro128.Xoroshiro128`.
import randomgen.generator as random
random.standard_normal()
-:class:`~randomgen.generator.RandomGenerator` can also be used as a
-replacement for :class:`~numpy.random.RandomState`, although the random
-values are generated by :class:`~randomgen.xoroshiro128.Xoroshiro128`. It
-also isn't possible to directly seed a
-:class:`~randomgen.generator.RandomGenerator`.
-
+`numpy.random.randomgen.RandomGenerator` can also be used as a replacement for
+`~numpy.random.RandomState`, although the random values are generated by
+`~numpyrandom.randomgen.xoroshiro128.Xoroshiro128`. Since ``randomgen``
+separates the `~numpy.random.randomgen.RandomGenerator` from the RNG, it is not
+possible to directly seed the generator.
.. code-block:: python
@@ -34,9 +37,9 @@ also isn't possible to directly seed a
rg.standard_normal()
-Seeds can be passed to any of the basic RNGs. Here :class:`~randomgen.mt19937.MT19937`
-is used and the :class:`~randomgen.generator.RandomGenerator` is accessed via
-the property :attr:`~randomgen.mt19937.MT19937.generator`.
+Seeds can be passed to any of the basic RNGs. Here `numpy.random.randomgen.
+mt19937.MT19937` is used and the `~numpy.random.randomgen.RandomGenerator` is
+accessed via the attribute `~numpy.random.randomgen.mt19937.MT19937.generator`.
.. code-block:: python
@@ -48,24 +51,23 @@ the property :attr:`~randomgen.mt19937.MT19937.generator`.
Introduction
------------
RandomGen takes a different approach to producing random numbers from the
-:class:`numpy.random.RandomState` object used in NumPy. Random number
-generation is separated into two components, a basic RNG and a random
-generator.
+:class:`numpy.random.RandomState` object. Random number generation is
+separated into two components, a basic RNG and a random generator.
-The basic RNG has a limited set of responsibilities -- it manages the
+The basic RNG has a limited set of responsibilities. It manages the
underlying RNG state and provides functions to produce random doubles and
random unsigned 32- and 64-bit values. The basic random generator also handles
all seeding since this varies when using alternative basic RNGs.
-The random generator (:class:`~randomgen.generator.RandomGenerator`) takes the
+The `random generator <~numpy.random.randomgen.RandomGenerator>` takes the
basic RNG-provided functions and transforms them into more useful
distributions, e.g., simulated normal random values. This structure allows
alternative basic RNGs to be used without code duplication.
-The :class:`~randomgen.generator.RandomGenerator` is the user-facing object
+The `~numpy.random.randomgen.RandomGenerator` is the user-facing object
that is nearly identical to :class:`~numpy.random.RandomState`. The canonical
-method to initialize a generator passes a basic RNG --
-:class:`~randomgen.mt19937.MT19937`, the underlying RNG in NumPy -- as the
+method to initialize a generator passes a basic RNG -- `~numpy.random.
+randomgen.mt19937.MT19937`, the underlying RNG in NumPy -- as the
sole argument. Note that the basic RNG must be instantized.
.. code-block:: python
@@ -81,9 +83,9 @@ Seed information is directly passed to the basic RNG.
rg = RandomGenerator(MT19937(12345))
rg.random_sample()
-A shorthand method is also available which uses the
-:meth:`~randomgen.mt19937.MT19937.generator` property from a basic RNG to
-access an embedded random generator.
+A shorthand method is also available which uses the `~numpy.random.randomgen.
+mt19937.MT19937.generator` property from a basic RNG to access an embedded
+random generator.
.. code-block:: python
@@ -95,13 +97,14 @@ What's New or Different
.. warning::
The Box-Muller method used to produce NumPy's normals is no longer available
- in :class:`~randomgen.generator.RandomGenerator`. It is not possible to
- reproduce the random values using :class:`~randomgen.generator.RandomGenerator`
- for the normal distribution or any other distribution that relies on the
- normal such as the gamma or student's t. If you require backward compatibility, a
- legacy generator, :class:`~randomgen.legacy.LegacyGenerator`, has been created
- which can fully reproduce the sequence produced by NumPy.
-
+ in `~numpy.random.randomgen.RandomGenerator`. It is not possible to
+ reproduce the random values using `~numpy.random.randomgen.RandomGenerator`
+ for the normal distribution or any other distribution that
+ relies on the normal such as the gamma or student's t. If you require
+ backward compatibility, a legacy generator, `~numpy.random.randomgen.legacy.
+ LegacyGenerator`, has been created which can fully reproduce the sequence
+ produced by NumPy.
+
* The normal, exponential and gamma generators use 256-step Ziggurat
methods which are 2-10 times faster than NumPy's Box-Muller or inverse CDF
implementations.
@@ -110,20 +113,18 @@ What's New or Different
select distributions
* Optional ``out`` argument that allows existing arrays to be filled for
select distributions
-* Simulate from the complex normal distribution
- (:meth:`~randomgen.generator.RandomGenerator.complex_normal`)
-* :func:`~randomgen.entropy.random_entropy` provides access to the system
+* `~numpy.random.randomgen.entropy.random_entropy` provides access to the system
source of randomness that is used in cryptographic applications (e.g.,
``/dev/urandom`` on Unix).
-* All basic random generators functions to produce doubles, uint64s and
- uint32s via CTypes (:meth:`~randomgen.xoroshiro128.Xoroshiro128.ctypes`)
- and CFFI (:meth:`~randomgen.xoroshiro128.Xoroshiro128.cffi`). This allows
- these basic RNGs to be used in numba.
+* All basic random generators functions can produce doubles, uint64s and
+ uint32s via CTypes (`~numpy.random.randomgen.xoroshiro128.Xoroshiro128.ctypes`)
+ and CFFI (:meth:`~numpy.random.randomgen.xoroshiro128.Xoroshiro128.cffi`).
+ This allows these basic RNGs to be used in numba.
* The basic random number generators can be used in downstream projects via
- Cython.
+ :ref:`Cython <randomgen_cython>`.
* Support for Lemire’s method [Lemire]_ of generating uniform integers on an
arbitrary interval by setting ``use_masked=True`` in
- (:meth:`~randomgen.generator.RandomGenerator.randint`).
+ `~umpy.random.randomgen.generator.RandomGenerator.randint`.
See :ref:`new-or-different` for a complete list of improvements and
@@ -144,9 +145,9 @@ The main innovation is the inclusion of a number of alternative pseudo-random nu
generators, 'in addition' to the standard PRNG in NumPy. The included PRNGs are:
* MT19937 - The standard NumPy generator. Produces identical results to NumPy
- using the same seed/state. Adds a jump function that advances the generator
- as-if 2**128 draws have been made (:meth:`~randomgen.mt19937.MT19937.jump`).
- See `NumPy's documentation`_.
+ using the same seed/state. Adds a
+ `~numpy.random.randomgen.mt19937.MT19937.jump` function that advances the
+ generator as-if ``2**128`` draws have been made. See `numpy.random`.
* dSFMT - SSE2 enabled versions of the MT19937 generator. Theoretically
the same, but with a different state and so it is not possible to produce a
sequence identical to MT19937. Supports ``jump`` and so can
@@ -154,31 +155,30 @@ generators, 'in addition' to the standard PRNG in NumPy. The included PRNGs are
* XoroShiro128+ - Improved version of XorShift128+ with better performance
and statistical quality. Like the XorShift generators, it can be jumped
to produce multiple streams in parallel applications. See
- :meth:`~randomgen.xoroshiro128.Xoroshiro128.jump` for details.
+ `~numpy.random.randomgen.xoroshiro128.Xoroshiro128.jump` for details.
More information about this PRNG is available at the
`xorshift, xoroshiro and xoshiro authors' page`_.
* XorShift1024*φ - Fast fast generator based on the XSadd
generator. Supports ``jump`` and so can be used in
parallel applications. See the documentation for
- :meth:`~randomgen.xorshift1024.Xorshift1024.jump` for details. More information
- about these PRNGs is available at the
+ `~numpy.random.randomgen.xorshift1024.Xorshift1024.jump` for details. More
+ information about these PRNGs is available at the
`xorshift, xoroshiro and xoshiro authors' page`_.
* Xorshiro256** and Xorshiro512** - The most recently introduced XOR,
shift, and rotate generator. Supports ``jump`` and so can be used in
parallel applications. See the documentation for
- :meth:`~randomgen.xoshiro256starstar.Xoshirt256StarStar.jump` for details. More
- information about these PRNGs is available at the
+ `~numpy.random.randomgen.xoshiro256starstar.Xoshirt256StarStar.jump` for
+ details. More information about these PRNGs is available at the
`xorshift, xoroshiro and xoshiro authors' page`_.
* PCG-64 - Fast generator that support many parallel streams and
can be advanced by an arbitrary amount. See the documentation for
- :meth:`~randomgen.pcg64.PCG64.advance`. PCG-64 has a period of
+ `~numpy.random.randomgen.pcg64.PCG64.advance`. PCG-64 has a period of
:math:`2^{128}`. See the `PCG author's page`_ for more details about
this class of PRNG.
* ThreeFry and Philox - counter-based generators capable of being advanced an
arbitrary number of steps or generating independent streams. See the
`Random123`_ page for more details about this class of PRNG.
-.. _`NumPy's documentation`: https://docs.scipy.org/doc/numpy/reference/routines.random.html
.. _`dSFMT authors' page`: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
.. _`xorshift, xoroshiro and xoshiro authors' page`: http://xoroshiro.di.unimi.it/
.. _`PCG author's page`: http://www.pcg-random.org/
@@ -215,14 +215,12 @@ New Features
Changes
~~~~~~~
+
+This package was developed independently of NumPy and was integrated in version
+1.17.0. The original repo is at https://github.com/bashtage/randomgen.
+
.. toctree::
:maxdepth: 2
Change Log <change-log>
-Indices and tables
-~~~~~~~~~~~~~~~~~~
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/doc/source/reference/randomgen/new-or-different.rst b/doc/source/reference/randomgen/new-or-different.rst
index 0a27b9aa1..089efd6fb 100644
--- a/doc/source/reference/randomgen/new-or-different.rst
+++ b/doc/source/reference/randomgen/new-or-different.rst
@@ -64,9 +64,9 @@ What's New or Different
.. ipython:: python
- rg.seed(0)
+ rg.brng.seed(0)
rg.random_sample(3, dtype='d')
- rg.seed(0)
+ rg.brng.seed(0)
rg.random_sample(3, dtype='f')
* Optional ``out`` argument that allows existing arrays to be filled for
diff --git a/numpy/random/randomgen/LICENSE.md b/numpy/random/LICENSE.md
index caa665373..caa665373 100644
--- a/numpy/random/randomgen/LICENSE.md
+++ b/numpy/random/LICENSE.md
diff --git a/numpy/random/__init__.py b/numpy/random/__init__.py
index 53e947797..89015d6a2 100644
--- a/numpy/random/__init__.py
+++ b/numpy/random/__init__.py
@@ -83,6 +83,22 @@ get_state Get tuple representing internal state of generator.
set_state Set state of generator.
==================== =========================================================
+==================== =========================================================
+Random Number Streams that work with RandomGenerator
+==============================================================================
+MT19937
+DSFMT
+PCG32
+PCG64
+Philox
+ThreeFry
+ThreeFry32
+Xoroshiro128
+Xoroshift1024
+Xoshiro256StarStar
+Xoshiro512StarStar
+==================== =========================================================
+
"""
from __future__ import division, absolute_import, print_function
@@ -136,8 +152,24 @@ __all__ = [
'zipf'
]
-from .randomgen import mtrand
-from .randomgen.mtrand import *
+from . import mtrand
+from .mtrand import *
+from .dsfmt import DSFMT
+from .generator import RandomGenerator
+from .mt19937 import MT19937
+from .pcg32 import PCG32
+from .pcg64 import PCG64
+from .philox import Philox
+from .threefry import ThreeFry
+from .threefry32 import ThreeFry32
+from .xoroshiro128 import Xoroshiro128
+from .xorshift1024 import Xorshift1024
+from .xoshiro256starstar import Xoshiro256StarStar
+from .xoshiro512starstar import Xoshiro512StarStar
+from .mtrand import RandomState
+__all__ += ['RandomGenerator', 'DSFMT', 'MT19937', 'PCG64', 'PCG32', 'Philox',
+ 'ThreeFry', 'ThreeFry32', 'Xoroshiro128', 'Xorshift1024',
+ 'Xoshiro256StarStar', 'Xoshiro512StarStar', 'RandomState']
# Some aliases:
ranf = random = sample = random_sample
diff --git a/numpy/random/mtrand/Python.pxi b/numpy/random/_mtrand/Python.pxi
index 08aadbaa1..08aadbaa1 100644
--- a/numpy/random/mtrand/Python.pxi
+++ b/numpy/random/_mtrand/Python.pxi
diff --git a/numpy/random/mtrand/distributions.c b/numpy/random/_mtrand/distributions.c
index 1b410db57..1b410db57 100644
--- a/numpy/random/mtrand/distributions.c
+++ b/numpy/random/_mtrand/distributions.c
diff --git a/numpy/random/mtrand/distributions.h b/numpy/random/_mtrand/distributions.h
index 0b42bc794..0b42bc794 100644
--- a/numpy/random/mtrand/distributions.h
+++ b/numpy/random/_mtrand/distributions.h
diff --git a/numpy/random/_mtrand/generate_mtrand_c.py b/numpy/random/_mtrand/generate_mtrand_c.py
new file mode 100644
index 000000000..ec935e6dd
--- /dev/null
+++ b/numpy/random/_mtrand/generate_mtrand_c.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+from __future__ import division, absolute_import, print_function
+
+import sys
+import re
+import os
+
+unused_internal_funcs = ['__Pyx_PrintItem',
+ '__Pyx_PrintNewline',
+ '__Pyx_ReRaise',
+ #'__Pyx_GetExcValue',
+ '__Pyx_ArgTypeTest',
+ '__Pyx_SetVtable',
+ '__Pyx_GetVtable',
+ '__Pyx_CreateClass']
+
+if __name__ == '__main__':
+ # Use cython here so that long docstrings are broken up.
+ # This is needed for some VC++ compilers.
+ os.system('cython mtrand.pyx')
+ mtrand_c = open('mtrand.c', 'r')
+ processed = open('mtrand_pp.c', 'w')
+ unused_funcs_str = '(' + '|'.join(unused_internal_funcs) + ')'
+ uifpat = re.compile(r'static \w+ \*?'+unused_funcs_str+r'.*/\*proto\*/')
+ linepat = re.compile(r'/\* ".*/mtrand.pyx":')
+ for linenum, line in enumerate(mtrand_c):
+ m = re.match(r'^(\s+arrayObject\w*\s*=\s*[(])[(]PyObject\s*[*][)]',
+ line)
+ if m:
+ line = '%s(PyArrayObject *)%s' % (m.group(1), line[m.end():])
+ m = uifpat.match(line)
+ if m:
+ line = ''
+ m = re.search(unused_funcs_str, line)
+ if m:
+ print("%s was declared unused, but is used at line %d" % (m.group(),
+ linenum+1), file=sys.stderr)
+ line = linepat.sub(r'/* "mtrand.pyx":', line)
+ processed.write(line)
+ mtrand_c.close()
+ processed.close()
+ os.rename('mtrand_pp.c', 'mtrand.c')
diff --git a/numpy/random/mtrand/initarray.c b/numpy/random/_mtrand/initarray.c
index beff78510..beff78510 100644
--- a/numpy/random/mtrand/initarray.c
+++ b/numpy/random/_mtrand/initarray.c
diff --git a/numpy/random/mtrand/initarray.h b/numpy/random/_mtrand/initarray.h
index f5e5e5332..f5e5e5332 100644
--- a/numpy/random/mtrand/initarray.h
+++ b/numpy/random/_mtrand/initarray.h
diff --git a/numpy/random/mtrand/mtrand.pyx b/numpy/random/_mtrand/mtrand.pyx
index 329d5cd68..329d5cd68 100644
--- a/numpy/random/mtrand/mtrand.pyx
+++ b/numpy/random/_mtrand/mtrand.pyx
diff --git a/numpy/random/mtrand/mtrand_py_helper.h b/numpy/random/_mtrand/mtrand_py_helper.h
index 266847cbe..266847cbe 100644
--- a/numpy/random/mtrand/mtrand_py_helper.h
+++ b/numpy/random/_mtrand/mtrand_py_helper.h
diff --git a/numpy/random/mtrand/numpy.pxd b/numpy/random/_mtrand/numpy.pxd
index e146054b1..e146054b1 100644
--- a/numpy/random/mtrand/numpy.pxd
+++ b/numpy/random/_mtrand/numpy.pxd
diff --git a/numpy/random/mtrand/randint_helpers.pxi.in b/numpy/random/_mtrand/randint_helpers.pxi.in
index 894a25167..894a25167 100644
--- a/numpy/random/mtrand/randint_helpers.pxi.in
+++ b/numpy/random/_mtrand/randint_helpers.pxi.in
diff --git a/numpy/random/mtrand/randomkit.c b/numpy/random/_mtrand/randomkit.c
index 6371ebe33..6371ebe33 100644
--- a/numpy/random/mtrand/randomkit.c
+++ b/numpy/random/_mtrand/randomkit.c
diff --git a/numpy/random/mtrand/randomkit.h b/numpy/random/_mtrand/randomkit.h
index a24dabebf..a24dabebf 100644
--- a/numpy/random/mtrand/randomkit.h
+++ b/numpy/random/_mtrand/randomkit.h
diff --git a/numpy/random/randomgen/_pickle.py b/numpy/random/_pickle.py
index 1c365b0c7..1c365b0c7 100644
--- a/numpy/random/randomgen/_pickle.py
+++ b/numpy/random/_pickle.py
diff --git a/numpy/random/randomgen/bounded_integers.pxd.in b/numpy/random/bounded_integers.pxd.in
index 4ab389fd9..4ab389fd9 100644
--- a/numpy/random/randomgen/bounded_integers.pxd.in
+++ b/numpy/random/bounded_integers.pxd.in
diff --git a/numpy/random/randomgen/bounded_integers.pyx.in b/numpy/random/bounded_integers.pyx.in
index 03068a8fd..03068a8fd 100644
--- a/numpy/random/randomgen/bounded_integers.pyx.in
+++ b/numpy/random/bounded_integers.pyx.in
diff --git a/numpy/random/randomgen/common.pxd b/numpy/random/common.pxd
index f6748e5aa..f6748e5aa 100644
--- a/numpy/random/randomgen/common.pxd
+++ b/numpy/random/common.pxd
diff --git a/numpy/random/randomgen/common.pyx b/numpy/random/common.pyx
index ebd2e60d1..ebd2e60d1 100644
--- a/numpy/random/randomgen/common.pyx
+++ b/numpy/random/common.pyx
diff --git a/numpy/random/randomgen/distributions.pxd b/numpy/random/distributions.pxd
index ddb7a84bf..ddb7a84bf 100644
--- a/numpy/random/randomgen/distributions.pxd
+++ b/numpy/random/distributions.pxd
diff --git a/numpy/random/randomgen/dsfmt.pyx b/numpy/random/dsfmt.pyx
index 9a7199e85..9a7199e85 100644
--- a/numpy/random/randomgen/dsfmt.pyx
+++ b/numpy/random/dsfmt.pyx
diff --git a/numpy/random/randomgen/entropy.pyx b/numpy/random/entropy.pyx
index 0e429e9f2..0e429e9f2 100644
--- a/numpy/random/randomgen/entropy.pyx
+++ b/numpy/random/entropy.pyx
diff --git a/numpy/random/randomgen/examples/cython/extending.pyx b/numpy/random/examples/cython/extending.pyx
index b472312b4..b472312b4 100644
--- a/numpy/random/randomgen/examples/cython/extending.pyx
+++ b/numpy/random/examples/cython/extending.pyx
diff --git a/numpy/random/randomgen/examples/cython/extending_distributions.pyx b/numpy/random/examples/cython/extending_distributions.pyx
index 26d749b10..26d749b10 100644
--- a/numpy/random/randomgen/examples/cython/extending_distributions.pyx
+++ b/numpy/random/examples/cython/extending_distributions.pyx
diff --git a/numpy/random/randomgen/examples/cython/setup.py b/numpy/random/examples/cython/setup.py
index d7a04f75a..d7a04f75a 100644
--- a/numpy/random/randomgen/examples/cython/setup.py
+++ b/numpy/random/examples/cython/setup.py
diff --git a/numpy/random/randomgen/examples/numba/extending.py b/numpy/random/examples/numba/extending.py
index 72e903b1f..72e903b1f 100644
--- a/numpy/random/randomgen/examples/numba/extending.py
+++ b/numpy/random/examples/numba/extending.py
diff --git a/numpy/random/randomgen/examples/numba/extending_distributions.py b/numpy/random/examples/numba/extending_distributions.py
index 17ba2704c..17ba2704c 100644
--- a/numpy/random/randomgen/examples/numba/extending_distributions.py
+++ b/numpy/random/examples/numba/extending_distributions.py
diff --git a/numpy/random/randomgen/generator.pyx b/numpy/random/generator.pyx
index a244bca57..e68edb98a 100644
--- a/numpy/random/randomgen/generator.pyx
+++ b/numpy/random/generator.pyx
@@ -49,7 +49,7 @@ cdef class RandomGenerator:
Notes
-----
- The Python stdlib module "random" contains pseudo-random number generator
+ The Python stdlib module `random` contains pseudo-random number generator
with a number of methods that are similar to the ones available in
``RandomGenerator``. It uses Mersenne Twister, and this basic RNG can be
accessed using ``MT19937``. ``RandomGenerator``, besides being
@@ -72,7 +72,7 @@ cdef class RandomGenerator:
>>> rg = MT19937().generator
>>> rg.standard_normal()
"""
- cdef public object _basicrng
+ cdef public object brng
cdef brng_t *_brng
cdef binomial_t *_binomial
cdef object lock
@@ -81,7 +81,7 @@ cdef class RandomGenerator:
def __init__(self, brng=None):
if brng is None:
brng = Xoroshiro128()
- self._basicrng = brng
+ self.brng = brng
capsule = brng.capsule
cdef const char *name = "BasicRNG"
@@ -99,79 +99,21 @@ cdef class RandomGenerator:
def __str__(self):
_str = self.__class__.__name__
- _str += '(' + self._basicrng.__class__.__name__ + ')'
+ _str += '(' + self.brng.__class__.__name__ + ')'
return _str
# Pickling support:
def __getstate__(self):
- return self.state
+ return self.brng.state
def __setstate__(self, state):
- self.state = state
+ self.brng.state = state
def __reduce__(self):
from ._pickle import __generator_ctor
return (__generator_ctor,
- (self.state['brng'],),
- self.state)
-
- def seed(self, *args, **kwargs):
- """
- Reseed the basic RNG.
-
- Parameters depend on the basic RNG used.
-
- Notes
- -----
- Arguments are directly passed to the basic RNG. This is a convenience
- function.
-
- The best method to access seed is to directly use a basic RNG instance.
- This example demonstrates this best practice.
-
- >>> from numpy.random.randomgen import RandomGenerator, PCG64
- >>> brng = PCG64(1234567891011)
- >>> rg = brng.generator
- >>> brng.seed(1110987654321)
-
- The method used to create the generator is not important.
-
- >>> brng = PCG64(1234567891011)
- >>> rg = RandomGenerator(brng)
- >>> brng.seed(1110987654321)
-
- These best practice examples are equivalent to
-
- >>> rg = RandomGenerator(PCG64(1234567891011))
- >>> rg.seed(1110987654321)
-
- """
- # TODO: Should this remain
- self._basicrng.seed(*args, **kwargs)
- return self
-
- @property
- def state(self):
- """
- Get or set the Basic RNG's state
-
- Returns
- -------
- state : dict
- Dictionary containing the information required to describe the
- state of the Basic RNG
-
- Notes
- -----
- This is a trivial pass-through function. RandomGenerator does not
- directly contain or manipulate the basic RNG's state.
-
- """
- return self._basicrng.state
-
- @state.setter
- def state(self, value):
- self._basicrng.state = value
+ (self.brng.state['brng'],),
+ self.brng.state)
def random_sample(self, size=None, dtype=np.float64, out=None):
"""
diff --git a/numpy/random/randomgen/legacy/__init__.py b/numpy/random/legacy/__init__.py
index 9ce1f665d..9ce1f665d 100644
--- a/numpy/random/randomgen/legacy/__init__.py
+++ b/numpy/random/legacy/__init__.py
diff --git a/numpy/random/randomgen/legacy/legacy_distributions.pxd b/numpy/random/legacy/legacy_distributions.pxd
index bc00994db..bc00994db 100644
--- a/numpy/random/randomgen/legacy/legacy_distributions.pxd
+++ b/numpy/random/legacy/legacy_distributions.pxd
diff --git a/numpy/random/randomgen/mt19937.pyx b/numpy/random/mt19937.pyx
index 306ce23e2..306ce23e2 100644
--- a/numpy/random/randomgen/mt19937.pyx
+++ b/numpy/random/mt19937.pyx
diff --git a/numpy/random/randomgen/mtrand.pyx b/numpy/random/mtrand.pyx
index b5d6ff9bc..b5d6ff9bc 100644
--- a/numpy/random/randomgen/mtrand.pyx
+++ b/numpy/random/mtrand.pyx
diff --git a/numpy/random/randomgen/pcg32.pyx b/numpy/random/pcg32.pyx
index 5f2b34807..5f2b34807 100644
--- a/numpy/random/randomgen/pcg32.pyx
+++ b/numpy/random/pcg32.pyx
diff --git a/numpy/random/randomgen/pcg64.pyx b/numpy/random/pcg64.pyx
index f67d9623c..f67d9623c 100644
--- a/numpy/random/randomgen/pcg64.pyx
+++ b/numpy/random/pcg64.pyx
diff --git a/numpy/random/randomgen/philox.pyx b/numpy/random/philox.pyx
index 70afd55ab..70afd55ab 100644
--- a/numpy/random/randomgen/philox.pyx
+++ b/numpy/random/philox.pyx
diff --git a/numpy/random/randomgen/__init__.py b/numpy/random/randomgen/__init__.py
deleted file mode 100644
index 1af2fc3b2..000000000
--- a/numpy/random/randomgen/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from .dsfmt import DSFMT
-from .generator import RandomGenerator
-from .mt19937 import MT19937
-from .pcg32 import PCG32
-from .pcg64 import PCG64
-from .philox import Philox
-from .threefry import ThreeFry
-from .threefry32 import ThreeFry32
-from .xoroshiro128 import Xoroshiro128
-from .xorshift1024 import Xorshift1024
-from .xoshiro256starstar import Xoshiro256StarStar
-from .xoshiro512starstar import Xoshiro512StarStar
-from .mtrand import RandomState
-__all__ = ['RandomGenerator', 'DSFMT', 'MT19937', 'PCG64', 'PCG32', 'Philox',
- 'ThreeFry', 'ThreeFry32', 'Xoroshiro128', 'Xorshift1024',
- 'Xoshiro256StarStar', 'Xoshiro512StarStar', 'RandomState']
-
-#from ._version import get_versions
-
-#__version__ = get_versions()['version']
-#del get_versions
diff --git a/numpy/random/randomgen/_version.py b/numpy/random/randomgen/_version.py
deleted file mode 100644
index e400e3efb..000000000
--- a/numpy/random/randomgen/_version.py
+++ /dev/null
@@ -1,520 +0,0 @@
-
-# This file helps to compute a version number in source trees obtained from
-# git-archive tarball (such as those provided by githubs download-from-tag
-# feature). Distribution tarballs (built by setup.py sdist) and build
-# directories (produced by setup.py build) will contain a much shorter file
-# that just contains the computed version number.
-
-# This file is released into the public domain. Generated by
-# versioneer-0.18 (https://github.com/warner/python-versioneer)
-
-"""Git implementation of _version.py."""
-
-import errno
-import os
-import re
-import subprocess
-import sys
-
-
-def get_keywords():
- """Get the keywords needed to look up the version information."""
- # these strings will be replaced by git during git-archive.
- # setup.py/versioneer.py will grep for the variable names, so they must
- # each be defined on a line of their own. _version.py will just call
- # get_keywords().
- git_refnames = "$Format:%d$"
- git_full = "$Format:%H$"
- git_date = "$Format:%ci$"
- keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
- return keywords
-
-
-class VersioneerConfig:
- """Container for Versioneer configuration parameters."""
-
-
-def get_config():
- """Create, populate and return the VersioneerConfig() object."""
- # these strings are filled in when 'setup.py versioneer' creates
- # _version.py
- cfg = VersioneerConfig()
- cfg.VCS = "git"
- cfg.style = "pep440"
- cfg.tag_prefix = ""
- cfg.parentdir_prefix = "randomgen-"
- cfg.versionfile_source = "randomgen/_version.py"
- cfg.verbose = False
- return cfg
-
-
-class NotThisMethod(Exception):
- """Exception raised if a method is not valid for the current scenario."""
-
-
-LONG_VERSION_PY = {}
-HANDLERS = {}
-
-
-def register_vcs_handler(vcs, method): # decorator
- """Decorator to mark a method as the handler for a particular VCS."""
- def decorate(f):
- """Store f in HANDLERS[vcs][method]."""
- if vcs not in HANDLERS:
- HANDLERS[vcs] = {}
- HANDLERS[vcs][method] = f
- return f
- return decorate
-
-
-def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False,
- env=None):
- """Call the given command(s)."""
- assert isinstance(commands, list)
- p = None
- for c in commands:
- try:
- dispcmd = str([c] + args)
- # remember shell=False, so use git.cmd on windows, not just git
- p = subprocess.Popen([c] + args, cwd=cwd, env=env,
- stdout=subprocess.PIPE,
- stderr=(subprocess.PIPE if hide_stderr
- else None))
- break
- except EnvironmentError:
- e = sys.exc_info()[1]
- if e.errno == errno.ENOENT:
- continue
- if verbose:
- print("unable to run %s" % dispcmd)
- print(e)
- return None, None
- else:
- if verbose:
- print("unable to find command, tried %s" % (commands,))
- return None, None
- stdout = p.communicate()[0].strip()
- if sys.version_info[0] >= 3:
- stdout = stdout.decode()
- if p.returncode != 0:
- if verbose:
- print("unable to run %s (error)" % dispcmd)
- print("stdout was %s" % stdout)
- return None, p.returncode
- return stdout, p.returncode
-
-
-def versions_from_parentdir(parentdir_prefix, root, verbose):
- """Try to determine the version from the parent directory name.
-
- Source tarballs conventionally unpack into a directory that includes both
- the project name and a version string. We will also support searching up
- two directory levels for an appropriately named parent directory
- """
- rootdirs = []
-
- for i in range(3):
- dirname = os.path.basename(root)
- if dirname.startswith(parentdir_prefix):
- return {"version": dirname[len(parentdir_prefix):],
- "full-revisionid": None,
- "dirty": False, "error": None, "date": None}
- else:
- rootdirs.append(root)
- root = os.path.dirname(root) # up a level
-
- if verbose:
- print("Tried directories %s but none started with prefix %s" %
- (str(rootdirs), parentdir_prefix))
- raise NotThisMethod("rootdir doesn't start with parentdir_prefix")
-
-
-@register_vcs_handler("git", "get_keywords")
-def git_get_keywords(versionfile_abs):
- """Extract version information from the given file."""
- # the code embedded in _version.py can just fetch the value of these
- # keywords. When used from setup.py, we don't want to import _version.py,
- # so we do it with a regexp instead. This function is not used from
- # _version.py.
- keywords = {}
- try:
- f = open(versionfile_abs, "r")
- for line in f.readlines():
- if line.strip().startswith("git_refnames ="):
- mo = re.search(r'=\s*"(.*)"', line)
- if mo:
- keywords["refnames"] = mo.group(1)
- if line.strip().startswith("git_full ="):
- mo = re.search(r'=\s*"(.*)"', line)
- if mo:
- keywords["full"] = mo.group(1)
- if line.strip().startswith("git_date ="):
- mo = re.search(r'=\s*"(.*)"', line)
- if mo:
- keywords["date"] = mo.group(1)
- f.close()
- except EnvironmentError:
- pass
- return keywords
-
-
-@register_vcs_handler("git", "keywords")
-def git_versions_from_keywords(keywords, tag_prefix, verbose):
- """Get version information from git keywords."""
- if not keywords:
- raise NotThisMethod("no keywords at all, weird")
- date = keywords.get("date")
- if date is not None:
- # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
- # datestamp. However we prefer "%ci" (which expands to an "ISO-8601
- # -like" string, which we must then edit to make compliant), because
- # it's been around since git-1.5.3, and it's too difficult to
- # discover which version we're using, or to work around using an
- # older one.
- date = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
- refnames = keywords["refnames"].strip()
- if refnames.startswith("$Format"):
- if verbose:
- print("keywords are unexpanded, not using")
- raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
- refs = set([r.strip() for r in refnames.strip("()").split(",")])
- # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
- # just "foo-1.0". If we see a "tag: " prefix, prefer those.
- TAG = "tag: "
- tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
- if not tags:
- # Either we're using git < 1.8.3, or there really are no tags. We use
- # a heuristic: assume all version tags have a digit. The old git %d
- # expansion behaves like git log --decorate=short and strips out the
- # refs/heads/ and refs/tags/ prefixes that would let us distinguish
- # between branches and tags. By ignoring refnames without digits, we
- # filter out many common branch names like "release" and
- # "stabilization", as well as "HEAD" and "master".
- tags = set([r for r in refs if re.search(r'\d', r)])
- if verbose:
- print("discarding '%s', no digits" % ",".join(refs - tags))
- if verbose:
- print("likely tags: %s" % ",".join(sorted(tags)))
- for ref in sorted(tags):
- # sorting will prefer e.g. "2.0" over "2.0rc1"
- if ref.startswith(tag_prefix):
- r = ref[len(tag_prefix):]
- if verbose:
- print("picking %s" % r)
- return {"version": r,
- "full-revisionid": keywords["full"].strip(),
- "dirty": False, "error": None,
- "date": date}
- # no suitable tags, so version is "0+unknown", but full hex is still there
- if verbose:
- print("no suitable tags, using unknown + full revision id")
- return {"version": "0+unknown",
- "full-revisionid": keywords["full"].strip(),
- "dirty": False, "error": "no suitable tags", "date": None}
-
-
-@register_vcs_handler("git", "pieces_from_vcs")
-def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
- """Get version from 'git describe' in the root of the source tree.
-
- This only gets called if the git-archive 'subst' keywords were *not*
- expanded, and _version.py hasn't already been rewritten with a short
- version string, meaning we're inside a checked out source tree.
- """
- GITS = ["git"]
- if sys.platform == "win32":
- GITS = ["git.cmd", "git.exe"]
-
- out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root,
- hide_stderr=True)
- if rc != 0:
- if verbose:
- print("Directory %s not under git control" % root)
- raise NotThisMethod("'git rev-parse --git-dir' returned error")
-
- # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
- # if there isn't one, this yields HEX[-dirty] (no NUM)
- describe_out, rc = run_command(GITS, ["describe", "--tags", "--dirty",
- "--always", "--long",
- "--match", "%s*" % tag_prefix],
- cwd=root)
- # --long was added in git-1.5.5
- if describe_out is None:
- raise NotThisMethod("'git describe' failed")
- describe_out = describe_out.strip()
- full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
- if full_out is None:
- raise NotThisMethod("'git rev-parse' failed")
- full_out = full_out.strip()
-
- pieces = {}
- pieces["long"] = full_out
- pieces["short"] = full_out[:7] # maybe improved later
- pieces["error"] = None
-
- # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
- # TAG might have hyphens.
- git_describe = describe_out
-
- # look for -dirty suffix
- dirty = git_describe.endswith("-dirty")
- pieces["dirty"] = dirty
- if dirty:
- git_describe = git_describe[:git_describe.rindex("-dirty")]
-
- # now we have TAG-NUM-gHEX or HEX
-
- if "-" in git_describe:
- # TAG-NUM-gHEX
- mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
- if not mo:
- # unparseable. Maybe git-describe is misbehaving?
- pieces["error"] = ("unable to parse git-describe output: '%s'"
- % describe_out)
- return pieces
-
- # tag
- full_tag = mo.group(1)
- if not full_tag.startswith(tag_prefix):
- if verbose:
- fmt = "tag '%s' doesn't start with prefix '%s'"
- print(fmt % (full_tag, tag_prefix))
- pieces["error"] = ("tag '%s' doesn't start with prefix '%s'"
- % (full_tag, tag_prefix))
- return pieces
- pieces["closest-tag"] = full_tag[len(tag_prefix):]
-
- # distance: number of commits since tag
- pieces["distance"] = int(mo.group(2))
-
- # commit: short hex revision ID
- pieces["short"] = mo.group(3)
-
- else:
- # HEX: no tags
- pieces["closest-tag"] = None
- count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"],
- cwd=root)
- pieces["distance"] = int(count_out) # total number of commits
-
- # commit date: see ISO-8601 comment in git_versions_from_keywords()
- date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"],
- cwd=root)[0].strip()
- pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
-
- return pieces
-
-
-def plus_or_dot(pieces):
- """Return a + if we don't already have one, else return a ."""
- if "+" in pieces.get("closest-tag", ""):
- return "."
- return "+"
-
-
-def render_pep440(pieces):
- """Build up version string, with post-release "local version identifier".
-
- Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you
- get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty
-
- Exceptions:
- 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += plus_or_dot(pieces)
- rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
- if pieces["dirty"]:
- rendered += ".dirty"
- else:
- # exception #1
- rendered = "0+untagged.%d.g%s" % (pieces["distance"],
- pieces["short"])
- if pieces["dirty"]:
- rendered += ".dirty"
- return rendered
-
-
-def render_pep440_pre(pieces):
- """TAG[.post.devDISTANCE] -- No -dirty.
-
- Exceptions:
- 1: no tags. 0.post.devDISTANCE
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"]:
- rendered += ".post.dev%d" % pieces["distance"]
- else:
- # exception #1
- rendered = "0.post.dev%d" % pieces["distance"]
- return rendered
-
-
-def render_pep440_post(pieces):
- """TAG[.postDISTANCE[.dev0]+gHEX] .
-
- The ".dev0" means dirty. Note that .dev0 sorts backwards
- (a dirty tree will appear "older" than the corresponding clean one),
- but you shouldn't be releasing software with -dirty anyways.
-
- Exceptions:
- 1: no tags. 0.postDISTANCE[.dev0]
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += ".post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- rendered += plus_or_dot(pieces)
- rendered += "g%s" % pieces["short"]
- else:
- # exception #1
- rendered = "0.post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- rendered += "+g%s" % pieces["short"]
- return rendered
-
-
-def render_pep440_old(pieces):
- """TAG[.postDISTANCE[.dev0]] .
-
- The ".dev0" means dirty.
-
- Eexceptions:
- 1: no tags. 0.postDISTANCE[.dev0]
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += ".post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- else:
- # exception #1
- rendered = "0.post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- return rendered
-
-
-def render_git_describe(pieces):
- """TAG[-DISTANCE-gHEX][-dirty].
-
- Like 'git describe --tags --dirty --always'.
-
- Exceptions:
- 1: no tags. HEX[-dirty] (note: no 'g' prefix)
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"]:
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
- else:
- # exception #1
- rendered = pieces["short"]
- if pieces["dirty"]:
- rendered += "-dirty"
- return rendered
-
-
-def render_git_describe_long(pieces):
- """TAG-DISTANCE-gHEX[-dirty].
-
- Like 'git describe --tags --dirty --always -long'.
- The distance/hash is unconditional.
-
- Exceptions:
- 1: no tags. HEX[-dirty] (note: no 'g' prefix)
- """
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
- else:
- # exception #1
- rendered = pieces["short"]
- if pieces["dirty"]:
- rendered += "-dirty"
- return rendered
-
-
-def render(pieces, style):
- """Render the given version pieces into the requested style."""
- if pieces["error"]:
- return {"version": "unknown",
- "full-revisionid": pieces.get("long"),
- "dirty": None,
- "error": pieces["error"],
- "date": None}
-
- if not style or style == "default":
- style = "pep440" # the default
-
- if style == "pep440":
- rendered = render_pep440(pieces)
- elif style == "pep440-pre":
- rendered = render_pep440_pre(pieces)
- elif style == "pep440-post":
- rendered = render_pep440_post(pieces)
- elif style == "pep440-old":
- rendered = render_pep440_old(pieces)
- elif style == "git-describe":
- rendered = render_git_describe(pieces)
- elif style == "git-describe-long":
- rendered = render_git_describe_long(pieces)
- else:
- raise ValueError("unknown style '%s'" % style)
-
- return {"version": rendered, "full-revisionid": pieces["long"],
- "dirty": pieces["dirty"], "error": None,
- "date": pieces.get("date")}
-
-
-def get_versions():
- """Get version information or return default if unable to do so."""
- # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
- # __file__, we can work backwards from there to the root. Some
- # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
- # case we can only use expanded keywords.
-
- cfg = get_config()
- verbose = cfg.verbose
-
- try:
- return git_versions_from_keywords(get_keywords(), cfg.tag_prefix,
- verbose)
- except NotThisMethod:
- pass
-
- try:
- root = os.path.realpath(__file__)
- # versionfile_source is the relative path from the top of the source
- # tree (where the .git directory might live) to this file. Invert
- # this to find the root from __file__.
- for i in cfg.versionfile_source.split('/'):
- root = os.path.dirname(root)
- except NameError:
- return {"version": "0+unknown", "full-revisionid": None,
- "dirty": None,
- "error": "unable to find root of source tree",
- "date": None}
-
- try:
- pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)
- return render(pieces, cfg.style)
- except NotThisMethod:
- pass
-
- try:
- if cfg.parentdir_prefix:
- return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)
- except NotThisMethod:
- pass
-
- return {"version": "0+unknown", "full-revisionid": None,
- "dirty": None,
- "error": "unable to compute version", "date": None}
diff --git a/numpy/random/randomgen/setup.py b/numpy/random/randomgen/setup.py
deleted file mode 100644
index 5b7be4559..000000000
--- a/numpy/random/randomgen/setup.py
+++ /dev/null
@@ -1,191 +0,0 @@
-from os.path import join
-import sys
-import os
-import platform
-import struct
-from distutils.dep_util import newer
-from distutils.msvccompiler import get_build_version as get_msvc_build_version
-
-def needs_mingw_ftime_workaround():
- # We need the mingw workaround for _ftime if the msvc runtime version is
- # 7.1 or above and we build with mingw ...
- # ... but we can't easily detect compiler version outside distutils command
- # context, so we will need to detect in randomkit whether we build with gcc
- msver = get_msvc_build_version()
- if msver and msver >= 8:
- return True
-
- return False
-
-
-def configuration(parent_package='',top_path=None):
- from numpy.distutils.misc_util import Configuration, get_mathlibs
- config = Configuration('randomgen', parent_package, top_path)
-
- def generate_libraries(ext, build_dir):
- config_cmd = config.get_config_cmd()
- libs = get_mathlibs()
- if sys.platform == 'win32':
- libs.append('Advapi32')
- ext.libraries.extend(libs)
- return None
-
- # enable unix large file support on 32 bit systems
- # (64 bit off_t, lseek -> lseek64 etc.)
- if sys.platform[:3] == "aix":
- defs = [('_LARGE_FILES', None)]
- else:
- defs = [('_FILE_OFFSET_BITS', '64'),
- ('_LARGEFILE_SOURCE', '1'),
- ('_LARGEFILE64_SOURCE', '1')]
- if needs_mingw_ftime_workaround():
- defs.append(("NPY_NEEDS_MINGW_TIME_WORKAROUND", None))
-
- libs = []
- defs.append(('NPY_NO_DEPRECATED_API', 0))
- config.add_data_dir('tests')
-
- ##############################
- # randomgen
- ##############################
-
- # Make a guess as to whether SSE2 is present for now, TODO: Improve
- USE_SSE2 = False
- for k in platform.uname():
- for val in ('x86', 'i686', 'i386', 'amd64'):
- USE_SSE2 = USE_SSE2 or val in k.lower()
- print('Building with SSE?: {0}'.format(USE_SSE2))
- if '--no-sse2' in sys.argv:
- USE_SSE2 = False
- sys.argv.remove('--no-sse2')
-
- DEBUG = False
- PCG_EMULATED_MATH = False
- EXTRA_LINK_ARGS = []
- EXTRA_LIBRARIES = ['m'] if os.name != 'nt' else []
- EXTRA_COMPILE_ARGS = [] if os.name == 'nt' else [
- '-std=c99', '-U__GNUC_GNU_INLINE__']
- if os.name == 'nt':
- EXTRA_LINK_ARGS = ['/LTCG', '/OPT:REF', 'Advapi32.lib', 'Kernel32.lib']
- if DEBUG:
- EXTRA_LINK_ARGS += ['-debug']
- EXTRA_COMPILE_ARGS += ["-Zi", "/Od"]
- if sys.version_info < (3, 0):
- EXTRA_INCLUDE_DIRS += [join(MOD_DIR, 'src', 'common')]
-
- PCG64_DEFS = []
- # TODO: remove the unconditional forced emulation, move code from pcg64.pyx
- # to an #ifdef
- if 1 or sys.maxsize < 2 ** 32 or os.name == 'nt':
- # Force emulated mode here
- PCG_EMULATED_MATH = True
- PCG64_DEFS += [('PCG_FORCE_EMULATED_128BIT_MATH', '1')]
-
- if struct.calcsize('P') < 8:
- PCG_EMULATED_MATH = True
- defs.append(('PCG_EMULATED_MATH', int(PCG_EMULATED_MATH)))
-
- DSFMT_DEFS = [('DSFMT_MEXP', '19937')]
- if USE_SSE2:
- if os.name == 'nt':
- EXTRA_COMPILE_ARGS += ['/wd4146', '/GL']
- if struct.calcsize('P') < 8:
- EXTRA_COMPILE_ARGS += ['/arch:SSE2']
- else:
- EXTRA_COMPILE_ARGS += ['-msse2']
- DSFMT_DEFS += [('HAVE_SSE2', '1')]
-
- config.add_extension('entropy',
- sources=['entropy.c', 'src/entropy/entropy.c'],
- include_dirs=[join('randomgen', 'src', 'entropy')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=[join('src', 'splitmix64', 'splitmix.h'),
- join('src', 'entropy', 'entropy.h'),
- 'entropy.pyx',
- ],
- define_macros=defs,
- )
- config.add_extension('dsfmt',
- sources=['dsfmt.c', 'src/dsfmt/dSFMT.c',
- 'src/dsfmt/dSFMT-jump.c',
- 'src/aligned_malloc/aligned_malloc.c'],
- include_dirs=[join('src', 'dsfmt')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=[join('src', 'dsfmt', 'dsfmt.h'),
- 'dsfmt.pyx',
- ],
- define_macros=defs + DSFMT_DEFS,
- )
- for gen in ['mt19937']:
- # gen.pyx, src/gen/gen.c, src/gen/gen-jump.c
- config.add_extension(gen,
- sources=['{0}.c'.format(gen), 'src/{0}/{0}.c'.format(gen),
- 'src/{0}/{0}-jump.c'.format(gen)],
- include_dirs=[join('src', gen)],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=['%s.pyx' % gen],
- define_macros=defs,
- )
- for gen in ['philox', 'threefry', 'threefry32',
- 'xoroshiro128', 'xorshift1024', 'xoshiro256starstar',
- 'xoshiro512starstar',
- 'pcg64', 'pcg32',
- ]:
- # gen.pyx, src/gen/gen.c
- if gen == 'pcg64':
- _defs = defs + PCG64_DEFS
- else:
- _defs = defs
- config.add_extension(gen,
- sources=['{0}.c'.format(gen), 'src/{0}/{0}.c'.format(gen)],
- include_dirs=[join('src', gen)],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=['%s.pyx' % gen],
- define_macros=_defs,
- )
- for gen in ['common']:
- # gen.pyx
- config.add_extension(gen,
- sources=['{0}.c'.format(gen)],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=['%s.pyx' % gen],
- define_macros=defs,
- )
- for gen in ['generator', 'bounded_integers']:
- # gen.pyx, src/distributions/distributions.c
- config.add_extension(gen,
- sources=['{0}.c'.format(gen),
- join('src', 'distributions',
- 'distributions.c')],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=['%s.pyx' % gen],
- define_macros=defs,
- )
- config.add_extension('mtrand',
- sources=['mtrand.c',
- 'src/legacy/distributions-boxmuller.c',
- 'src/distributions/distributions.c' ],
- include_dirs=['.', 'legacy'],
- libraries=EXTRA_LIBRARIES,
- extra_compile_args=EXTRA_COMPILE_ARGS,
- extra_link_args=EXTRA_LINK_ARGS,
- depends=['mtrand.pyx'],
- define_macros=defs + DSFMT_DEFS,
- )
- config.add_subpackage('legacy')
- return config
-if __name__ == '__main__':
- from numpy.distutils.core import setup
- setup(configuration=configuration)
diff --git a/numpy/random/randomgen/tests/data/__init__.py b/numpy/random/randomgen/tests/data/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/numpy/random/randomgen/tests/data/__init__.py
+++ /dev/null
diff --git a/numpy/random/setup.py b/numpy/random/setup.py
index 481c4e380..088764791 100644
--- a/numpy/random/setup.py
+++ b/numpy/random/setup.py
@@ -46,21 +46,160 @@ def configuration(parent_package='',top_path=None):
libs = []
defs.append(('NPY_NO_DEPRECATED_API', 0))
# Configure mtrand
- config.add_extension('mtrand',
- sources=[join('mtrand', x) for x in
+ config.add_extension('_mtrand',
+ sources=[join('_mtrand', x) for x in
['mtrand.c', 'randomkit.c', 'initarray.c',
'distributions.c']]+[generate_libraries],
libraries=libs,
- depends=[join('mtrand', '*.h'),
- join('mtrand', '*.pyx'),
- join('mtrand', '*.pxi'),],
+ depends=[join('_mtrand', '*.h'),
+ join('_mtrand', '*.pyx'),
+ join('_mtrand', '*.pxi'),],
define_macros=defs,
)
- config.add_data_files(('.', join('mtrand', 'randomkit.h')))
+ config.add_data_files(('.', join('_mtrand', 'randomkit.h')))
config.add_data_dir('tests')
- config.add_subpackage('randomgen')
+ ##############################
+ # randomgen
+ ##############################
+
+ # Make a guess as to whether SSE2 is present for now, TODO: Improve
+ USE_SSE2 = False
+ for k in platform.uname():
+ for val in ('x86', 'i686', 'i386', 'amd64'):
+ USE_SSE2 = USE_SSE2 or val in k.lower()
+ print('Building with SSE?: {0}'.format(USE_SSE2))
+ if '--no-sse2' in sys.argv:
+ USE_SSE2 = False
+ sys.argv.remove('--no-sse2')
+
+ DEBUG = False
+ PCG_EMULATED_MATH = False
+ EXTRA_LINK_ARGS = []
+ EXTRA_LIBRARIES = ['m'] if os.name != 'nt' else []
+ EXTRA_COMPILE_ARGS = [] if os.name == 'nt' else [
+ '-std=c99', '-U__GNUC_GNU_INLINE__']
+ if os.name == 'nt':
+ EXTRA_LINK_ARGS = ['/LTCG', '/OPT:REF', 'Advapi32.lib', 'Kernel32.lib']
+ if DEBUG:
+ EXTRA_LINK_ARGS += ['-debug']
+ EXTRA_COMPILE_ARGS += ["-Zi", "/Od"]
+ if sys.version_info < (3, 0):
+ EXTRA_INCLUDE_DIRS += [join(MOD_DIR, 'src', 'common')]
+
+ PCG64_DEFS = []
+ # TODO: remove the unconditional forced emulation, move code from pcg64.pyx
+ # to an #ifdef
+ if 1 or sys.maxsize < 2 ** 32 or os.name == 'nt':
+ # Force emulated mode here
+ PCG_EMULATED_MATH = True
+ PCG64_DEFS += [('PCG_FORCE_EMULATED_128BIT_MATH', '1')]
+
+ if struct.calcsize('P') < 8:
+ PCG_EMULATED_MATH = True
+ defs.append(('PCG_EMULATED_MATH', int(PCG_EMULATED_MATH)))
+
+ DSFMT_DEFS = [('DSFMT_MEXP', '19937')]
+ if USE_SSE2:
+ if os.name == 'nt':
+ EXTRA_COMPILE_ARGS += ['/wd4146', '/GL']
+ if struct.calcsize('P') < 8:
+ EXTRA_COMPILE_ARGS += ['/arch:SSE2']
+ else:
+ EXTRA_COMPILE_ARGS += ['-msse2']
+ DSFMT_DEFS += [('HAVE_SSE2', '1')]
+
+ config.add_extension('entropy',
+ sources=['entropy.c', 'src/entropy/entropy.c'],
+ include_dirs=[join('randomgen', 'src', 'entropy')],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=[join('src', 'splitmix64', 'splitmix.h'),
+ join('src', 'entropy', 'entropy.h'),
+ 'entropy.pyx',
+ ],
+ define_macros=defs,
+ )
+ config.add_extension('dsfmt',
+ sources=['dsfmt.c', 'src/dsfmt/dSFMT.c',
+ 'src/dsfmt/dSFMT-jump.c',
+ 'src/aligned_malloc/aligned_malloc.c'],
+ include_dirs=[join('src', 'dsfmt')],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=[join('src', 'dsfmt', 'dsfmt.h'),
+ 'dsfmt.pyx',
+ ],
+ define_macros=defs + DSFMT_DEFS,
+ )
+ for gen in ['mt19937']:
+ # gen.pyx, src/gen/gen.c, src/gen/gen-jump.c
+ config.add_extension(gen,
+ sources=['{0}.c'.format(gen), 'src/{0}/{0}.c'.format(gen),
+ 'src/{0}/{0}-jump.c'.format(gen)],
+ include_dirs=[join('src', gen)],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=['%s.pyx' % gen],
+ define_macros=defs,
+ )
+ for gen in ['philox', 'threefry', 'threefry32',
+ 'xoroshiro128', 'xorshift1024', 'xoshiro256starstar',
+ 'xoshiro512starstar',
+ 'pcg64', 'pcg32',
+ ]:
+ # gen.pyx, src/gen/gen.c
+ if gen == 'pcg64':
+ _defs = defs + PCG64_DEFS
+ else:
+ _defs = defs
+ config.add_extension(gen,
+ sources=['{0}.c'.format(gen), 'src/{0}/{0}.c'.format(gen)],
+ include_dirs=[join('src', gen)],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=['%s.pyx' % gen],
+ define_macros=_defs,
+ )
+ for gen in ['common']:
+ # gen.pyx
+ config.add_extension(gen,
+ sources=['{0}.c'.format(gen)],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=['%s.pyx' % gen],
+ define_macros=defs,
+ )
+ for gen in ['generator', 'bounded_integers']:
+ # gen.pyx, src/distributions/distributions.c
+ config.add_extension(gen,
+ sources=['{0}.c'.format(gen),
+ join('src', 'distributions',
+ 'distributions.c')],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=['%s.pyx' % gen],
+ define_macros=defs,
+ )
+ config.add_extension('mtrand',
+ sources=['mtrand.c',
+ 'src/legacy/distributions-boxmuller.c',
+ 'src/distributions/distributions.c' ],
+ include_dirs=['.', 'legacy'],
+ libraries=EXTRA_LIBRARIES,
+ extra_compile_args=EXTRA_COMPILE_ARGS,
+ extra_link_args=EXTRA_LINK_ARGS,
+ depends=['mtrand.pyx'],
+ define_macros=defs + DSFMT_DEFS,
+ )
+ config.add_subpackage('legacy')
return config
if __name__ == '__main__':
diff --git a/numpy/random/randomgen/src/aligned_malloc/aligned_malloc.c b/numpy/random/src/aligned_malloc/aligned_malloc.c
index 6e8192cfb..6e8192cfb 100644
--- a/numpy/random/randomgen/src/aligned_malloc/aligned_malloc.c
+++ b/numpy/random/src/aligned_malloc/aligned_malloc.c
diff --git a/numpy/random/randomgen/src/aligned_malloc/aligned_malloc.h b/numpy/random/src/aligned_malloc/aligned_malloc.h
index ea24f6d23..ea24f6d23 100644
--- a/numpy/random/randomgen/src/aligned_malloc/aligned_malloc.h
+++ b/numpy/random/src/aligned_malloc/aligned_malloc.h
diff --git a/numpy/random/randomgen/src/common/LICENSE.md b/numpy/random/src/common/LICENSE.md
index 71bf8cf46..71bf8cf46 100644
--- a/numpy/random/randomgen/src/common/LICENSE.md
+++ b/numpy/random/src/common/LICENSE.md
diff --git a/numpy/random/randomgen/src/common/inttypes.h b/numpy/random/src/common/inttypes.h
index 8f8b61108..8f8b61108 100644
--- a/numpy/random/randomgen/src/common/inttypes.h
+++ b/numpy/random/src/common/inttypes.h
diff --git a/numpy/random/randomgen/src/common/stdint.h b/numpy/random/src/common/stdint.h
index 710de1570..710de1570 100644
--- a/numpy/random/randomgen/src/common/stdint.h
+++ b/numpy/random/src/common/stdint.h
diff --git a/numpy/random/randomgen/src/distributions/LICENSE.md b/numpy/random/src/distributions/LICENSE.md
index 31576ba4b..31576ba4b 100644
--- a/numpy/random/randomgen/src/distributions/LICENSE.md
+++ b/numpy/random/src/distributions/LICENSE.md
diff --git a/numpy/random/randomgen/src/distributions/binomial.h b/numpy/random/src/distributions/binomial.h
index e69de29bb..e69de29bb 100644
--- a/numpy/random/randomgen/src/distributions/binomial.h
+++ b/numpy/random/src/distributions/binomial.h
diff --git a/numpy/random/randomgen/src/distributions/distributions.c b/numpy/random/src/distributions/distributions.c
index 83806de38..83806de38 100644
--- a/numpy/random/randomgen/src/distributions/distributions.c
+++ b/numpy/random/src/distributions/distributions.c
diff --git a/numpy/random/randomgen/src/distributions/distributions.h b/numpy/random/src/distributions/distributions.h
index 7ca31a16c..7ca31a16c 100644
--- a/numpy/random/randomgen/src/distributions/distributions.h
+++ b/numpy/random/src/distributions/distributions.h
diff --git a/numpy/random/randomgen/src/distributions/ziggurat.h b/numpy/random/src/distributions/ziggurat.h
index 7808c0e68..7808c0e68 100644
--- a/numpy/random/randomgen/src/distributions/ziggurat.h
+++ b/numpy/random/src/distributions/ziggurat.h
diff --git a/numpy/random/randomgen/src/distributions/ziggurat_constants.h b/numpy/random/src/distributions/ziggurat_constants.h
index 17eccec0f..17eccec0f 100644
--- a/numpy/random/randomgen/src/distributions/ziggurat_constants.h
+++ b/numpy/random/src/distributions/ziggurat_constants.h
diff --git a/numpy/random/randomgen/src/dsfmt/128-bit-jump.poly.txt b/numpy/random/src/dsfmt/128-bit-jump.poly.txt
index fea1318fb..fea1318fb 100644
--- a/numpy/random/randomgen/src/dsfmt/128-bit-jump.poly.txt
+++ b/numpy/random/src/dsfmt/128-bit-jump.poly.txt
diff --git a/numpy/random/randomgen/src/dsfmt/96-bit-jump.poly.txt b/numpy/random/src/dsfmt/96-bit-jump.poly.txt
index 15c68d155..15c68d155 100644
--- a/numpy/random/randomgen/src/dsfmt/96-bit-jump.poly.txt
+++ b/numpy/random/src/dsfmt/96-bit-jump.poly.txt
diff --git a/numpy/random/randomgen/src/dsfmt/LICENSE.md b/numpy/random/src/dsfmt/LICENSE.md
index d59568f6b..d59568f6b 100644
--- a/numpy/random/randomgen/src/dsfmt/LICENSE.md
+++ b/numpy/random/src/dsfmt/LICENSE.md
diff --git a/numpy/random/randomgen/src/dsfmt/calc-jump.cpp b/numpy/random/src/dsfmt/calc-jump.cpp
index 495b2797c..495b2797c 100644
--- a/numpy/random/randomgen/src/dsfmt/calc-jump.cpp
+++ b/numpy/random/src/dsfmt/calc-jump.cpp
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-benchmark.c b/numpy/random/src/dsfmt/dSFMT-benchmark.c
index af29d0e1f..af29d0e1f 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-benchmark.c
+++ b/numpy/random/src/dsfmt/dSFMT-benchmark.c
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-calc-jump.hpp b/numpy/random/src/dsfmt/dSFMT-calc-jump.hpp
index b960826be..b960826be 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-calc-jump.hpp
+++ b/numpy/random/src/dsfmt/dSFMT-calc-jump.hpp
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-common.h b/numpy/random/src/dsfmt/dSFMT-common.h
index 30c26c08b..30c26c08b 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-common.h
+++ b/numpy/random/src/dsfmt/dSFMT-common.h
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-jump.c b/numpy/random/src/dsfmt/dSFMT-jump.c
index 1832bb885..1832bb885 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-jump.c
+++ b/numpy/random/src/dsfmt/dSFMT-jump.c
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-jump.h b/numpy/random/src/dsfmt/dSFMT-jump.h
index 689f9499a..689f9499a 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-jump.h
+++ b/numpy/random/src/dsfmt/dSFMT-jump.h
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-params.h b/numpy/random/src/dsfmt/dSFMT-params.h
index aa0247800..aa0247800 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-params.h
+++ b/numpy/random/src/dsfmt/dSFMT-params.h
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-params19937.h b/numpy/random/src/dsfmt/dSFMT-params19937.h
index a600b0dbc..a600b0dbc 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-params19937.h
+++ b/numpy/random/src/dsfmt/dSFMT-params19937.h
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-poly.h b/numpy/random/src/dsfmt/dSFMT-poly.h
index f8e15c3eb..f8e15c3eb 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-poly.h
+++ b/numpy/random/src/dsfmt/dSFMT-poly.h
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT-test-gen.c b/numpy/random/src/dsfmt/dSFMT-test-gen.c
index 697a3010a..697a3010a 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT-test-gen.c
+++ b/numpy/random/src/dsfmt/dSFMT-test-gen.c
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT.c b/numpy/random/src/dsfmt/dSFMT.c
index 0f122c26c..0f122c26c 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT.c
+++ b/numpy/random/src/dsfmt/dSFMT.c
diff --git a/numpy/random/randomgen/src/dsfmt/dSFMT.h b/numpy/random/src/dsfmt/dSFMT.h
index 224d0108f..224d0108f 100644
--- a/numpy/random/randomgen/src/dsfmt/dSFMT.h
+++ b/numpy/random/src/dsfmt/dSFMT.h
diff --git a/numpy/random/randomgen/src/entropy/LICENSE.md b/numpy/random/src/entropy/LICENSE.md
index b7276aad7..b7276aad7 100644
--- a/numpy/random/randomgen/src/entropy/LICENSE.md
+++ b/numpy/random/src/entropy/LICENSE.md
diff --git a/numpy/random/randomgen/src/entropy/entropy.c b/numpy/random/src/entropy/entropy.c
index ead4bef83..ead4bef83 100644
--- a/numpy/random/randomgen/src/entropy/entropy.c
+++ b/numpy/random/src/entropy/entropy.c
diff --git a/numpy/random/randomgen/src/entropy/entropy.h b/numpy/random/src/entropy/entropy.h
index 785603dd3..785603dd3 100644
--- a/numpy/random/randomgen/src/entropy/entropy.h
+++ b/numpy/random/src/entropy/entropy.h
diff --git a/numpy/random/randomgen/src/legacy/LICENSE.md b/numpy/random/src/legacy/LICENSE.md
index 88b1791b2..88b1791b2 100644
--- a/numpy/random/randomgen/src/legacy/LICENSE.md
+++ b/numpy/random/src/legacy/LICENSE.md
diff --git a/numpy/random/randomgen/src/legacy/distributions-boxmuller.c b/numpy/random/src/legacy/distributions-boxmuller.c
index 5d3ba27f8..5d3ba27f8 100644
--- a/numpy/random/randomgen/src/legacy/distributions-boxmuller.c
+++ b/numpy/random/src/legacy/distributions-boxmuller.c
diff --git a/numpy/random/randomgen/src/legacy/distributions-boxmuller.h b/numpy/random/src/legacy/distributions-boxmuller.h
index 445686e6c..445686e6c 100644
--- a/numpy/random/randomgen/src/legacy/distributions-boxmuller.h
+++ b/numpy/random/src/legacy/distributions-boxmuller.h
diff --git a/numpy/random/randomgen/src/mt19937/LICENSE.md b/numpy/random/src/mt19937/LICENSE.md
index f65c3d46e..f65c3d46e 100644
--- a/numpy/random/randomgen/src/mt19937/LICENSE.md
+++ b/numpy/random/src/mt19937/LICENSE.md
diff --git a/numpy/random/randomgen/src/mt19937/mt19937-benchmark.c b/numpy/random/src/mt19937/mt19937-benchmark.c
index 039f8030a..039f8030a 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937-benchmark.c
+++ b/numpy/random/src/mt19937/mt19937-benchmark.c
diff --git a/numpy/random/randomgen/src/mt19937/mt19937-jump.c b/numpy/random/src/mt19937/mt19937-jump.c
index 46b28cf96..46b28cf96 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937-jump.c
+++ b/numpy/random/src/mt19937/mt19937-jump.c
diff --git a/numpy/random/randomgen/src/mt19937/mt19937-jump.h b/numpy/random/src/mt19937/mt19937-jump.h
index 394c150a0..394c150a0 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937-jump.h
+++ b/numpy/random/src/mt19937/mt19937-jump.h
diff --git a/numpy/random/randomgen/src/mt19937/mt19937-poly.h b/numpy/random/src/mt19937/mt19937-poly.h
index b03747881..b03747881 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937-poly.h
+++ b/numpy/random/src/mt19937/mt19937-poly.h
diff --git a/numpy/random/randomgen/src/mt19937/mt19937-test-data-gen.c b/numpy/random/src/mt19937/mt19937-test-data-gen.c
index 4f4ec1d64..4f4ec1d64 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937-test-data-gen.c
+++ b/numpy/random/src/mt19937/mt19937-test-data-gen.c
diff --git a/numpy/random/randomgen/src/mt19937/mt19937.c b/numpy/random/src/mt19937/mt19937.c
index e5ca9e0cf..e5ca9e0cf 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937.c
+++ b/numpy/random/src/mt19937/mt19937.c
diff --git a/numpy/random/randomgen/src/mt19937/mt19937.h b/numpy/random/src/mt19937/mt19937.h
index 8105329ec..8105329ec 100644
--- a/numpy/random/randomgen/src/mt19937/mt19937.h
+++ b/numpy/random/src/mt19937/mt19937.h
diff --git a/numpy/random/randomgen/src/mt19937/randomkit.c b/numpy/random/src/mt19937/randomkit.c
index f8ed4b49e..f8ed4b49e 100644
--- a/numpy/random/randomgen/src/mt19937/randomkit.c
+++ b/numpy/random/src/mt19937/randomkit.c
diff --git a/numpy/random/randomgen/src/mt19937/randomkit.h b/numpy/random/src/mt19937/randomkit.h
index abb082cb2..abb082cb2 100644
--- a/numpy/random/randomgen/src/mt19937/randomkit.h
+++ b/numpy/random/src/mt19937/randomkit.h
diff --git a/numpy/random/randomgen/src/pcg32/LICENSE.md b/numpy/random/src/pcg32/LICENSE.md
index 3db2ac2e8..3db2ac2e8 100644
--- a/numpy/random/randomgen/src/pcg32/LICENSE.md
+++ b/numpy/random/src/pcg32/LICENSE.md
diff --git a/numpy/random/randomgen/src/pcg32/pcg-advance-64.c b/numpy/random/src/pcg32/pcg-advance-64.c
index 8210e7565..8210e7565 100644
--- a/numpy/random/randomgen/src/pcg32/pcg-advance-64.c
+++ b/numpy/random/src/pcg32/pcg-advance-64.c
diff --git a/numpy/random/randomgen/src/pcg32/pcg32-test-data-gen.c b/numpy/random/src/pcg32/pcg32-test-data-gen.c
index cccaf84b9..cccaf84b9 100644
--- a/numpy/random/randomgen/src/pcg32/pcg32-test-data-gen.c
+++ b/numpy/random/src/pcg32/pcg32-test-data-gen.c
diff --git a/numpy/random/randomgen/src/pcg32/pcg32.c b/numpy/random/src/pcg32/pcg32.c
index 5fbf6759f..5fbf6759f 100644
--- a/numpy/random/randomgen/src/pcg32/pcg32.c
+++ b/numpy/random/src/pcg32/pcg32.c
diff --git a/numpy/random/randomgen/src/pcg32/pcg32.h b/numpy/random/src/pcg32/pcg32.h
index 557113d8f..557113d8f 100644
--- a/numpy/random/randomgen/src/pcg32/pcg32.h
+++ b/numpy/random/src/pcg32/pcg32.h
diff --git a/numpy/random/randomgen/src/pcg32/pcg_variants.h b/numpy/random/src/pcg32/pcg_variants.h
index 32daac1ce..32daac1ce 100644
--- a/numpy/random/randomgen/src/pcg32/pcg_variants.h
+++ b/numpy/random/src/pcg32/pcg_variants.h
diff --git a/numpy/random/randomgen/src/pcg64/LICENSE.md b/numpy/random/src/pcg64/LICENSE.md
index dd6a17ee8..dd6a17ee8 100644
--- a/numpy/random/randomgen/src/pcg64/LICENSE.md
+++ b/numpy/random/src/pcg64/LICENSE.md
diff --git a/numpy/random/randomgen/src/pcg64/pcg64-benchmark.c b/numpy/random/src/pcg64/pcg64-benchmark.c
index 76f3ec78c..76f3ec78c 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64-benchmark.c
+++ b/numpy/random/src/pcg64/pcg64-benchmark.c
diff --git a/numpy/random/randomgen/src/pcg64/pcg64-test-data-gen.c b/numpy/random/src/pcg64/pcg64-test-data-gen.c
index 0c2b079a3..0c2b079a3 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64-test-data-gen.c
+++ b/numpy/random/src/pcg64/pcg64-test-data-gen.c
diff --git a/numpy/random/randomgen/src/pcg64/pcg64.c b/numpy/random/src/pcg64/pcg64.c
index c7c1eb045..c7c1eb045 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64.c
+++ b/numpy/random/src/pcg64/pcg64.c
diff --git a/numpy/random/randomgen/src/pcg64/pcg64.h b/numpy/random/src/pcg64/pcg64.h
index 156c73a36..156c73a36 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64.h
+++ b/numpy/random/src/pcg64/pcg64.h
diff --git a/numpy/random/randomgen/src/pcg64/pcg64.orig.c b/numpy/random/src/pcg64/pcg64.orig.c
index 07e97e4b6..07e97e4b6 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64.orig.c
+++ b/numpy/random/src/pcg64/pcg64.orig.c
diff --git a/numpy/random/randomgen/src/pcg64/pcg64.orig.h b/numpy/random/src/pcg64/pcg64.orig.h
index 74be91f31..74be91f31 100644
--- a/numpy/random/randomgen/src/pcg64/pcg64.orig.h
+++ b/numpy/random/src/pcg64/pcg64.orig.h
diff --git a/numpy/random/randomgen/src/philox/LICENSE.md b/numpy/random/src/philox/LICENSE.md
index 4a9f6bb29..4a9f6bb29 100644
--- a/numpy/random/randomgen/src/philox/LICENSE.md
+++ b/numpy/random/src/philox/LICENSE.md
diff --git a/numpy/random/randomgen/src/philox/philox-benchmark.c b/numpy/random/src/philox/philox-benchmark.c
index 0cab04cf5..0cab04cf5 100644
--- a/numpy/random/randomgen/src/philox/philox-benchmark.c
+++ b/numpy/random/src/philox/philox-benchmark.c
diff --git a/numpy/random/randomgen/src/philox/philox-test-data-gen.c b/numpy/random/src/philox/philox-test-data-gen.c
index 442e18b55..442e18b55 100644
--- a/numpy/random/randomgen/src/philox/philox-test-data-gen.c
+++ b/numpy/random/src/philox/philox-test-data-gen.c
diff --git a/numpy/random/randomgen/src/philox/philox.c b/numpy/random/src/philox/philox.c
index 3382c60d6..3382c60d6 100644
--- a/numpy/random/randomgen/src/philox/philox.c
+++ b/numpy/random/src/philox/philox.c
diff --git a/numpy/random/randomgen/src/philox/philox.h b/numpy/random/src/philox/philox.h
index 411404b55..411404b55 100644
--- a/numpy/random/randomgen/src/philox/philox.h
+++ b/numpy/random/src/philox/philox.h
diff --git a/numpy/random/randomgen/src/splitmix64/LICENSE.md b/numpy/random/src/splitmix64/LICENSE.md
index 3c4d73b92..3c4d73b92 100644
--- a/numpy/random/randomgen/src/splitmix64/LICENSE.md
+++ b/numpy/random/src/splitmix64/LICENSE.md
diff --git a/numpy/random/randomgen/src/splitmix64/splitmix64.c b/numpy/random/src/splitmix64/splitmix64.c
index 79a845982..79a845982 100644
--- a/numpy/random/randomgen/src/splitmix64/splitmix64.c
+++ b/numpy/random/src/splitmix64/splitmix64.c
diff --git a/numpy/random/randomgen/src/splitmix64/splitmix64.h b/numpy/random/src/splitmix64/splitmix64.h
index 880132970..880132970 100644
--- a/numpy/random/randomgen/src/splitmix64/splitmix64.h
+++ b/numpy/random/src/splitmix64/splitmix64.h
diff --git a/numpy/random/randomgen/src/splitmix64/splitmix64.orig.c b/numpy/random/src/splitmix64/splitmix64.orig.c
index df6133aab..df6133aab 100644
--- a/numpy/random/randomgen/src/splitmix64/splitmix64.orig.c
+++ b/numpy/random/src/splitmix64/splitmix64.orig.c
diff --git a/numpy/random/randomgen/src/threefry/LICENSE.md b/numpy/random/src/threefry/LICENSE.md
index 4a9f6bb29..4a9f6bb29 100644
--- a/numpy/random/randomgen/src/threefry/LICENSE.md
+++ b/numpy/random/src/threefry/LICENSE.md
diff --git a/numpy/random/randomgen/src/threefry/threefry-benchmark.c b/numpy/random/src/threefry/threefry-benchmark.c
index 6d6239cd3..6d6239cd3 100644
--- a/numpy/random/randomgen/src/threefry/threefry-benchmark.c
+++ b/numpy/random/src/threefry/threefry-benchmark.c
diff --git a/numpy/random/randomgen/src/threefry/threefry-orig.c b/numpy/random/src/threefry/threefry-orig.c
index d27cfd797..d27cfd797 100644
--- a/numpy/random/randomgen/src/threefry/threefry-orig.c
+++ b/numpy/random/src/threefry/threefry-orig.c
diff --git a/numpy/random/randomgen/src/threefry/threefry-test-data-gen.c b/numpy/random/src/threefry/threefry-test-data-gen.c
index 328eb2575..328eb2575 100644
--- a/numpy/random/randomgen/src/threefry/threefry-test-data-gen.c
+++ b/numpy/random/src/threefry/threefry-test-data-gen.c
diff --git a/numpy/random/randomgen/src/threefry/threefry.c b/numpy/random/src/threefry/threefry.c
index 19c37df1b..19c37df1b 100644
--- a/numpy/random/randomgen/src/threefry/threefry.c
+++ b/numpy/random/src/threefry/threefry.c
diff --git a/numpy/random/randomgen/src/threefry/threefry.h b/numpy/random/src/threefry/threefry.h
index 297c1241a..297c1241a 100644
--- a/numpy/random/randomgen/src/threefry/threefry.h
+++ b/numpy/random/src/threefry/threefry.h
diff --git a/numpy/random/randomgen/src/threefry32/LICENSE.md b/numpy/random/src/threefry32/LICENSE.md
index 591cd75f4..591cd75f4 100644
--- a/numpy/random/randomgen/src/threefry32/LICENSE.md
+++ b/numpy/random/src/threefry32/LICENSE.md
diff --git a/numpy/random/randomgen/src/threefry32/threefry32-test-data-gen.c b/numpy/random/src/threefry32/threefry32-test-data-gen.c
index 0e6229995..0e6229995 100644
--- a/numpy/random/randomgen/src/threefry32/threefry32-test-data-gen.c
+++ b/numpy/random/src/threefry32/threefry32-test-data-gen.c
diff --git a/numpy/random/randomgen/src/threefry32/threefry32.c b/numpy/random/src/threefry32/threefry32.c
index 500e9482d..500e9482d 100644
--- a/numpy/random/randomgen/src/threefry32/threefry32.c
+++ b/numpy/random/src/threefry32/threefry32.c
diff --git a/numpy/random/randomgen/src/threefry32/threefry32.h b/numpy/random/src/threefry32/threefry32.h
index 74a85c42b..74a85c42b 100644
--- a/numpy/random/randomgen/src/threefry32/threefry32.h
+++ b/numpy/random/src/threefry32/threefry32.h
diff --git a/numpy/random/randomgen/src/xoroshiro128/LICENSE.md b/numpy/random/src/xoroshiro128/LICENSE.md
index 969430149..969430149 100644
--- a/numpy/random/randomgen/src/xoroshiro128/LICENSE.md
+++ b/numpy/random/src/xoroshiro128/LICENSE.md
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128-benchmark.c b/numpy/random/src/xoroshiro128/xoroshiro128-benchmark.c
index 9a7b52bfb..9a7b52bfb 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128-benchmark.c
+++ b/numpy/random/src/xoroshiro128/xoroshiro128-benchmark.c
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128-test-data-gen.c b/numpy/random/src/xoroshiro128/xoroshiro128-test-data-gen.c
index d50e63f5e..d50e63f5e 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128-test-data-gen.c
+++ b/numpy/random/src/xoroshiro128/xoroshiro128-test-data-gen.c
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128.c b/numpy/random/src/xoroshiro128/xoroshiro128.c
index 060eb8a51..060eb8a51 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128.c
+++ b/numpy/random/src/xoroshiro128/xoroshiro128.c
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128.h b/numpy/random/src/xoroshiro128/xoroshiro128.h
index 0db82b173..0db82b173 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128.h
+++ b/numpy/random/src/xoroshiro128/xoroshiro128.h
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.c b/numpy/random/src/xoroshiro128/xoroshiro128plus.orig.c
index 1b5f46e4b..1b5f46e4b 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.c
+++ b/numpy/random/src/xoroshiro128/xoroshiro128plus.orig.c
diff --git a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.h b/numpy/random/src/xoroshiro128/xoroshiro128plus.orig.h
index 20c96fe04..20c96fe04 100644
--- a/numpy/random/randomgen/src/xoroshiro128/xoroshiro128plus.orig.h
+++ b/numpy/random/src/xoroshiro128/xoroshiro128plus.orig.h
diff --git a/numpy/random/randomgen/src/xorshift1024/LICENSE.md b/numpy/random/src/xorshift1024/LICENSE.md
index 3ca8ed4b9..3ca8ed4b9 100644
--- a/numpy/random/randomgen/src/xorshift1024/LICENSE.md
+++ b/numpy/random/src/xorshift1024/LICENSE.md
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024-benchmark.c b/numpy/random/src/xorshift1024/xorshift1024-benchmark.c
index 0eef33537..0eef33537 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024-benchmark.c
+++ b/numpy/random/src/xorshift1024/xorshift1024-benchmark.c
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024-test-data-gen.c b/numpy/random/src/xorshift1024/xorshift1024-test-data-gen.c
index a2ae08df4..a2ae08df4 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024-test-data-gen.c
+++ b/numpy/random/src/xorshift1024/xorshift1024-test-data-gen.c
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024.c b/numpy/random/src/xorshift1024/xorshift1024.c
index 8737b5a82..8737b5a82 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024.c
+++ b/numpy/random/src/xorshift1024/xorshift1024.c
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024.h b/numpy/random/src/xorshift1024/xorshift1024.h
index e0ef77826..e0ef77826 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024.h
+++ b/numpy/random/src/xorshift1024/xorshift1024.h
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.c b/numpy/random/src/xorshift1024/xorshift1024.orig.c
index 03c1c17fe..03c1c17fe 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.c
+++ b/numpy/random/src/xorshift1024/xorshift1024.orig.c
diff --git a/numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.h b/numpy/random/src/xorshift1024/xorshift1024.orig.h
index 9b7597967..9b7597967 100644
--- a/numpy/random/randomgen/src/xorshift1024/xorshift1024.orig.h
+++ b/numpy/random/src/xorshift1024/xorshift1024.orig.h
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/LICENSE.md b/numpy/random/src/xoshiro256starstar/LICENSE.md
index d863f3b29..d863f3b29 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/LICENSE.md
+++ b/numpy/random/src/xoshiro256starstar/LICENSE.md
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c b/numpy/random/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c
index 8522229dd..8522229dd 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c
+++ b/numpy/random/src/xoshiro256starstar/xoshiro256starstar-test-data-gen.c
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.c b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.c
index 30b6c7d85..30b6c7d85 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.c
+++ b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.c
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.h b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.h
index 1d7d8ea40..1d7d8ea40 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.h
+++ b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.h
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.c b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.c
index ecf87bab9..ecf87bab9 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.c
+++ b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.c
diff --git a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.h b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.h
index 3aa788ec9..3aa788ec9 100644
--- a/numpy/random/randomgen/src/xoshiro256starstar/xoshiro256starstar.orig.h
+++ b/numpy/random/src/xoshiro256starstar/xoshiro256starstar.orig.h
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/LICENSE.md b/numpy/random/src/xoshiro512starstar/LICENSE.md
index aa34c1966..aa34c1966 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/LICENSE.md
+++ b/numpy/random/src/xoshiro512starstar/LICENSE.md
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c b/numpy/random/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c
index bcc3574e4..bcc3574e4 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c
+++ b/numpy/random/src/xoshiro512starstar/xoshiro512starstar-test-data-gen.c
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.c b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.c
index a9f56699f..a9f56699f 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.c
+++ b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.c
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.h b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.h
index 0fa0ba3cd..0fa0ba3cd 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.h
+++ b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.h
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.c b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.c
index 0cf884edb..0cf884edb 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.c
+++ b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.c
diff --git a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.h b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.h
index 0b7892473..0b7892473 100644
--- a/numpy/random/randomgen/src/xoshiro512starstar/xoshiro512starstar.orig.h
+++ b/numpy/random/src/xoshiro512starstar/xoshiro512starstar.orig.h
diff --git a/numpy/random/randomgen/tests/__init__.py b/numpy/random/tests/data/__init__.py
index e69de29bb..e69de29bb 100644
--- a/numpy/random/randomgen/tests/__init__.py
+++ b/numpy/random/tests/data/__init__.py
diff --git a/numpy/random/randomgen/tests/data/dSFMT-testset-1.csv b/numpy/random/tests/data/dSFMT-testset-1.csv
index 9f3f68aee..9f3f68aee 100644
--- a/numpy/random/randomgen/tests/data/dSFMT-testset-1.csv
+++ b/numpy/random/tests/data/dSFMT-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/dSFMT-testset-2.csv b/numpy/random/tests/data/dSFMT-testset-2.csv
index 2ec2d7a51..2ec2d7a51 100644
--- a/numpy/random/randomgen/tests/data/dSFMT-testset-2.csv
+++ b/numpy/random/tests/data/dSFMT-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/mt19937-testset-1.csv b/numpy/random/tests/data/mt19937-testset-1.csv
index 3d4995840..3d4995840 100644
--- a/numpy/random/randomgen/tests/data/mt19937-testset-1.csv
+++ b/numpy/random/tests/data/mt19937-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/mt19937-testset-2.csv b/numpy/random/tests/data/mt19937-testset-2.csv
index d2f6c156c..d2f6c156c 100644
--- a/numpy/random/randomgen/tests/data/mt19937-testset-2.csv
+++ b/numpy/random/tests/data/mt19937-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/pcg32-testset-1.csv b/numpy/random/tests/data/pcg32-testset-1.csv
index 6bddc8d5c..6bddc8d5c 100644
--- a/numpy/random/randomgen/tests/data/pcg32-testset-1.csv
+++ b/numpy/random/tests/data/pcg32-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/pcg32-testset-2.csv b/numpy/random/tests/data/pcg32-testset-2.csv
index 2d4c8aed1..2d4c8aed1 100644
--- a/numpy/random/randomgen/tests/data/pcg32-testset-2.csv
+++ b/numpy/random/tests/data/pcg32-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/pcg64-testset-1.csv b/numpy/random/tests/data/pcg64-testset-1.csv
index da6d77d40..da6d77d40 100644
--- a/numpy/random/randomgen/tests/data/pcg64-testset-1.csv
+++ b/numpy/random/tests/data/pcg64-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/pcg64-testset-2.csv b/numpy/random/tests/data/pcg64-testset-2.csv
index 779761d0f..779761d0f 100644
--- a/numpy/random/randomgen/tests/data/pcg64-testset-2.csv
+++ b/numpy/random/tests/data/pcg64-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/philox-testset-1.csv b/numpy/random/tests/data/philox-testset-1.csv
index 64c1516cb..64c1516cb 100644
--- a/numpy/random/randomgen/tests/data/philox-testset-1.csv
+++ b/numpy/random/tests/data/philox-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/philox-testset-2.csv b/numpy/random/tests/data/philox-testset-2.csv
index 1c2d4eba0..1c2d4eba0 100644
--- a/numpy/random/randomgen/tests/data/philox-testset-2.csv
+++ b/numpy/random/tests/data/philox-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/threefry-testset-1.csv b/numpy/random/tests/data/threefry-testset-1.csv
index ddfa736dc..ddfa736dc 100644
--- a/numpy/random/randomgen/tests/data/threefry-testset-1.csv
+++ b/numpy/random/tests/data/threefry-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/threefry-testset-2.csv b/numpy/random/tests/data/threefry-testset-2.csv
index 275604557..275604557 100644
--- a/numpy/random/randomgen/tests/data/threefry-testset-2.csv
+++ b/numpy/random/tests/data/threefry-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/threefry32-testset-1.csv b/numpy/random/tests/data/threefry32-testset-1.csv
index 3aec7304d..3aec7304d 100644
--- a/numpy/random/randomgen/tests/data/threefry32-testset-1.csv
+++ b/numpy/random/tests/data/threefry32-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/threefry32-testset-2.csv b/numpy/random/tests/data/threefry32-testset-2.csv
index b7753638f..b7753638f 100644
--- a/numpy/random/randomgen/tests/data/threefry32-testset-2.csv
+++ b/numpy/random/tests/data/threefry32-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/xoroshiro128-testset-1.csv b/numpy/random/tests/data/xoroshiro128-testset-1.csv
index 4ef7172e1..4ef7172e1 100644
--- a/numpy/random/randomgen/tests/data/xoroshiro128-testset-1.csv
+++ b/numpy/random/tests/data/xoroshiro128-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/xoroshiro128-testset-2.csv b/numpy/random/tests/data/xoroshiro128-testset-2.csv
index 2de341ecd..2de341ecd 100644
--- a/numpy/random/randomgen/tests/data/xoroshiro128-testset-2.csv
+++ b/numpy/random/tests/data/xoroshiro128-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/xorshift1024-testset-1.csv b/numpy/random/tests/data/xorshift1024-testset-1.csv
index 661b157b1..661b157b1 100644
--- a/numpy/random/randomgen/tests/data/xorshift1024-testset-1.csv
+++ b/numpy/random/tests/data/xorshift1024-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/xorshift1024-testset-2.csv b/numpy/random/tests/data/xorshift1024-testset-2.csv
index ef10e6872..ef10e6872 100644
--- a/numpy/random/randomgen/tests/data/xorshift1024-testset-2.csv
+++ b/numpy/random/tests/data/xorshift1024-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/xoshiro256starstar-testset-1.csv b/numpy/random/tests/data/xoshiro256starstar-testset-1.csv
index 534799b04..534799b04 100644
--- a/numpy/random/randomgen/tests/data/xoshiro256starstar-testset-1.csv
+++ b/numpy/random/tests/data/xoshiro256starstar-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/xoshiro256starstar-testset-2.csv b/numpy/random/tests/data/xoshiro256starstar-testset-2.csv
index b688fcb2a..b688fcb2a 100644
--- a/numpy/random/randomgen/tests/data/xoshiro256starstar-testset-2.csv
+++ b/numpy/random/tests/data/xoshiro256starstar-testset-2.csv
diff --git a/numpy/random/randomgen/tests/data/xoshiro512starstar-testset-1.csv b/numpy/random/tests/data/xoshiro512starstar-testset-1.csv
index 78fb903ee..78fb903ee 100644
--- a/numpy/random/randomgen/tests/data/xoshiro512starstar-testset-1.csv
+++ b/numpy/random/tests/data/xoshiro512starstar-testset-1.csv
diff --git a/numpy/random/randomgen/tests/data/xoshiro512starstar-testset-2.csv b/numpy/random/tests/data/xoshiro512starstar-testset-2.csv
index 264308f1a..264308f1a 100644
--- a/numpy/random/randomgen/tests/data/xoshiro512starstar-testset-2.csv
+++ b/numpy/random/tests/data/xoshiro512starstar-testset-2.csv
diff --git a/numpy/random/randomgen/tests/test_against_numpy.py b/numpy/random/tests/test_against_numpy.py
index 431c7bd85..b930fcbff 100644
--- a/numpy/random/randomgen/tests/test_against_numpy.py
+++ b/numpy/random/tests/test_against_numpy.py
@@ -5,7 +5,7 @@ from numpy.testing import (assert_allclose, assert_array_equal, assert_equal,
import pytest
-from numpy.random.randomgen import RandomGenerator, MT19937, generator
+from numpy.random import RandomGenerator, MT19937, generator
from numpy.random import RandomState
@@ -98,12 +98,12 @@ class TestAgainstNumPy(object):
cls.rg = RandomGenerator(cls.brng(*cls.seed))
cls.rs = RandomState(cls.brng(*cls.seed))
cls.nprs = cls.np.RandomState(*cls.seed)
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls._set_common_state()
@classmethod
def _set_common_state(cls):
- state = cls.rg.state
+ state = cls.rg.brng.state
st = [[]] * 5
st[0] = 'MT19937'
st[1] = state['state']['key']
@@ -125,7 +125,7 @@ class TestAgainstNumPy(object):
def _is_state_common(self):
state = self.nprs.get_state()
- state2 = self.rg.state
+ state2 = self.rg.brng.state
assert (state[1] == state2['state']['key']).all()
assert (state[2] == state2['state']['pos'])
@@ -138,10 +138,10 @@ class TestAgainstNumPy(object):
assert_allclose(state[4], state2['gauss'], atol=1e-10)
def test_common_seed(self):
- self.rg.seed(1234)
+ self.rg.brng.seed(1234)
self.nprs.seed(1234)
self._is_state_common()
- self.rg.seed(23456)
+ self.rg.brng.seed(23456)
self.nprs.seed(23456)
self._is_state_common()
@@ -149,8 +149,8 @@ class TestAgainstNumPy(object):
nprs = np.random.RandomState()
nprs.standard_normal(99)
state = nprs.get_state()
- self.rg.state = state
- state2 = self.rg.state
+ self.rg.brng.state = state
+ state2 = self.rg.brng.state
assert (state[1] == state2['state']['key']).all()
assert (state[2] == state2['state']['pos'])
@@ -383,7 +383,7 @@ class TestAgainstNumPy(object):
assert_equal(s1.randint(1000), 419)
assert_equal(s1.randint(1000), s.randint(1000))
- self.rg.seed(4294967295)
+ self.rg.brng.seed(4294967295)
self.nprs.seed(4294967295)
self._is_state_common()
@@ -400,26 +400,6 @@ class TestAgainstNumPy(object):
s = RandomGenerator(MT19937([4294967295]))
assert_equal(s.randint(1000), 265)
- def test_dir(self):
- nprs_d = set(dir(self.nprs))
- rs_d = dir(self.rg)
- excluded = {'get_state', 'set_state'}
- nprs_d.difference_update(excluded)
- assert (len(nprs_d.difference(rs_d)) == 0)
-
- npmod = dir(numpy.random)
- mod = dir(generator)
- known_exlcuded = ['__all__', '__cached__', '__path__', 'Tester',
- 'info', 'bench', '__RandomState_ctor', 'mtrand',
- 'test', '__warningregistry__', '_numpy_tester',
- 'division', 'get_state', 'set_state', 'seed',
- 'ranf', 'random', 'sample', 'absolute_import',
- 'print_function', 'RandomState', 'randomgen',
- 'tests', 'Lock']
- mod += known_exlcuded
- diff = set(npmod).difference(mod)
- assert_equal(len(diff), 0)
-
# Tests using legacy generator
def test_chisquare(self):
self._set_common_state_legacy()
diff --git a/numpy/random/randomgen/tests/test_direct.py b/numpy/random/tests/test_direct.py
index 22fdcd865..d6042100a 100644
--- a/numpy/random/randomgen/tests/test_direct.py
+++ b/numpy/random/tests/test_direct.py
@@ -7,10 +7,10 @@ from numpy.testing import assert_equal, assert_allclose, assert_array_equal, \
assert_raises
import pytest
-from ...randomgen import RandomGenerator, MT19937, DSFMT, ThreeFry32, ThreeFry, \
+from numpy.random import RandomGenerator, MT19937, DSFMT, ThreeFry32, ThreeFry, \
PCG32, PCG64, Philox, Xoroshiro128, Xorshift1024, Xoshiro256StarStar, \
Xoshiro512StarStar, RandomState
-from ...randomgen.common import interface
+from numpy.random.common import interface
try:
import cffi # noqa: F401
@@ -206,30 +206,30 @@ class Base(object):
def test_seed_float(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(self.seed_error_type, rs.seed, np.pi)
- assert_raises(self.seed_error_type, rs.seed, -np.pi)
+ assert_raises(self.seed_error_type, rs.brng.seed, np.pi)
+ assert_raises(self.seed_error_type, rs.brng.seed, -np.pi)
def test_seed_float_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(self.seed_error_type, rs.seed, np.array([np.pi]))
- assert_raises(self.seed_error_type, rs.seed, np.array([-np.pi]))
- assert_raises(ValueError, rs.seed, np.array([np.pi, -np.pi]))
- assert_raises(TypeError, rs.seed, np.array([0, np.pi]))
- assert_raises(TypeError, rs.seed, [np.pi])
- assert_raises(TypeError, rs.seed, [0, 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]))
+ assert_raises(ValueError, rs.brng.seed, np.array([np.pi, -np.pi]))
+ assert_raises(TypeError, rs.brng.seed, np.array([0, np.pi]))
+ assert_raises(TypeError, rs.brng.seed, [np.pi])
+ assert_raises(TypeError, rs.brng.seed, [0, np.pi])
def test_seed_out_of_range(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(ValueError, rs.seed, 2 ** (2 * self.bits + 1))
- assert_raises(ValueError, rs.seed, -1)
+ assert_raises(ValueError, rs.brng.seed, 2 ** (2 * self.bits + 1))
+ assert_raises(ValueError, rs.brng.seed, -1)
def test_seed_out_of_range_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(ValueError, rs.seed, [2 ** (2 * self.bits + 1)])
- assert_raises(ValueError, rs.seed, [-1])
+ assert_raises(ValueError, rs.brng.seed, [2 ** (2 * self.bits + 1)])
+ assert_raises(ValueError, rs.brng.seed, [-1])
def test_repr(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
@@ -412,18 +412,18 @@ class TestPCG64(Base):
def test_seed_float_array(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(self.seed_error_type, rs.seed, np.array([np.pi]))
- assert_raises(self.seed_error_type, rs.seed, np.array([-np.pi]))
- assert_raises(self.seed_error_type, rs.seed, np.array([np.pi, -np.pi]))
- assert_raises(self.seed_error_type, rs.seed, np.array([0, np.pi]))
- assert_raises(self.seed_error_type, rs.seed, [np.pi])
- assert_raises(self.seed_error_type, rs.seed, [0, 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]))
+ 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])
def test_seed_out_of_range_array(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(self.seed_error_type, rs.seed,
+ assert_raises(self.seed_error_type, rs.brng.seed,
[2 ** (2 * self.bits + 1)])
- assert_raises(self.seed_error_type, rs.seed, [-1])
+ assert_raises(self.seed_error_type, rs.brng.seed, [-1])
class TestPhilox(Base):
@@ -464,43 +464,45 @@ class TestMT19937(Base):
def test_seed_out_of_range(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(ValueError, rs.seed, 2 ** (self.bits + 1))
- assert_raises(ValueError, rs.seed, -1)
- assert_raises(ValueError, rs.seed, 2 ** (2 * self.bits + 1))
+ assert_raises(ValueError, rs.brng.seed, 2 ** (self.bits + 1))
+ assert_raises(ValueError, rs.brng.seed, -1)
+ assert_raises(ValueError, rs.brng.seed, 2 ** (2 * self.bits + 1))
def test_seed_out_of_range_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(ValueError, rs.seed, [2 ** (self.bits + 1)])
- assert_raises(ValueError, rs.seed, [-1])
- assert_raises(TypeError, rs.seed, [2 ** (2 * self.bits + 1)])
+ assert_raises(ValueError, rs.brng.seed, [2 ** (self.bits + 1)])
+ assert_raises(ValueError, rs.brng.seed, [-1])
+ assert_raises(TypeError, rs.brng.seed, [2 ** (2 * self.bits + 1)])
def test_seed_float(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(TypeError, rs.seed, np.pi)
- assert_raises(TypeError, rs.seed, -np.pi)
+ assert_raises(TypeError, rs.brng.seed, np.pi)
+ assert_raises(TypeError, rs.brng.seed, -np.pi)
def test_seed_float_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(TypeError, rs.seed, np.array([np.pi]))
- assert_raises(TypeError, rs.seed, np.array([-np.pi]))
- assert_raises(TypeError, rs.seed, np.array([np.pi, -np.pi]))
- assert_raises(TypeError, rs.seed, np.array([0, np.pi]))
- assert_raises(TypeError, rs.seed, [np.pi])
- assert_raises(TypeError, rs.seed, [0, np.pi])
+ brng = rs.brng
+ assert_raises(TypeError, brng.seed, np.array([np.pi]))
+ assert_raises(TypeError, brng.seed, np.array([-np.pi]))
+ assert_raises(TypeError, brng.seed, np.array([np.pi, -np.pi]))
+ assert_raises(TypeError, brng.seed, np.array([0, np.pi]))
+ assert_raises(TypeError, brng.seed, [np.pi])
+ assert_raises(TypeError, brng.seed, [0, np.pi])
def test_state_tuple(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
- state = rs.state
+ brng = rs.brng
+ state = brng.state
desired = rs.randint(2 ** 16)
tup = (state['brng'], state['state']['key'], state['state']['pos'])
- rs.state = tup
+ brng.state = tup
actual = rs.randint(2 ** 16)
assert_equal(actual, desired)
tup = tup + (0, 0.0)
- rs.state = tup
+ brng.state = tup
actual = rs.randint(2 ** 16)
assert_equal(actual, desired)
@@ -542,25 +544,25 @@ class TestDSFMT(Base):
def test_seed_out_of_range_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(ValueError, rs.seed, [2 ** (self.bits + 1)])
- assert_raises(ValueError, rs.seed, [-1])
- assert_raises(TypeError, rs.seed, [2 ** (2 * self.bits + 1)])
+ assert_raises(ValueError, rs.brng.seed, [2 ** (self.bits + 1)])
+ assert_raises(ValueError, rs.brng.seed, [-1])
+ assert_raises(TypeError, rs.brng.seed, [2 ** (2 * self.bits + 1)])
def test_seed_float(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(TypeError, rs.seed, np.pi)
- assert_raises(TypeError, rs.seed, -np.pi)
+ assert_raises(TypeError, rs.brng.seed, np.pi)
+ assert_raises(TypeError, rs.brng.seed, -np.pi)
def test_seed_float_array(self):
# GH #82
rs = RandomGenerator(self.brng(*self.data1['seed']))
- assert_raises(TypeError, rs.seed, np.array([np.pi]))
- assert_raises(TypeError, rs.seed, np.array([-np.pi]))
- assert_raises(TypeError, rs.seed, np.array([np.pi, -np.pi]))
- assert_raises(TypeError, rs.seed, np.array([0, np.pi]))
- assert_raises(TypeError, rs.seed, [np.pi])
- assert_raises(TypeError, rs.seed, [0, np.pi])
+ assert_raises(TypeError, rs.brng.seed, np.array([np.pi]))
+ assert_raises(TypeError, rs.brng.seed, np.array([-np.pi]))
+ assert_raises(TypeError, rs.brng.seed, np.array([np.pi, -np.pi]))
+ assert_raises(TypeError, rs.brng.seed, np.array([0, np.pi]))
+ assert_raises(TypeError, rs.brng.seed, [np.pi])
+ assert_raises(TypeError, rs.brng.seed, [0, np.pi])
def test_uniform_float(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
@@ -578,9 +580,9 @@ class TestDSFMT(Base):
def test_buffer_reset(self):
rs = RandomGenerator(self.brng(*self.data1['seed']))
rs.random_sample(1)
- assert rs.state['buffer_loc'] != 382
- rs.seed(*self.data1['seed'])
- assert rs.state['buffer_loc'] == 382
+ assert rs.brng.state['buffer_loc'] != 382
+ rs.brng.seed(*self.data1['seed'])
+ assert rs.brng.state['buffer_loc'] == 382
class TestThreeFry32(Base):
diff --git a/numpy/random/randomgen/tests/test_generator_mt19937.py b/numpy/random/tests/test_generator_mt19937.py
index 10dd8733a..3eda84d84 100644
--- a/numpy/random/randomgen/tests/test_generator_mt19937.py
+++ b/numpy/random/tests/test_generator_mt19937.py
@@ -7,7 +7,7 @@ from numpy.testing import (
assert_warns, assert_no_warnings, assert_array_equal,
assert_array_almost_equal, suppress_warnings)
-from ...randomgen import RandomGenerator, MT19937
+from numpy.random import RandomGenerator, MT19937
random = RandomGenerator(MT19937())
@@ -96,21 +96,22 @@ class TestSetState(object):
def setup(self):
self.seed = 1234567890
self.rg = RandomGenerator(MT19937(self.seed))
- self.state = self.rg.state
+ self.brng = self.rg.brng
+ self.state = self.brng.state
self.legacy_state = (self.state['brng'],
self.state['state']['key'],
self.state['state']['pos'])
def test_basic(self):
old = self.rg.tomaxint(16)
- self.rg.state = self.state
+ self.brng.state = self.state
new = self.rg.tomaxint(16)
assert_(np.all(old == new))
def test_gaussian_reset(self):
# Make sure the cached every-other-Gaussian is reset.
old = self.rg.standard_normal(size=3)
- self.rg.state = self.state
+ self.brng.state = self.state
new = self.rg.standard_normal(size=3)
assert_(np.all(old == new))
@@ -119,9 +120,9 @@ class TestSetState(object):
# cached Gaussian is restored.
self.rg.standard_normal()
- state = self.rg.state
+ state = self.brng.state
old = self.rg.standard_normal(size=3)
- self.rg.state = state
+ self.brng.state = state
new = self.rg.standard_normal(size=3)
assert_(np.all(old == new))
@@ -244,7 +245,7 @@ class TestRandint(object):
def test_in_bounds_fuzz(self):
# Don't use fixed seed
- random.seed()
+ random.brng.seed()
for dt in self.itype[1:]:
for ubnd in [4, 8, 16]:
@@ -263,13 +264,13 @@ class TestRandint(object):
ubnd = 2 if dt is bool else np.iinfo(dt).max + 1
size = 1000
- random.seed(1234)
+ random.brng.seed(1234)
scalar = self.rfunc(lbnd, ubnd, size=size, dtype=dt)
- random.seed(1234)
+ random.brng.seed(1234)
scalar_array = self.rfunc([lbnd], [ubnd], size=size, dtype=dt)
- random.seed(1234)
+ random.brng.seed(1234)
array = self.rfunc([lbnd] * size, [ubnd] *
size, size=size, dtype=dt)
assert_array_equal(scalar, scalar_array)
@@ -291,7 +292,7 @@ class TestRandint(object):
'uint8': '27dd30c4e08a797063dffac2490b0be6'}
for dt in self.itype[1:]:
- random.seed(1234)
+ random.brng.seed(1234)
# view as little endian for hash
if sys.byteorder == 'little':
@@ -303,7 +304,7 @@ class TestRandint(object):
assert_(tgt[np.dtype(dt).name] == res)
# bools do not depend on endianness
- random.seed(1234)
+ random.brng.seed(1234)
val = self.rfunc(0, 2, size=1000, dtype=bool).view(np.int8)
res = hashlib.md5(val).hexdigest()
assert_(tgt[np.dtype(bool).name] == res)
@@ -316,15 +317,15 @@ class TestRandint(object):
np.bool, bool, np.bool_) else np.iinfo(dt).max + 1
# view as little endian for hash
- random.seed(1234)
+ random.brng.seed(1234)
val = self.rfunc(lbnd, ubnd, size=1000, dtype=dt)
- random.seed(1234)
+ random.brng.seed(1234)
val_bc = self.rfunc([lbnd] * 1000, ubnd, dtype=dt)
assert_array_equal(val, val_bc)
- random.seed(1234)
+ random.brng.seed(1234)
val_bc = self.rfunc([lbnd] * 1000, [ubnd] * 1000, dtype=dt)
assert_array_equal(val, val_bc)
@@ -400,7 +401,7 @@ class TestRandomDist(object):
self.seed = 1234567890
def test_rand(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.rand(3, 2)
desired = np.array([[0.61879477158567997, 0.59162362775974664],
[0.88868358904449662, 0.89165480011560816],
@@ -408,25 +409,25 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_rand_singleton(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.rand()
desired = 0.61879477158567997
assert_array_almost_equal(actual, desired, decimal=15)
def test_randn(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randn(3, 2)
desired = np.array([[-3.472754000610961, -0.108938564229143],
[-0.245965753396411, -0.704101550261701],
[0.360102487116356, 0.127832101772367]])
assert_array_almost_equal(actual, desired, decimal=15)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randn()
assert_array_almost_equal(actual, desired[0, 0], decimal=15)
def test_randint(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randint(-99, 99, size=(3, 2))
desired = np.array([[31, 3],
[-52, 41],
@@ -436,7 +437,7 @@ class TestRandomDist(object):
def test_randint_masked(self):
# Test masked rejection sampling algorithm to generate array of
# uint32 in an interval.
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randint(0, 99, size=(3, 2), dtype=np.uint32,
use_masked=True)
desired = np.array([[2, 47],
@@ -446,7 +447,7 @@ class TestRandomDist(object):
def test_randint_lemire_32(self):
# Test lemire algorithm to generate array of uint32 in an interval.
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randint(0, 99, size=(3, 2), dtype=np.uint32,
use_masked=False)
desired = np.array([[61, 33],
@@ -456,7 +457,7 @@ class TestRandomDist(object):
def test_randint_lemire_64(self):
# Test lemire algorithm to generate array of uint64 in an interval.
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.randint(0, 99 + 0xFFFFFFFFF, size=(3, 2),
dtype=np.uint64, use_masked=False)
desired = np.array([[42523252834, 40656066204],
@@ -465,7 +466,7 @@ class TestRandomDist(object):
assert_array_equal(actual, desired)
def test_random_integers(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
with suppress_warnings() as sup:
w = sup.record(DeprecationWarning)
actual = random.random_integers(-99, 99, size=(3, 2))
@@ -505,19 +506,19 @@ class TestRandomDist(object):
np.iinfo('l').max, np.iinfo('l').max)
def test_random_sample(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.random_sample((3, 2))
desired = np.array([[0.61879477158567997, 0.59162362775974664],
[0.88868358904449662, 0.89165480011560816],
[0.4575674820298663, 0.7781880808593471]])
assert_array_almost_equal(actual, desired, decimal=15)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.random_sample()
assert_array_almost_equal(actual, desired[0, 0], decimal=15)
def test_random_sample_float(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.random_sample((3, 2))
desired = np.array([[0.6187948, 0.5916236],
[0.8886836, 0.8916548],
@@ -525,7 +526,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=7)
def test_random_sample_float_scalar(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.random_sample(dtype=np.float32)
desired = 0.6187948
assert_array_almost_equal(actual, desired, decimal=7)
@@ -534,31 +535,31 @@ class TestRandomDist(object):
assert_raises(TypeError, random.random_sample, dtype='int32')
def test_choice_uniform_replace(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.choice(4, 4)
desired = np.array([2, 3, 2, 3])
assert_array_equal(actual, desired)
def test_choice_nonuniform_replace(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.choice(4, 4, p=[0.4, 0.4, 0.1, 0.1])
desired = np.array([1, 1, 2, 2])
assert_array_equal(actual, desired)
def test_choice_uniform_noreplace(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.choice(4, 3, replace=False)
desired = np.array([0, 1, 3])
assert_array_equal(actual, desired)
def test_choice_nonuniform_noreplace(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.choice(4, 3, replace=False, p=[0.1, 0.3, 0.5, 0.1])
desired = np.array([2, 3, 1])
assert_array_equal(actual, desired)
def test_choice_noninteger(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.choice(['a', 'b', 'c', 'd'], 4)
desired = np.array(['c', 'd', 'c', 'd'])
assert_array_equal(actual, desired)
@@ -634,7 +635,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.choice, a, p=p)
def test_bytes(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.bytes(10)
desired = b'\x82Ui\x9e\xff\x97+Wf\xa5'
assert_equal(actual, desired)
@@ -659,7 +660,7 @@ class TestRandomDist(object):
lambda x: np.asarray([(i, i) for i in x],
[("a", object, 1),
("b", np.int32, 1)])]:
- random.seed(self.seed)
+ random.brng.seed(self.seed)
alist = conv([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
random.shuffle(alist)
actual = alist
@@ -681,19 +682,19 @@ class TestRandomDist(object):
sorted(b.data[~b.mask]), sorted(b_orig.data[~b_orig.mask]))
def test_permutation(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
actual = random.permutation(alist)
desired = [0, 1, 9, 6, 2, 4, 5, 8, 7, 3]
assert_array_equal(actual, desired)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
arr_2d = np.atleast_2d([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]).T
actual = random.permutation(arr_2d)
assert_array_equal(actual, np.atleast_2d(desired).T)
def test_beta(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.beta(.1, .9, size=(3, 2))
desired = np.array(
[[1.45341850513746058e-02, 5.31297615662868145e-04],
@@ -702,20 +703,20 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_binomial(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.binomial(100.123, .456, size=(3, 2))
desired = np.array([[37, 43],
[42, 48],
[46, 45]])
assert_array_equal(actual, desired)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.binomial(100.123, .456)
desired = 37
assert_array_equal(actual, desired)
def test_chisquare(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.chisquare(50, size=(3, 2))
desired = np.array([[22.2534560369812, 46.9302393710074],
[52.9974164611614, 85.3559029505718],
@@ -723,7 +724,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=13)
def test_dirichlet(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
alpha = np.array([51.72840233779265162, 39.74494232180943953])
actual = random.dirichlet(alpha, size=(3, 2))
desired = np.array([[[0.444382290764855, 0.555617709235145],
@@ -736,7 +737,7 @@ class TestRandomDist(object):
bad_alpha = np.array([5.4e-01, -1.0e-16])
assert_raises(ValueError, random.dirichlet, bad_alpha)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
alpha = np.array([51.72840233779265162, 39.74494232180943953])
actual = random.dirichlet(alpha)
assert_array_almost_equal(actual, desired[0, 0], decimal=15)
@@ -759,7 +760,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.dirichlet, alpha)
def test_exponential(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.exponential(1.1234, size=(3, 2))
desired = np.array([[5.350682337747634, 1.152307441755771],
[3.867015473358779, 1.538765912839396],
@@ -771,7 +772,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.exponential, scale=-0.)
def test_f(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.f(12, 77, size=(3, 2))
desired = np.array([[0.809498839488467, 2.867222762455471],
[0.588036831639353, 1.012185639664636],
@@ -779,7 +780,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_gamma(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.gamma(5, 3, size=(3, 2))
desired = np.array([[12.46569350177219, 16.46580642087044],
[43.65744473309084, 11.98722785682592],
@@ -791,7 +792,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.gamma, shape=-0., scale=-0.)
def test_geometric(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.geometric(.123456789, size=(3, 2))
desired = np.array([[8, 7],
[17, 17],
@@ -809,7 +810,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.geometric, [np.nan] * 10)
def test_gumbel(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.gumbel(loc=.123456789, scale=2.0, size=(3, 2))
desired = np.array([[0.19591898743416816, 0.34405539668096674],
[-1.4492522252274278, -1.47374816298446865],
@@ -821,7 +822,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.gumbel, scale=-0.)
def test_hypergeometric(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.hypergeometric(10.1, 5.5, 14, size=(3, 2))
desired = np.array([[10, 10],
[10, 10],
@@ -847,7 +848,7 @@ class TestRandomDist(object):
assert_array_equal(actual, desired)
def test_laplace(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.laplace(loc=.123456789, scale=2.0, size=(3, 2))
desired = np.array([[0.66599721112760157, 0.52829452552221945],
[3.12791959514407125, 3.18202813572992005],
@@ -859,7 +860,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.laplace, scale=-0.)
def test_logistic(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.logistic(loc=.123456789, scale=2.0, size=(3, 2))
desired = np.array([[1.09232835305011444, 0.8648196662399954],
[4.27818590694950185, 4.33897006346929714],
@@ -867,7 +868,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_lognormal(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.lognormal(mean=.123456789, sigma=2.0, size=(3, 2))
desired = np.array([[1.0894838661036e-03, 9.0990021488311e-01],
[6.9178869932225e-01, 2.7672077560016e-01],
@@ -879,7 +880,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.lognormal, sigma=-0.)
def test_logseries(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.logseries(p=.923456789, size=(3, 2))
desired = np.array([[2, 2],
[6, 17],
@@ -893,7 +894,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.logseries, [np.nan] * 10)
def test_multinomial(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.multinomial(20, [1 / 6.] * 6, size=(3, 2))
desired = np.array([[[4, 3, 5, 4, 2, 2],
[5, 2, 8, 2, 2, 1]],
@@ -904,7 +905,7 @@ class TestRandomDist(object):
assert_array_equal(actual, desired)
def test_multivariate_normal(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
mean = (.123456789, 10)
cov = [[1, 0], [0, 1]]
size = (3, 2)
@@ -955,7 +956,7 @@ class TestRandomDist(object):
mu, np.eye(3))
def test_negative_binomial(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.negative_binomial(n=100, p=.12345, size=(3, 2))
desired = np.array([[521, 736],
[665, 690],
@@ -970,7 +971,7 @@ class TestRandomDist(object):
[np.nan] * 10)
def test_noncentral_chisquare(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.noncentral_chisquare(df=5, nonc=5, size=(3, 2))
desired = np.array([[9.47783251920357, 10.02066178260461],
[3.15869984192364, 10.5581565031544],
@@ -983,7 +984,7 @@ class TestRandomDist(object):
[1.41985055641800, 0.15451287602753]])
assert_array_almost_equal(actual, desired, decimal=14)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.noncentral_chisquare(df=5, nonc=0, size=(3, 2))
desired = np.array([[3.64881368071039, 5.48224544747803],
[20.41999842025404, 3.44075915187367],
@@ -991,7 +992,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=14)
def test_noncentral_f(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.noncentral_f(dfnum=5, dfden=2, nonc=1,
size=(3, 2))
desired = np.array([[1.22680230963236, 2.56457837623956],
@@ -1000,12 +1001,12 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=14)
def test_noncentral_f_nan(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.noncentral_f(dfnum=5, dfden=2, nonc=np.nan)
assert np.isnan(actual)
def test_normal(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.normal(loc=.123456789, scale=2.0, size=(3, 2))
desired = np.array([[-6.822051212221923, -0.094420339458285],
[-0.368474717792823, -1.284746311523402],
@@ -1017,7 +1018,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.normal, scale=-0.)
def test_pareto(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.pareto(a=.123456789, size=(3, 2))
desired = np.array([[5.6883528121891552e+16, 4.0569373841667057e+03],
[1.2854967019379475e+12, 6.5833156486851483e+04],
@@ -1031,7 +1032,7 @@ class TestRandomDist(object):
np.testing.assert_array_almost_equal_nulp(actual, desired, nulp=30)
def test_poisson(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.poisson(lam=.123456789, size=(3, 2))
desired = np.array([[0, 0],
[1, 0],
@@ -1051,7 +1052,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.poisson, [np.nan] * 10)
def test_power(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.power(a=.123456789, size=(3, 2))
desired = np.array([[9.328833342693975e-01, 2.742250409261003e-02],
[7.684513237993961e-01, 9.297548209160028e-02],
@@ -1059,7 +1060,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_rayleigh(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.rayleigh(scale=10, size=(3, 2))
desired = np.array([[13.8882496494248393, 13.383318339044731],
[20.95413364294492098, 21.08285015800712614],
@@ -1071,7 +1072,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.rayleigh, scale=-0.)
def test_standard_cauchy(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_cauchy(size=(3, 2))
desired = np.array([[31.87809592667601, 0.349332782046838],
[2.816995747731641, 10.552372563459114],
@@ -1079,7 +1080,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_standard_exponential(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_exponential(size=(3, 2), method='inv')
desired = np.array([[0.96441739162374596, 0.89556604882105506],
[2.1953785836319808, 2.22243285392490542],
@@ -1090,7 +1091,7 @@ class TestRandomDist(object):
assert_raises(TypeError, random.standard_exponential, dtype=np.int32)
def test_standard_gamma(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_gamma(shape=3, size=(3, 2))
desired = np.array([[2.28483515569645, 3.29899524967824],
[11.12492298902645, 2.16784417297277],
@@ -1098,13 +1099,13 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=14)
def test_standard_gammma_scalar_float(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_gamma(3, dtype=np.float32)
desired = 1.3877466
assert_array_almost_equal(actual, desired, decimal=6)
def test_standard_gamma_float(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_gamma(shape=3, size=(3, 2))
desired = np.array([[2.2848352, 3.2989952],
[11.124923, 2.1678442],
@@ -1113,14 +1114,14 @@ class TestRandomDist(object):
def test_standard_gammma_float_out(self):
actual = np.zeros((3, 2), dtype=np.float32)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
random.standard_gamma(10.0, out=actual, dtype=np.float32)
desired = np.array([[6.9824033, 7.3731737],
[14.860578, 7.5327270],
[11.767487, 6.2320185]], dtype=np.float32)
assert_array_almost_equal(actual, desired, decimal=5)
- random.seed(self.seed)
+ random.brng.seed(self.seed)
random.standard_gamma(10.0, out=actual, size=(3, 2), dtype=np.float32)
assert_array_almost_equal(actual, desired, decimal=5)
@@ -1140,7 +1141,7 @@ class TestRandomDist(object):
assert_raises(ValueError, random.standard_gamma, shape=-0.)
def test_standard_normal(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_normal(size=(3, 2))
desired = np.array([[-3.472754000610961, -0.108938564229143],
[-0.245965753396411, -0.704101550261701],
@@ -1151,7 +1152,7 @@ class TestRandomDist(object):
assert_raises(TypeError, random.standard_normal, dtype=np.int32)
def test_standard_t(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.standard_t(df=10, size=(3, 2))
desired = np.array([[-3.68722108185508, -0.672031186266171],
[2.900224996448669, -0.199656996187739],
@@ -1159,7 +1160,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_triangular(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.triangular(left=5.12, mode=10.23, right=20.34,
size=(3, 2))
desired = np.array([[12.68117178949215784, 12.4129206149193152],
@@ -1168,7 +1169,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=14)
def test_uniform(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.uniform(low=1.23, high=10.54, size=(3, 2))
desired = np.array([[6.99097932346268003, 6.73801597444323974],
[9.50364421400426274, 9.53130618907631089],
@@ -1214,7 +1215,7 @@ class TestRandomDist(object):
assert_raises(TypeError, random.hypergeometric, throwing_int, 1, 1)
def test_vonmises(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.vonmises(mu=1.23, kappa=1.54, size=(3, 2))
desired = np.array([[2.28567572673902042, 2.89163838442285037],
[0.38198375564286025, 2.57638023113890746],
@@ -1223,17 +1224,17 @@ class TestRandomDist(object):
def test_vonmises_small(self):
# check infinite loop, gh-4720
- random.seed(self.seed)
+ random.brng.seed(self.seed)
r = random.vonmises(mu=0., kappa=1.1e-8, size=10**6)
assert_(np.isfinite(r).all())
def test_vonmises_nan(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
r = random.vonmises(mu=0., kappa=np.nan)
assert_(np.isnan(r))
def test_wald(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.wald(mean=1.23, scale=1.54, size=(3, 2))
desired = np.array([[0.10653278160339, 0.98771068102461],
[0.89276055317879, 0.13640126419923],
@@ -1241,7 +1242,7 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=14)
def test_weibull(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.weibull(a=1.23, size=(3, 2))
desired = np.array([[3.557276979846361, 1.020870580998542],
[2.731847777612348, 1.29148068905082],
@@ -1249,12 +1250,12 @@ class TestRandomDist(object):
assert_array_almost_equal(actual, desired, decimal=15)
def test_weibull_0(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
assert_equal(random.weibull(a=0, size=12), np.zeros(12))
assert_raises(ValueError, random.weibull, a=-0.)
def test_zipf(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
actual = random.zipf(a=1.23, size=(3, 2))
desired = np.array([[66, 29],
[1, 1],
@@ -1269,7 +1270,7 @@ class TestBroadcast(object):
self.seed = 123456789
def set_seed(self):
- random.seed(self.seed)
+ random.brng.seed(self.seed)
def test_uniform(self):
low = [0]
diff --git a/numpy/random/randomgen/tests/test_generator_mt19937_regressions.py b/numpy/random/tests/test_generator_mt19937_regressions.py
index 75064720f..f9478ccf6 100644
--- a/numpy/random/randomgen/tests/test_generator_mt19937_regressions.py
+++ b/numpy/random/tests/test_generator_mt19937_regressions.py
@@ -3,7 +3,7 @@ from numpy.testing import (assert_, assert_array_equal)
from numpy.compat import long
import numpy as np
import pytest
-from ...randomgen import RandomGenerator, MT19937
+from numpy.random import RandomGenerator, MT19937
mt19937 = RandomGenerator(MT19937())
@@ -36,7 +36,7 @@ class TestRegression(object):
def test_logseries_convergence(self):
# Test for ticket #923
N = 1000
- mt19937.seed(0)
+ mt19937.brng.seed(0)
rvsn = mt19937.logseries(0.8, size=N)
# these two frequency counts should be close to theoretical
# numbers with this large sample
@@ -50,9 +50,9 @@ class TestRegression(object):
assert_(freq < 0.23, msg)
def test_permutation_longs(self):
- mt19937.seed(1234)
+ mt19937.brng.seed(1234)
a = mt19937.permutation(12)
- mt19937.seed(1234)
+ mt19937.brng.seed(1234)
b = mt19937.permutation(long(12))
assert_array_equal(a, b)
@@ -62,7 +62,7 @@ class TestRegression(object):
[(1, 1), (2, 2), (3, 3), None],
[1, (2, 2), (3, 3), None],
[(1, 1), 2, 3, None]]:
- mt19937.seed(12345)
+ mt19937.brng.seed(12345)
shuffled = list(t)
mt19937.shuffle(shuffled)
assert_array_equal(shuffled, [t[0], t[3], t[1], t[2]])
@@ -72,8 +72,8 @@ class TestRegression(object):
m = RandomGenerator(MT19937()) # mt19937.RandomState()
res = np.array([0, 8, 7, 2, 1, 9, 4, 7, 0, 3])
for i in range(3):
- mt19937.seed(i)
- m.seed(4321)
+ mt19937.brng.seed(i)
+ m.brng.seed(4321)
# If m.state is not honored, the result will change
assert_array_equal(m.choice(10, size=10, p=np.ones(10)/10.), res)
@@ -88,7 +88,7 @@ class TestRegression(object):
def test_beta_small_parameters(self):
# Test that beta with small a and b parameters does not produce
# NaNs due to roundoff errors causing 0 / 0, gh-5851
- mt19937.seed(1234567890)
+ mt19937.brng.seed(1234567890)
x = mt19937.beta(0.0001, 0.0001, size=100)
assert_(not np.any(np.isnan(x)), 'Nans in mt19937.beta')
@@ -96,7 +96,7 @@ class TestRegression(object):
# The sum of probs should be 1.0 with some tolerance.
# For low precision dtypes the tolerance was too tight.
# See numpy github issue 6123.
- mt19937.seed(1234)
+ mt19937.brng.seed(1234)
a = [1, 2, 3]
counts = [4, 4, 2]
for dt in np.float16, np.float32, np.float64:
@@ -110,7 +110,7 @@ class TestRegression(object):
# Test that permuting an array of different length strings
# will not cause a segfault on garbage collection
# Tests gh-7710
- mt19937.seed(1234)
+ mt19937.brng.seed(1234)
a = np.array(['a', 'a' * 1000])
@@ -125,7 +125,7 @@ class TestRegression(object):
# Test that permuting an array of objects will not cause
# a segfault on garbage collection.
# See gh-7719
- mt19937.seed(1234)
+ mt19937.brng.seed(1234)
a = np.array([np.arange(1), np.arange(4)])
for _ in range(1000):
@@ -139,7 +139,7 @@ class TestRegression(object):
class N(np.ndarray):
pass
- mt19937.seed(1)
+ mt19937.brng.seed(1)
orig = np.arange(3).view(N)
perm = mt19937.permutation(orig)
assert_array_equal(perm, np.array([0, 2, 1]))
@@ -151,7 +151,7 @@ class TestRegression(object):
def __array__(self):
return self.a
- mt19937.seed(1)
+ mt19937.brng.seed(1)
m = M()
perm = mt19937.permutation(m)
assert_array_equal(perm, np.array([2, 1, 4, 0, 3]))
diff --git a/numpy/random/randomgen/tests/test_randomstate.py b/numpy/random/tests/test_randomstate.py
index 6adde6c2a..d0ad5e794 100644
--- a/numpy/random/randomgen/tests/test_randomstate.py
+++ b/numpy/random/tests/test_randomstate.py
@@ -9,7 +9,7 @@ from numpy.testing import (
suppress_warnings
)
-from ...randomgen import MT19937, Xoshiro256StarStar, mtrand as random
+from numpy.random import MT19937, Xoshiro256StarStar, mtrand as random
def assert_mt19937_state_equal(a, b):
diff --git a/numpy/random/randomgen/tests/test_randomstate_regression.py b/numpy/random/tests/test_randomstate_regression.py
index cf21ee756..9c319319e 100644
--- a/numpy/random/randomgen/tests/test_randomstate_regression.py
+++ b/numpy/random/tests/test_randomstate_regression.py
@@ -5,7 +5,7 @@ from numpy.testing import (
from numpy.compat import long
import numpy as np
-from ...randomgen import mtrand as random
+from numpy.random import mtrand as random
class TestRegression(object):
diff --git a/numpy/random/randomgen/tests/test_smoke.py b/numpy/random/tests/test_smoke.py
index 816ce6ddc..fa7a0b567 100644
--- a/numpy/random/randomgen/tests/test_smoke.py
+++ b/numpy/random/tests/test_smoke.py
@@ -8,7 +8,7 @@ import numpy as np
import pytest
from numpy.testing import (assert_almost_equal, assert_equal, assert_,
assert_array_equal, suppress_warnings)
-from ...randomgen import (RandomGenerator, MT19937, DSFMT, ThreeFry32, ThreeFry,
+from numpy.random import (RandomGenerator, MT19937, DSFMT, ThreeFry32, ThreeFry,
PCG32, PCG64, Philox, Xoroshiro128, Xorshift1024, Xoshiro256StarStar,
Xoshiro512StarStar, entropy)
@@ -106,7 +106,7 @@ class RNG(object):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -118,39 +118,39 @@ class RNG(object):
cls.seed_error = TypeError
def _reset_state(self):
- self.rg.state = self.initial_state
+ self.rg.brng.state = self.initial_state
def test_init(self):
rg = RandomGenerator(self.brng())
- state = rg.state
+ state = rg.brng.state
rg.standard_normal(1)
rg.standard_normal(1)
- rg.state = state
- new_state = rg.state
+ rg.brng.state = state
+ new_state = rg.brng.state
assert_(comp_state(state, new_state))
def test_advance(self):
- state = self.rg.state
- if hasattr(self.rg._basicrng, 'advance'):
- self.rg._basicrng.advance(self.advance)
- assert_(not comp_state(state, self.rg.state))
+ state = self.rg.brng.state
+ if hasattr(self.rg.brng, 'advance'):
+ self.rg.brng.advance(self.advance)
+ assert_(not comp_state(state, self.rg.brng.state))
else:
- brng_name = self.rg._basicrng.__class__.__name__
+ brng_name = self.rg.brng.__class__.__name__
pytest.skip('Advance is not supported by {0}'.format(brng_name))
def test_jump(self):
- state = self.rg.state
- if hasattr(self.rg._basicrng, 'jump'):
- self.rg._basicrng.jump()
- jumped_state = self.rg.state
+ state = self.rg.brng.state
+ if hasattr(self.rg.brng, 'jump'):
+ self.rg.brng.jump()
+ jumped_state = self.rg.brng.state
assert_(not comp_state(state, jumped_state))
self.rg.random_sample(2 * 3 * 5 * 7 * 11 * 13 * 17)
- self.rg.state = state
- self.rg._basicrng.jump()
- rejumped_state = self.rg.state
+ self.rg.brng.state = state
+ self.rg.brng.jump()
+ rejumped_state = self.rg.brng.state
assert_(comp_state(jumped_state, rejumped_state))
else:
- brng_name = self.rg._basicrng.__class__.__name__
+ brng_name = self.rg.brng.__class__.__name__
pytest.skip('Jump is not supported by {0}'.format(brng_name))
def test_uniform(self):
@@ -221,51 +221,51 @@ class RNG(object):
assert_(self.rg.binomial(1000, .5) >= 0)
def test_reset_state(self):
- state = self.rg.state
+ state = self.rg.brng.state
int_1 = self.rg.randint(2**31)
- self.rg.state = state
+ self.rg.brng.state = state
int_2 = self.rg.randint(2**31)
assert_(int_1 == int_2)
def test_entropy_init(self):
rg = RandomGenerator(self.brng())
rg2 = RandomGenerator(self.brng())
- assert_(not comp_state(rg.state, rg2.state))
+ assert_(not comp_state(rg.brng.state, rg2.brng.state))
def test_seed(self):
rg = RandomGenerator(self.brng(*self.seed))
rg2 = RandomGenerator(self.brng(*self.seed))
rg.random_sample()
rg2.random_sample()
- assert_(comp_state(rg.state, rg2.state))
+ assert_(comp_state(rg.brng.state, rg2.brng.state))
def test_reset_state_gauss(self):
rg = RandomGenerator(self.brng(*self.seed))
rg.standard_normal()
- state = rg.state
+ state = rg.brng.state
n1 = rg.standard_normal(size=10)
rg2 = RandomGenerator(self.brng())
- rg2.state = state
+ rg2.brng.state = state
n2 = rg2.standard_normal(size=10)
assert_array_equal(n1, n2)
def test_reset_state_uint32(self):
rg = RandomGenerator(self.brng(*self.seed))
rg.randint(0, 2 ** 24, 120, dtype=np.uint32)
- state = rg.state
+ state = rg.brng.state
n1 = rg.randint(0, 2 ** 24, 10, dtype=np.uint32)
rg2 = RandomGenerator(self.brng())
- rg2.state = state
+ rg2.brng.state = state
n2 = rg2.randint(0, 2 ** 24, 10, dtype=np.uint32)
assert_array_equal(n1, n2)
def test_reset_state_float(self):
rg = RandomGenerator(self.brng(*self.seed))
rg.random_sample(dtype='float32')
- state = rg.state
+ state = rg.brng.state
n1 = rg.random_sample(size=10, dtype='float32')
rg2 = RandomGenerator(self.brng())
- rg2.state = state
+ rg2.brng.state = state
n2 = rg2.random_sample(size=10, dtype='float32')
assert_((n1 == n2).all())
@@ -354,29 +354,29 @@ class RNG(object):
assert_(len(vals) == 10)
def test_rand(self):
- state = self.rg.state
+ state = self.rg.brng.state
vals = self.rg.rand(10, 10, 10)
- self.rg.state = state
+ self.rg.brng.state = state
assert_((vals == self.rg.random_sample((10, 10, 10))).all())
assert_(vals.shape == (10, 10, 10))
vals = self.rg.rand(10, 10, 10, dtype=np.float32)
assert_(vals.shape == (10, 10, 10))
def test_randn(self):
- state = self.rg.state
+ state = self.rg.brng.state
vals = self.rg.randn(10, 10, 10)
- self.rg.state = state
+ self.rg.brng.state = state
assert_equal(vals, self.rg.standard_normal((10, 10, 10)))
assert_equal(vals.shape, (10, 10, 10))
- state = self.rg.state
+ state = self.rg.brng.state
vals = self.rg.randn(10, 10, 10)
- self.rg.state = state
+ self.rg.brng.state = state
assert_equal(vals, self.rg.standard_normal((10, 10, 10)))
- state = self.rg.state
+ state = self.rg.brng.state
self.rg.randn(10, 10, 10)
- self.rg.state = state
+ self.rg.brng.state = state
vals = self.rg.randn(10, 10, 10, dtype=np.float32)
assert_(vals.shape == (10, 10, 10))
@@ -487,12 +487,12 @@ class RNG(object):
pick = pickle.dumps(self.rg)
unpick = pickle.loads(pick)
assert_((type(self.rg) == type(unpick)))
- assert_(comp_state(self.rg.state, unpick.state))
+ assert_(comp_state(self.rg.brng.state, unpick.brng.state))
pick = pickle.dumps(self.rg)
unpick = pickle.loads(pick)
assert_((type(self.rg) == type(unpick)))
- assert_(comp_state(self.rg.state, unpick.state))
+ assert_(comp_state(self.rg.brng.state, unpick.brng.state))
def test_seed_array(self):
if self.seed_vector_bits is None:
@@ -505,32 +505,32 @@ class RNG(object):
else:
dtype = np.uint64
seed = np.array([1], dtype=dtype)
- self.rg.seed(seed)
- state1 = self.rg.state
- self.rg.seed(1)
- state2 = self.rg.state
+ self.rg.brng.seed(seed)
+ state1 = self.rg.brng.state
+ self.rg.brng.seed(1)
+ state2 = self.rg.brng.state
assert_(comp_state(state1, state2))
seed = np.arange(4, dtype=dtype)
- self.rg.seed(seed)
- state1 = self.rg.state
- self.rg.seed(seed[0])
- state2 = self.rg.state
+ self.rg.brng.seed(seed)
+ state1 = self.rg.brng.state
+ self.rg.brng.seed(seed[0])
+ state2 = self.rg.brng.state
assert_(not comp_state(state1, state2))
seed = np.arange(1500, dtype=dtype)
- self.rg.seed(seed)
- state1 = self.rg.state
- self.rg.seed(seed[0])
- state2 = self.rg.state
+ self.rg.brng.seed(seed)
+ state1 = self.rg.brng.state
+ self.rg.brng.seed(seed[0])
+ state2 = self.rg.brng.state
assert_(not comp_state(state1, state2))
seed = 2 ** np.mod(np.arange(1500, dtype=dtype),
self.seed_vector_bits - 1) + 1
- self.rg.seed(seed)
- state1 = self.rg.state
- self.rg.seed(seed[0])
- state2 = self.rg.state
+ self.rg.brng.seed(seed)
+ state1 = self.rg.brng.state
+ self.rg.brng.seed(seed[0])
+ state2 = self.rg.brng.state
assert_(not comp_state(state1, state2))
def test_seed_array_error(self):
@@ -541,164 +541,164 @@ class RNG(object):
seed = -1
with pytest.raises(ValueError):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
seed = np.array([-1], dtype=np.int32)
with pytest.raises(ValueError):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
seed = np.array([1, 2, 3, -5], dtype=np.int32)
with pytest.raises(ValueError):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
seed = np.array([1, 2, 3, out_of_bounds])
with pytest.raises(ValueError):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
def test_uniform_float(self):
rg = RandomGenerator(self.brng(12345))
warmup(rg)
- state = rg.state
+ state = rg.brng.state
r1 = rg.random_sample(11, dtype=np.float32)
rg2 = RandomGenerator(self.brng())
warmup(rg2)
- rg2.state = state
+ rg2.brng.state = state
r2 = rg2.random_sample(11, dtype=np.float32)
assert_array_equal(r1, r2)
assert_equal(r1.dtype, np.float32)
- assert_(comp_state(rg.state, rg2.state))
+ assert_(comp_state(rg.brng.state, rg2.brng.state))
def test_gamma_floats(self):
rg = RandomGenerator(self.brng())
warmup(rg)
- state = rg.state
+ state = rg.brng.state
r1 = rg.standard_gamma(4.0, 11, dtype=np.float32)
rg2 = RandomGenerator(self.brng())
warmup(rg2)
- rg2.state = state
+ rg2.brng.state = state
r2 = rg2.standard_gamma(4.0, 11, dtype=np.float32)
assert_array_equal(r1, r2)
assert_equal(r1.dtype, np.float32)
- assert_(comp_state(rg.state, rg2.state))
+ assert_(comp_state(rg.brng.state, rg2.brng.state))
def test_normal_floats(self):
rg = RandomGenerator(self.brng())
warmup(rg)
- state = rg.state
+ state = rg.brng.state
r1 = rg.standard_normal(11, dtype=np.float32)
rg2 = RandomGenerator(self.brng())
warmup(rg2)
- rg2.state = state
+ rg2.brng.state = state
r2 = rg2.standard_normal(11, dtype=np.float32)
assert_array_equal(r1, r2)
assert_equal(r1.dtype, np.float32)
- assert_(comp_state(rg.state, rg2.state))
+ assert_(comp_state(rg.brng.state, rg2.brng.state))
def test_normal_zig_floats(self):
rg = RandomGenerator(self.brng())
warmup(rg)
- state = rg.state
+ state = rg.brng.state
r1 = rg.standard_normal(11, dtype=np.float32)
rg2 = RandomGenerator(self.brng())
warmup(rg2)
- rg2.state = state
+ rg2.brng.state = state
r2 = rg2.standard_normal(11, dtype=np.float32)
assert_array_equal(r1, r2)
assert_equal(r1.dtype, np.float32)
- assert_(comp_state(rg.state, rg2.state))
+ assert_(comp_state(rg.brng.state, rg2.brng.state))
def test_output_fill(self):
rg = self.rg
- state = rg.state
+ state = rg.brng.state
size = (31, 7, 97)
existing = np.empty(size)
- rg.state = state
+ rg.brng.state = state
rg.standard_normal(out=existing)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_normal(size=size)
assert_equal(direct, existing)
sized = np.empty(size)
- rg.state = state
+ rg.brng.state = state
rg.standard_normal(out=sized, size=sized.shape)
existing = np.empty(size, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
rg.standard_normal(out=existing, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_normal(size=size, dtype=np.float32)
assert_equal(direct, existing)
def test_output_filling_uniform(self):
rg = self.rg
- state = rg.state
+ state = rg.brng.state
size = (31, 7, 97)
existing = np.empty(size)
- rg.state = state
+ rg.brng.state = state
rg.random_sample(out=existing)
- rg.state = state
+ rg.brng.state = state
direct = rg.random_sample(size=size)
assert_equal(direct, existing)
existing = np.empty(size, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
rg.random_sample(out=existing, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
direct = rg.random_sample(size=size, dtype=np.float32)
assert_equal(direct, existing)
def test_output_filling_exponential(self):
rg = self.rg
- state = rg.state
+ state = rg.brng.state
size = (31, 7, 97)
existing = np.empty(size)
- rg.state = state
+ rg.brng.state = state
rg.standard_exponential(out=existing)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_exponential(size=size)
assert_equal(direct, existing)
existing = np.empty(size, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
rg.standard_exponential(out=existing, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_exponential(size=size, dtype=np.float32)
assert_equal(direct, existing)
def test_output_filling_gamma(self):
rg = self.rg
- state = rg.state
+ state = rg.brng.state
size = (31, 7, 97)
existing = np.zeros(size)
- rg.state = state
+ rg.brng.state = state
rg.standard_gamma(1.0, out=existing)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_gamma(1.0, size=size)
assert_equal(direct, existing)
existing = np.zeros(size, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
rg.standard_gamma(1.0, out=existing, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_gamma(1.0, size=size, dtype=np.float32)
assert_equal(direct, existing)
def test_output_filling_gamma_broadcast(self):
rg = self.rg
- state = rg.state
+ state = rg.brng.state
size = (31, 7, 97)
mu = np.arange(97.0) + 1.0
existing = np.zeros(size)
- rg.state = state
+ rg.brng.state = state
rg.standard_gamma(mu, out=existing)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_gamma(mu, size=size)
assert_equal(direct, existing)
existing = np.zeros(size, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
rg.standard_gamma(mu, out=existing, dtype=np.float32)
- rg.state = state
+ rg.brng.state = state
direct = rg.standard_gamma(mu, size=size, dtype=np.float32)
assert_equal(direct, existing)
@@ -796,7 +796,7 @@ class TestMT19937(RNG):
cls.advance = None
cls.seed = [2 ** 21 + 2 ** 16 + 2 ** 5 + 1]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 32
cls._extra_setup()
cls.seed_error = ValueError
@@ -805,8 +805,8 @@ class TestMT19937(RNG):
nprg = np.random.RandomState()
nprg.standard_normal(99)
state = nprg.get_state()
- self.rg.state = state
- state2 = self.rg.state
+ self.rg.brng.state = state
+ state2 = self.rg.brng.state
assert_((state[1] == state2['state']['key']).all())
assert_((state[2] == state2['state']['pos']))
@@ -819,7 +819,7 @@ class TestPCG64(RNG):
cls.seed = [2 ** 96 + 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1,
2 ** 21 + 2 ** 16 + 2 ** 5 + 1]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = None
cls._extra_setup()
@@ -832,20 +832,20 @@ class TestPCG64(RNG):
seed = -1
with pytest.raises(ValueError):
- self.rg.seed(seed)
+ self.rg.brng.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.seed(seed)
+ self.rg.brng.seed(seed)
seed = np.array([1, 2, 3, -5], dtype=np.int32)
with pytest.raises(error_type):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
seed = np.array([1, 2, 3, out_of_bounds])
with pytest.raises(error_type):
- self.rg.seed(seed)
+ self.rg.brng.seed(seed)
class TestPhilox(RNG):
@@ -855,7 +855,7 @@ class TestPhilox(RNG):
cls.advance = 2**63 + 2**31 + 2**15 + 1
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -867,7 +867,7 @@ class TestThreeFry(RNG):
cls.advance = 2 ** 63 + 2 ** 31 + 2 ** 15 + 1
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -879,7 +879,7 @@ class TestXoroshiro128(RNG):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -891,7 +891,7 @@ class TestXoshiro256StarStar(RNG):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -903,7 +903,7 @@ class TestXoshiro512StarStar(RNG):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -915,7 +915,7 @@ class TestXorshift1024(RNG):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
@@ -927,7 +927,7 @@ class TestDSFMT(RNG):
cls.advance = None
cls.seed = [12345]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls._extra_setup()
cls.seed_vector_bits = 32
@@ -939,7 +939,7 @@ class TestThreeFry32(RNG):
cls.advance = 2**63 + 2**31 + 2**15 + 1
cls.seed = [2 ** 21 + 2 ** 16 + 2 ** 5 + 1]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = 64
cls._extra_setup()
cls.seed_error = ValueError
@@ -972,6 +972,6 @@ class TestPCG32(TestPCG64):
cls.seed = [2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1,
2 ** 21 + 2 ** 16 + 2 ** 5 + 1]
cls.rg = RandomGenerator(cls.brng(*cls.seed))
- cls.initial_state = cls.rg.state
+ cls.initial_state = cls.rg.brng.state
cls.seed_vector_bits = None
cls._extra_setup()
diff --git a/numpy/random/randomgen/threefry.pyx b/numpy/random/threefry.pyx
index 8140c6a9b..8140c6a9b 100644
--- a/numpy/random/randomgen/threefry.pyx
+++ b/numpy/random/threefry.pyx
diff --git a/numpy/random/randomgen/threefry32.pyx b/numpy/random/threefry32.pyx
index 1fa98eabd..1fa98eabd 100644
--- a/numpy/random/randomgen/threefry32.pyx
+++ b/numpy/random/threefry32.pyx
diff --git a/numpy/random/randomgen/xoroshiro128.pyx b/numpy/random/xoroshiro128.pyx
index 7795500e8..7795500e8 100644
--- a/numpy/random/randomgen/xoroshiro128.pyx
+++ b/numpy/random/xoroshiro128.pyx
diff --git a/numpy/random/randomgen/xorshift1024.pyx b/numpy/random/xorshift1024.pyx
index 3c7ffac52..3c7ffac52 100644
--- a/numpy/random/randomgen/xorshift1024.pyx
+++ b/numpy/random/xorshift1024.pyx
diff --git a/numpy/random/randomgen/xoshiro256starstar.pyx b/numpy/random/xoshiro256starstar.pyx
index c3856b6f7..c3856b6f7 100644
--- a/numpy/random/randomgen/xoshiro256starstar.pyx
+++ b/numpy/random/xoshiro256starstar.pyx
diff --git a/numpy/random/randomgen/xoshiro512starstar.pyx b/numpy/random/xoshiro512starstar.pyx
index 761d1f1d0..761d1f1d0 100644
--- a/numpy/random/randomgen/xoshiro512starstar.pyx
+++ b/numpy/random/xoshiro512starstar.pyx
diff --git a/setup.py b/setup.py
index d7fa3f544..6680e3b6a 100755
--- a/setup.py
+++ b/setup.py
@@ -225,10 +225,10 @@ class sdist_checked(sdist):
def generate_cython():
cwd = os.path.abspath(os.path.dirname(__file__))
print("Cythonizing sources")
- for d in ('mtrand', 'randomgen', 'randomgen/legacy'):
+ for d in ('random/_mtrand', 'random'):
p = subprocess.call([sys.executable,
os.path.join(cwd, 'tools', 'cythonize.py'),
- 'numpy/random/{0}'.format(d)],
+ 'numpy/{0}'.format(d)],
cwd=cwd)
if p != 0:
raise RuntimeError("Running cythonize failed!")