Permuted Congruential Generator (32-bit, PCG32)¶
-
class randomgen.pcg32.PCG32(seed=
None
, inc=0
, *, mode='sequence'
)¶ Container for the PCG-32 pseudo-random number generator.
- Parameters:¶
- seed=
None
¶ Random seed initializing the pseudo-random number generator. Can be an integer in [0, 2**64], a SeedSequence instance or
None
(the default). If seed isNone
, thenPCG32
will try to read data from/dev/urandom
(or the Windows analog) if available. If unavailable, a 64-bit hash of the time and process ID is used.- inc=
0
¶ The increment in the LCG. Can be an integer in [0, 2**64] or
None
. The default is 0. If inc isNone
, then it is initialized using entropy.- mode=
'sequence'
¶ Deprecated parameter. Do not use.
- seed=
- lock¶
Lock instance that is shared so that the same bit git generator can be used in multiple Generators without corrupting the state. Code that generates values from a bit generator should hold the bit generator’s lock.
- Type:¶
- seed_seq¶
The SeedSequence instance used to initialize the generator if mode is “sequence” or is seed is a SeedSequence.
- Type:¶
{None, SeedSequence}
Notes
PCG-32 is a 64-bit implementation of O’Neill’s permuted congruential generator ([1], [2]). PCG-32 has a period of \(2^{64}\) and supports advancing an arbitrary number of steps.
PCG32
provides a capsule containing function pointers that produce doubles, and unsigned 32 and 64- bit integers. These are not directly consumable in Python and must be consumed by aGenerator
or similar object that supports low-level access.Supports the method advance to advance the RNG an arbitrary number of steps. The state of the PCG-32 PRNG is represented by 2 64-bit unsigned integers.
See
PCG64
for a similar implementation with a smaller period.State and Seeding
The
PCG32
state vector consists of 2 unsigned 64-bit values.PCG32
is seeded using a single 64-bit unsigned integer.Parallel Features
PCG32
can be used in parallel applications usingadvance
with a different value in each instance to produce non-overlapping sequences.>>> from numpy.random import Generator >>> from randomgen import PCG32 >>> rg = [Generator(PCG32(1234, i + 1)) for i in range(10)] >>> for i in range(10): ... rg[i].bit_generator.advance(i * 2**32)
Compatibility Guarantee
PCG32
makes a guarantee that a fixed seed and will always produce the same random integer stream.References
Seeding and State¶
|
Seed the generator |
Get or set the PRNG state |
Parallel generation¶
|
Advance the underlying RNG as-if delta draws have occurred. |
|
Jump the state a fixed increment |
|
Returns a new bit generator with the state jumped |
Extending¶
CFFI interface |
|
ctypes interface |
Testing¶
|
Return randoms as generated by the underlying BitGenerator |