BitGenerator for the PCG-64 pseudo-random number generator.
A seed to initialize the BitGenerator. If None, then fresh,
unpredictable entropy will be pulled from the OS. If an int or
array_like[ints] is passed, then it will be passed to
SeedSequence to derive the initial BitGenerator state. One may also
pass in a SeedSequence instance.
PCG-64 is a 128-bit implementation of O’Neill’s permutation congruential
generator (, ). PCG-64 has a period of and supports
advancing an arbitrary number of steps as well as streams.
The specific member of the PCG family that we use is PCG XSL RR 128/64
as described in the paper ().
PCG64 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 a Generator
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-64 RNG is represented by 2 128-bit unsigned
State and Seeding
The PCG64 state vector consists of 2 unsigned 128-bit values,
which are represented externally as Python ints. One is the state of the
PRNG, which is advanced by a linear congruential generator (LCG). The
second is a fixed odd increment used in the LCG.
The input seed is processed by SeedSequence to generate both values. The
increment is not independently settable.
The preferred way to use a BitGenerator in parallel applications is to use
the SeedSequence.spawn method to obtain entropy values, and to use these
to generate new BitGenerators:
>>> from numpy.random import Generator, PCG64, SeedSequence
>>> sg = SeedSequence(1234)
>>> rg = [Generator(PCG64(s)) for s in sg.spawn(10)]
PCG64 makes a guarantee that a fixed seed and will always produce
the same random integer stream.
“PCG, A Family of Better Random Number Generators”
O’Neill, Melissa E. “PCG: A Family of Simple Fast Space-Efficient
Statistically Good Algorithms for Random Number Generation”
Get or set the PRNG state
Advance the underlying RNG as-if delta draws have occurred.
Returns a new bit generator with the state jumped.