Change Log¶
v2.3.0¶
Added the
BlaBlaPRNG which is based on the Blake 2b hash function.BlaBlais a counter-based PRNG likeAESCounterand supports bothadvance()andjumped().Removed
modefrom bit generator initialization. This argument has been deprecated since release 2.0.0.
Warning
This change is backward incompatible. If mode is essential, you should continue to use legacy
versions.
Moved to the build system to meson which improves build time.
Fixed a breaking change that affected the use of
functools.partial()test suite in Python 3.14.
Note
There was no version 2.2.0.
v2.1.0¶
Fixed a bug in
LCG128Mixthat resulted inincnot being correctly set when initialized without a user-providedinc.Added the
TychePRNG of Neves and Araujo. Supports two variants. One is the original implementation in the 2012 paper. The second implementation matches the version inOpenRand.Added the
SquaresPRNG of Widynski. Supports two variants. The default uses 5 rounds of the middle square algorithm and outputs a 64-bit value. Ifvariant=32, then 4 rounds are used but only 32 bits returned.Added the helper function
generate_keys()forSquares. This function can be used to pre-generate keys for use withSquares.Refactored the broadcasting helper functions out of
randomgen.commontorandomgen.broadcast. Tests have been added and some edge case bugs have been found and fixed.Improve test coverage.
Additional code clean-up.
v2.0.0¶
Final compatibility with NumPy 2
Minimum NumPy is now 1.22.3.
Removed
"legacy"seeding in favor of usingSeedSequence.Removed the vendored copy of
SeedSequence.Deprecated using the
modekeyword argument to set the seed mode, since onlySeedSequencesare supported.Changed
randomgen.common.BitGeneratorto inherit fromnumpy.random.BitGeneratorso that numpy will recognize these asBitGenerators.Removed C distribution functions that are available in NumPy (see libnpyrandom)`.
General code cleanup and modernization.
v1.26.1¶
Initial compatability with Cython 3 and NumPy 2
v1.26.0¶
Fixed a bug that affected the
randomgen.xoroshiro128.Xoroshiro128.jumped()method ofrandomgen.xoroshiro128.Xoroshiro128where the ** version was swapped with the standard version.Fixed a bug where
numpy.random.SeedSequencewas not copied when advancing generators usingjumped.Small compatibility fixes for change in NumPy.
Changes the documentation theme to sphinx-immaterial.
Added builds for Python 3.11.
Increased the minimum Python to 3.8.
v1.23.1¶
Registered the bit generators included in
randomgenwith NumPy so that NumPyGeneratorinstances can be pickled and unpickled when using arandomstatebit generator.Changed the canonical name of the bit generators to be their fully qualified name. For example,
PCG64is not named"randomgen.pcg64.PCG64"instead of"PCG64". This was done to avoid ambiguity with NumPy’s supplied bit generators with the same name.
v1.23.0¶
Removed
GeneratorandRandomState.
v1.20.2¶
Fixed a bug in
SFC64the used the wrong value from the Weyl sequence. In the original implementation, the current value is added to the next random integer and then incremented. The buggy version was incrementing then adding, and so was shifted by one value. This sequence should be similarly random in appearance, but it does not match the original specification and so has been changed.Added
mode="numpy"support toPCG64,MT19937,Philox, andSFC64. When using this mode, the sequence generated is guaranteed to match the sequence produced using the NumPy implementations as long as arandomgen.seed_sequence.SeedSequenceornumpy.random.SeedSequenceis used with the same initial seed values.Added
random()with support fordtype="longdouble"to produce extended precision random floats.
In [1]: import numpy as np
In [2]: from randomgen import ExtendedGenerator, PCG64
In [3]: eg = ExtendedGenerator(PCG64(20210501))
In [4]: eg.random(5, dtype=np.longdouble)
Out[4]:
array([0.66851489, 0.01769784, 0.87316102, 0.86532386, 0.85384162],
dtype=float128)
v1.20.1¶
Fixed a bug that affects
standard_gammawhen used withoutand a Fortran contiguous array.Added
standard_wishart()andwishart()variate generators.
v1.20.0¶
Sync upstream changes from NumPy
Added typing information
Fixed a bug in
AESCounterthat prevented a small number of counter values from being directly set.
v1.19.3¶
Future proofed setup against
setuptoolsanddistutilschanges.Enhanced documentation for
RDRAND.
v1.19.2¶
Corrected
RDRANDto retry on failures with pause between retries. Add a parameterretrywhich allows the number of retries to be set. It defaults to the Intel recommended value of 10. Also sets an exception when the number of retries has been exhausted (very unlikely). See theRDRANDdocstring with unique considerations when usingRDRANDthat do not occur with deterministic PRNGs.
v1.19.1¶
Added
randomgen.romu.Romuwhich is among the fastest available bit generators.Added
weyl_increments()to simplify generating increments for use in parallel applications ofSFC64.Completed * Quality Assurance of all bit generators to at least 4TB.
v1.19.0¶
Tested all bit generators out to at least 1TB using PractRand.
Added
randomgen.pcg64.PCG64DXSMwhich is an alias forrandomgen.pcg64.PCG64withvariant="dxsm"andmode="sequence". This is the 2.0 version of PCG64 and will likely become the default bit generator in NumPy in the near future.Added
randomgen.efiix64.EFIIX64which is both fast and high-quality.Added
randomgen.sfc.SFC64which supports generating streams using distinct Weyl constants.Added a
randomgen.pcg64.LCG128Mixwhich supports setting the LCG multiplier, changing the output function (including support for user-defined output functions) and pre- or post-state update generation.Added a
randomgen.lxm.LXMwhich generates variates using a mix of two simple, but flawed generators: an Xorshift and a 64-bit LCG. This has been proposed for including in in Java.Added a
randomgen.wrapper.UserBitGeneratorwhich allows bit generators to be written in Python or numba.Added
randomgen.generator.ExtendedGeneratorwhich contains features not innumpy.random.Generator.Added support for the
dxsmanddxsm-128variants ofrandomgen.pcg64.PCG64. Thedxsmvariant is the official PCG 2.0 generator.Added support for broadcasting inputs in
randomgen.generator.ExtendedGenerator.multivariate_normal.Added support for the ++ variant of
randomgen.xoroshiro128.Xoroshiro128.Fixed a bug the produced incorrect results in
jumped().Fixed multiple bugs in
Generatorthat were fixed innumpy.random.Generator.
v1.18.0¶
choicepulled in upstream performance improvement that use a hash set when choosing without replacement and without user-provided probabilities.Added support for
randomgen.seed_sequence.SeedSequence(and NumPy’sSeedSequence).Fixed a bug that affected both
randomgen.generator.Generator.randintinGeneratorandrandintinRandomStatewhenhigh=2**32. This value is inbounds for a 32-bit unsigned closed interval generator, and so should have been redirected to a 32-bit generator. It was erroneously sent to the 64-bit path. The random values produced are fully random but inefficient. This fix breaks the stream inrandomgen.generator.Generatoris the value forhighis used. The fix restoresRandomStateto NumPy 1.16 compatibility. only affects the output ifdtypeis'int64'This release brings many breaking changes. Most of these have been implemented using
DeprecationWarnings. This has been done to bringrandomgenin-line with the API changes of the version going into NumPy.Two changes that are more abrupt are:
The
.generatormethod of the bit generators raiseNotImplementedErrorThe internal structures that is used in C have been renamed. The main rename is
brng_ttobitgen_t
The other key changes are:
Rename
RandomGeneratortoGenerator.Rename
randinttointegers.Rename
random_integerstointegers.Rename
random_sampletorandom.Change
jumpwhich operated in-place tojumped()which returns a newBitGenerator.Rename Basic RNG to bit generator, which has been consistently applied across the docs and references
Add the integer-based SIMD-based Fast Mersenne Twister (SFMT) generator
SFMT.Add the 64-bit Mersenne Twister (MT64) generator
MT64.Renamed Xoshiro256StarStar to
Xoshiro256and Xoshiro512StarStar toXoshiro512
v1.17.0¶
This release was skipped
v1.16.6¶
Changed the default jump step size to phi times the period of the generator for
PCG32andPCG64.Improved the performance of
PCG64on Windows.Improves backward compatibility of
RandomState
v1.16.5¶
Fixed bugs in
laplace,gumbel,logseries,normal,standard_normal,standard_exponential,exponential, andlogisticthat could result innanvalues in rare circumstances (about 1 in \(10^{53}\) draws).Added keyword
closedtorandintwhich changes sampling from the half-open interval[low, high)to the closed interval[low, high].Fixed a bug in
random_integersthat could lead to valid values being treated as invalid.
v1.16.4¶
Add a fast path for broadcasting
randintwhen usinguint64orint64.Refactor PCG64 so that it does not rely on Cython conditional compilation.
Add
brngto access the basic RNG.Allow multidimensional arrays in
choice.Speed-up
choicewhen not replacing. The gains can be very large (1000x or more) when the input array is large but the sample size is small.Add parameter checks in
multinomial.Fix an edge-case bug in
zipf.Allow 0 for sample in
hypergeometric.Add broadcasting to
multinomial(see NumPy issue 9710)
v1.16.3¶
Release fixing Python 2.7 issues
v1.16.2¶
Updated Xoroshiro120 to use Author’s latest parametrization
Closely synchronized with the version of randomgen being integrated into NumPy, including removing:
random_raw, which have been moved to the individual bit generatorsrandom_uintegers, which can be replaced withrandint.
Added
RandomStateas a clone of NumPy’s RandomState.Removed
LegacyGeneratorsince this is no longer neededFixed many small bugs, including in cffi and ctype interfaces
v1.16.1¶
Synchronized with upstream changes.
Fixed a bug in gamma generation if the shape parameters is 0.0.
v1.16.0¶
Fixed a bug that affected
DSFMTwhen callingjump()orseed()that failed to reset the buffer. This resulted in up to 381 values from the previous state being used before the buffer was refilled at the new state.Fixed bugs in
Xoshiro512andXorshift1024where the fallback entropy initialization used too few bytes. This bug is unlikely to be encountered since this path is only encountered if the system random number generator fails.Synchronized with upstream changes.
v1.15.1¶
Added Xoshiro256** and Xoshiro512**, the preferred generators of this class.
Fixed bug in jump method of Random123 generators which did not specify a default value.
Added support for generating bounded uniform integers using Lemire’s method.
Synchronized with upstream changes, which requires moving the minimum supported NumPy to 1.13.
v1.15¶
Synced empty choice changes
Synced upstream docstring changes
Synced upstream changes in permutation
Synced upstream doc fixes
Added absolute_import to avoid import noise on Python 2.7
Add legacy generator which allows NumPy replication
Improve type handling of integers
Switch to array-fillers for 0 parameter distribution to improve performance
Small changes to build on manylinux
Build wheels using multibuild