Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: randomgen #13163

Merged
merged 139 commits into from May 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
3102fc6
INIT: Initial commit with basic structure
bashtage Feb 20, 2018
fa3bef5
ENH: Add support for xoroshiro128
bashtage Feb 22, 2018
d59494c
ENH: Add entropy initialization to RNGS
bashtage Feb 23, 2018
8942968
ENH: Add seeding to generators
bashtage Feb 23, 2018
aa9060c
CLN: Simplify xoroshiro state
bashtage Feb 24, 2018
b353f87
REF: Add additional state
bashtage Feb 26, 2018
15cab3c
REF: Reactor filler to take a function
bashtage Feb 28, 2018
8367231
ENH: Add extra abstraction
bashtage Feb 28, 2018
d5dc576
ENH: Add float from double and std exponential
bashtage Feb 28, 2018
f4575d9
BUG: Fix bug in xoroshiro
bashtage Mar 1, 2018
c687b84
CLN: Fix warning in entropy
bashtage Mar 1, 2018
0d4eae3
REF: Add types to prng_t
bashtage Mar 1, 2018
27a96bb
ENH: Add Threefry generator
bashtage Mar 2, 2018
a5f17a5
ENH: Use Random123 threefry
bashtage Mar 2, 2018
56fd6e7
CLN: Remove unnecessary code from threefry
bashtage Mar 2, 2018
93b7edf
ENH: Add pickle support
bashtage Mar 3, 2018
d665138
DOC: Add list of TODOs
bashtage Mar 3, 2018
892d43f
BIG: Fix setting state in threee fry
bashtage Mar 3, 2018
ad79fe0
ENH: Add jump and advance to threefry
bashtage Mar 3, 2018
4b2afc2
ENH: Add PCG64
bashtage Mar 4, 2018
6b81fa0
ENH: Add advance and jump to PCG64
bashtage Mar 4, 2018
e150e1a
ENH: Add Philox
bashtage Mar 5, 2018
d6d3ac9
CLN: Remove splitmix64 as a visible PRNG
bashtage Mar 5, 2018
323616c
BUG: Fix bugs which prevented building on Linux
bashtage Mar 5, 2018
626a1a0
REF: Refactor distributions
bashtage Mar 5, 2018
5fe7572
ENH: Add std gamma
bashtage Mar 5, 2018
cecd56d
CLN: Clean random123 generators
bashtage Mar 6, 2018
a071378
CLN: Fix dsfmt import issues
bashtage Mar 7, 2018
eab3390
ENH: Enable Python 2.7 compatability
bashtage Mar 7, 2018
c3155db
ENH: Add jump to mt19937 and dsfmt
bashtage Mar 7, 2018
e9e0a8c
ENH: Add ctypes interface and examples
bashtage Mar 7, 2018
0e5ffae
CLN: Mix skipped nogils
bashtage Mar 7, 2018
5d274af
ENH: Add cffi interface
bashtage Mar 7, 2018
2f9b9c0
ENH: Add example using distributions
bashtage Mar 8, 2018
fcef7ae
ENH: Enable building distributions as a DLL
bashtage Mar 8, 2018
1235545
ENH: Port over external functions
bashtage Mar 8, 2018
7ca6e62
ENH: Add bounded intergers
bashtage Mar 9, 2018
cfe9e95
ENH: Add support for Philon on 32 bit Windows
bashtage Mar 11, 2018
390860a
ENH: Add support for ThreeFry32x4
bashtage Mar 12, 2018
8fa8c2b
BUG: Enable build to run on 32-bit Linux
bashtage Mar 12, 2018
644d883
ENH: Add PCG32
bashtage Mar 12, 2018
e81e93f
BUG: Fix variable declarations in dsfmt
bashtage Mar 12, 2018
76a31a9
ENH: Enable testing on OSX
bashtage Mar 12, 2018
c1f4fa0
REF: Drop Box-Muller
bashtage Mar 13, 2018
ee51dcf
REF: Remove binomial_t from prng
bashtage Mar 13, 2018
fde7742
ENH: Switch to int64
bashtage Mar 13, 2018
fb98ac5
DOC: Start documentation
bashtage Mar 14, 2018
cb24575
REF: Rename from Core PRNG to RandomGen
bashtage Mar 14, 2018
c722f44
DOC: Update docs
bashtage Mar 14, 2018
e69d24c
TST: Improve travis
bashtage Mar 14, 2018
a85ee48
BUG: Fix failing test
bashtage Mar 14, 2018
701326e
DOC: Fix location of tagged docs
bashtage Mar 14, 2018
9e18b77
BLD: Ensure emulated math is used in 32 bit platforms
bashtage Mar 16, 2018
3e69d17
CLN: Remove references to long
bashtage Mar 22, 2018
489015f
ENH: Add Box-Muller gauss
bashtage Mar 21, 2018
8711b32
DOC: Update multithreading doc
bashtage Mar 27, 2018
018faf7
CLN: Remove set/get state for system generator
bashtage Mar 27, 2018
75025d9
TST: Fix tailing test on 32bit platofrms
bashtage Mar 27, 2018
4f37499
CLN: Fix str for RandomGenerator
bashtage Mar 28, 2018
7d37f5f
DOC: Update legacy docs
bashtage Mar 28, 2018
a2e21e6
BUG: Fix pickle for LegacyGenerator
bashtage Mar 28, 2018
d13f398
DOC: Spelling changes
bashtage Apr 2, 2018
df1758d
CLN: Remove redeclared type
bashtage Apr 2, 2018
412e908
BLD: Enable no-sse2 flag
bashtage Apr 3, 2018
87b52f2
SYNC/CLN: Sync with upstream changes
bashtage Apr 16, 2018
db87d7d
BLD: Add lm flag for non-windows platforms
bashtage May 2, 2018
b41949e
ENH: Add dSFMT
bashtage Mar 5, 2018
a9cb58d
ENH: Add out, ziggurat for exponential
bashtage Mar 5, 2018
92a09f3
TST: Add test and benchmark code
bashtage Mar 6, 2018
f029ebb
ENH: Improve benchmark
bashtage Mar 6, 2018
8777c61
CLN: Reformat C files
bashtage Mar 7, 2018
784315e
ENH: Example numba example using external distributions
bashtage Mar 8, 2018
5b262ef
BUG: Precent GC of CorePRNG when using CFFI/CTypes
bashtage Mar 8, 2018
65ceada
TST: Add tests
bashtage Mar 9, 2018
3b7b1e4
DOC: Update readme
bashtage Mar 11, 2018
a8882b2
CLN: Remove small bugs and alter variable size
bashtage Mar 12, 2018
dc0c84b
BUG: Fix returned type
bashtage Mar 13, 2018
f060614
DOC: Update docs and building
bashtage Mar 14, 2018
5d3d955
ENH: Restore filler
bashtage Mar 15, 2018
ce30b74
TST: Improve testing and build
bashtage Mar 17, 2018
447e6b3
DOC: Update change-log and docs
bashtage Mar 17, 2018
50e7242
BUG: Restore nogil for fillers
bashtage Mar 21, 2018
799e20b
TST: Make test more verbose, clean up noise
bashtage Mar 28, 2018
80a3fe1
BUG: Fix absolute_import
bashtage Apr 2, 2018
d780f06
DOC: Fix doc and example error
pdebuyl May 22, 2018
fdd029f
REF: Rename min and max macros
bashtage Jun 14, 2018
3dba22d
MAINT: Sync with NumPy changes
bashtage Jun 19, 2018
f2ace10
ENH: Allow empty choice
bashtage Jul 3, 2018
d0cb154
DOC: Provide a better explanation of bounded int generation
bashtage Sep 22, 2018
8e6b69f
MAINT: Sync with recent upstream changes
bashtage Sep 22, 2018
99bf1a0
DOC: Update docs for 1.15 release [skip ci]
bashtage Sep 22, 2018
8dba0e9
ENH: Added an alternative interval generator using Lemire's algorithm.
bduvenhage Oct 3, 2018
13d8999
DOC: Add license files
bashtage Oct 5, 2018
707371d
REF: Add path using umul
bashtage Oct 5, 2018
15bebed
ENH: Added Lemire algorithms for generating random numbers
bduvenhage Oct 11, 2018
734fbfb
CLN: Add guards to headers
bashtage Oct 21, 2018
c4ed60e
ENH/BUG: Add Xoshiro256starstar generator
bashtage Oct 20, 2018
9dac6a5
MAINT: Sync with upstream changes
bashtage Nov 5, 2018
578889b
BUG: Ensure buffer_loc is reset in DSFMT
bashtage Feb 4, 2019
896f2e4
BUG: Raise on nan probabilities
bashtage Feb 4, 2019
fa8af41
BUILD: move files out of _randomgen
mattip Mar 20, 2019
7e8e19f
BUG: Correct handling of nans
bashtage Apr 8, 2019
c53b2eb
BENCH: convert bencmarks to asv format
mattip Apr 9, 2019
9578dcf
BUG: __dealloc__ can be called without __init__ in some error modes
mattip Apr 12, 2019
0f3dd06
ENH: Extend multinomial and fix zipf
bashtage Apr 11, 2019
8a3c11d
DOC: Add alias docstrings for sample and ranf
bashtage Apr 12, 2019
bb7abf2
ENH: add instance of RandomGenerator(Xoshiro512StarStar) as gen
mattip Apr 12, 2019
f11921d
MAINT: Simplify return types
bashtage Apr 12, 2019
0f931b3
BUG: Fix type in zipf
bashtage Apr 13, 2019
b2f9bea
ENH: Improvce choice without replacement
bashtage Apr 13, 2019
7a41794
DOC: fix doctests, move numpy.random -> numpy.random.gen in generator…
mattip Apr 13, 2019
edfd313
ENH: Finish hypergeometric 0
bashtage Apr 13, 2019
b9b9d70
MAINT: remove legacy, refactor legacy -> mtrand in docs
mattip Apr 14, 2019
2deddc8
MAINT: Remove Cython conditionals
bashtage Apr 14, 2019
d531f92
BUG: Protect gamma generation from 0 input
bashtage Feb 18, 2019
6e386c0
DOC/ENH: Update docstring and enhance logistic
bashtage Feb 19, 2019
8621229
DOC: tighten up documentation, add a table of comparison
mattip Apr 14, 2019
4f06779
ENH: Add fast path for randint broadcasting
bashtage Apr 15, 2019
ca9c542
BUG: Cast high to Python int to avoid overflow
bashtage Apr 15, 2019
dd77ce3
ENH: Add closed generator to randint
bashtage Apr 16, 2019
17e0070
MAINT: Implement API changes for randomgen-derived code
mattip May 13, 2019
b42a5ca
BUG: Ensure integer-type stream on 32bit
bashtage May 18, 2019
720a0a9
BLD: Use numpy detection of SSE
bashtage May 19, 2019
e058ae4
MAINT: remove unused file
mattip May 20, 2019
3d19ae9
MAINT: remove threefry32, xoroshiro128, xorshift1024 BitGenerators
mattip May 20, 2019
060c669
merge master into branch
mattip May 22, 2019
4e6a812
MAINT: remove pre-randomgen _mtrand
mattip May 23, 2019
19b48e2
BUG: test, fix missing return to deprecated function
mattip May 23, 2019
cdb2b0f
MAINT: remove tomaxint, random_sample from generator
mattip May 23, 2019
2c14e47
ENH: Split poisson_lam_max
bashtage May 23, 2019
457c6c5
MAINT: Remove test_against_numpy
bashtage May 23, 2019
9e5ae61
BUG: Change renamed attribute
bashtage May 23, 2019
7c52c28
DOC: Add __all__ and document lock
bashtage May 23, 2019
dabf42b
MAINT: Remove remnants of bit generators
bashtage May 23, 2019
3db5a77
BLD: Improve setup
bashtage May 23, 2019
58c0e72
Revert "MAINT: Implement API changes for randomgen-derived code"
bashtage May 24, 2019
23853d6
STY: Clean up code
bashtage May 24, 2019
9c261e6
PERF: Reorder header for philox (#34)
bashtage May 27, 2019
70d6293
MAINT: fix for dtype specification
mattip May 27, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Expand Up @@ -20,7 +20,7 @@ jobs:
command: |
python3 -m venv venv
. venv/bin/activate
pip install cython sphinx==1.8.5 matplotlib
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

Expand Down
10 changes: 7 additions & 3 deletions .gitignore
Expand Up @@ -168,12 +168,16 @@ numpy/core/src/umath/test_rational.c
numpy/core/src/umath/umath_tests.c
numpy/distutils/__config__.py
numpy/linalg/umath_linalg.c
doc/source/reference/generated
doc/source/**/generated/
benchmarks/results
benchmarks/html
benchmarks/env
benchmarks/numpy
# cythonized files
cythonize.dat
numpy/random/mtrand/mtrand.c
numpy/random/mtrand/randint_helpers.pxi
numpy/random/_mtrand/_mtrand.c
numpy/random/*.c
numpy/random/legacy/*.c
numpy/random/_mtrand/randint_helpers.pxi
numpy/random/bounded_integers.pyx
numpy/random/bounded_integers.pxd
2 changes: 1 addition & 1 deletion MANIFEST.in
Expand Up @@ -9,7 +9,7 @@ include pytest.ini
include *.txt
include README.md
include site.cfg.example
recursive-include numpy/random/mtrand *.pyx *.pxd
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
Expand Down
97 changes: 93 additions & 4 deletions benchmarks/benchmarks/bench_random.py
Expand Up @@ -4,6 +4,7 @@

import numpy as np

from numpy.random import RandomState, Generator

class Random(Benchmark):
params = ['normal', 'uniform', 'weibull 1', 'binomial 10 0.5',
Expand Down Expand Up @@ -69,14 +70,102 @@ def time_randint_slow(self, name):
class Permutation(Benchmark):
def setup(self):
self.n = 10000
self.a_1d = np.random.random_sample(self.n)
self.a_2d = np.random.random_sample((self.n, 2))
self.a_1d = np.random.random(self.n)
self.a_2d = np.random.random((self.n, 2))

def time_permutation_1d(self):
np.random.permutation(self.a_1d)

def time_permutation_2d(self):
np.random.permutation(self.a_2d)
np.random.permutation(self.a_2d)

def time_permutation_int(self):
np.random.permutation(self.n)

nom_size = 100000

class RNG(Benchmark):
param_names = ['rng']
params = ['DSFMT', 'PCG64', 'PCG32', 'MT19937', 'Xoshiro256',
'Xoshiro512', 'Philox', 'ThreeFry', 'numpy']

def setup(self, bitgen):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()
self.int32info = np.iinfo(np.int32)
self.uint32info = np.iinfo(np.uint32)
self.uint64info = np.iinfo(np.uint64)

def time_raw(self, bitgen):
if bitgen == 'numpy':
self.rg.random_integers(self.int32info.max, size=nom_size)
else:
self.rg.integers(self.int32info.max, size=nom_size, endpoint=True)

def time_32bit(self, bitgen):
min, max = self.uint32info.min, self.uint32info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint32)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint32)

def time_64bit(self, bitgen):
min, max = self.uint64info.min, self.uint64info.max
if bitgen == 'numpy':
self.rg.randint(min, max + 1, nom_size, dtype=np.uint64)
else:
self.rg.integers(min, max + 1, nom_size, dtype=np.uint64)

def time_normal_zig(self, bitgen):
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']
params = [['DSFMT', 'PCG64', 'PCG32', 'MT19937','Xoshiro256',
'Xoshiro512', 'Philox', 'ThreeFry', 'numpy'],
[[u8, 95],
[u8, 64], # Worst case for legacy
[u8, 127], # Best case for legacy
[u16, 95],
[u16, 1024], # Worst case for legacy
[u16, 1535], # Typ. avg. case for legacy
[u16, 2047], # Best case for legacy
[u32, 1024], # Worst case for legacy
[u32, 1535], # Typ. avg. case for legacy
[u32, 2047], # Best case for legacy
[u64, 95],
[u64, 1024], # Worst case for legacy
[u64, 1535], # Typ. avg. case for legacy
[u64, 2047], # Best case for legacy
]]

def setup(self, bitgen, args):
if bitgen == 'numpy':
self.rg = np.random.RandomState()
else:
self.rg = Generator(getattr(np.random, bitgen)())
self.rg.random()

def time_bounded(self, bitgen, 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.
"""
dt, max = args
if bitgen == 'numpy':
self.rg.randint(0, max + 1, nom_size, dtype=dt)
else:
self.rg.integers(0, max + 1, nom_size, dtype=dt)
3 changes: 2 additions & 1 deletion doc/Makefile
Expand Up @@ -46,7 +46,8 @@ help:
@echo " upload USERNAME=... RELEASE=... to upload built docs to docs.scipy.org"

clean:
-rm -rf build/* source/reference/generated
-rm -rf build/*
find . -name generated -type d -prune -exec rm -rf "{}" ";"

version-check:
ifeq "$(GITVER)" "Unknown"
Expand Down
4 changes: 2 additions & 2 deletions doc/neps/nep-0010-new-iterator-ufunc.rst
Expand Up @@ -1877,8 +1877,8 @@ the new iterator.
Here is one of the original functions, for reference, and some
random image data.::

In [5]: rand1 = np.random.random_sample(1080*1920*4).astype(np.float32)
In [6]: rand2 = np.random.random_sample(1080*1920*4).astype(np.float32)
In [5]: rand1 = np.random.random(1080*1920*4).astype(np.float32)
In [6]: rand2 = np.random.random(1080*1920*4).astype(np.float32)
In [7]: image1 = rand1.reshape(1080,1920,4).swapaxes(0,1)
In [8]: image2 = rand2.reshape(1080,1920,4).swapaxes(0,1)

Expand Down
6 changes: 3 additions & 3 deletions doc/neps/nep-0019-rng-policy.rst
Expand Up @@ -143,11 +143,11 @@ We will be more strict about a select subset of methods on these BitGenerator
objects. They MUST guarantee stream-compatibility for a specified set
of methods which are chosen to make it easier to compose them to build other
distributions and which are needed to abstract over the implementation details
of the variety of core PRNG algorithms. Namely,
of the variety of BitGenerator algorithms. Namely,

* ``.bytes()``
* ``integers`` (formerly ``.random_uintegers()``)
* ``random`` (formerly ``.random_sample()``)
* ``integers()`` (formerly ``.random_integers()``)
* ``random()`` (formerly ``.random_sample()``)

The distributions class (``Generator``) SHOULD have all of the same
distribution methods as ``RandomState`` with close-enough function signatures
Expand Down
2 changes: 1 addition & 1 deletion doc/source/about.rst
Expand Up @@ -8,7 +8,7 @@ needed for scientific computing with Python. This package contains:
- sophisticated :ref:`(broadcasting) functions <ufuncs>`
- basic :ref:`linear algebra functions <routines.linalg>`
- basic :ref:`Fourier transforms <routines.fft>`
- sophisticated :ref:`random number capabilities <routines.random>`
- sophisticated :ref:`random number capabilities <numpyrandom>`
- tools for integrating Fortran code
- tools for integrating C/C++ code

Expand Down
21 changes: 15 additions & 6 deletions doc/source/conf.py
Expand Up @@ -19,11 +19,19 @@

sys.path.insert(0, os.path.abspath('../sphinxext'))

extensions = ['sphinx.ext.autodoc', 'numpydoc',
'sphinx.ext.intersphinx', 'sphinx.ext.coverage',
'sphinx.ext.doctest', 'sphinx.ext.autosummary',
'sphinx.ext.graphviz', 'sphinx.ext.ifconfig',
'matplotlib.sphinxext.plot_directive']
extensions = [
'sphinx.ext.autodoc',
'numpydoc',
'sphinx.ext.intersphinx',
'sphinx.ext.coverage',
'sphinx.ext.doctest',
'sphinx.ext.autosummary',
'sphinx.ext.graphviz',
'sphinx.ext.ifconfig',
'matplotlib.sphinxext.plot_directive',
'IPython.sphinxext.ipython_console_highlighting',
'IPython.sphinxext.ipython_directive',
]

if sphinx.__version__ >= "1.4":
extensions.append('sphinx.ext.imgmath')
Expand Down Expand Up @@ -234,7 +242,7 @@ def setup(app):
# -----------------------------------------------------------------------------

import glob
autosummary_generate = glob.glob("reference/*.rst")
autosummary_generate = True

# -----------------------------------------------------------------------------
# Coverage checker
Expand Down Expand Up @@ -355,3 +363,4 @@ def linkcode_resolve(domain, info):
else:
return "https://github.com/numpy/numpy/blob/v%s/numpy/%s%s" % (
numpy.__version__, fn, linespec)

36 changes: 36 additions & 0 deletions doc/source/reference/random/bit_generators/dsfmt.rst
@@ -0,0 +1,36 @@
Double SIMD Mersenne Twister (dSFMT)
------------------------------------

.. module:: numpy.random.dsfmt

.. currentmodule:: numpy.random.dsfmt


.. autoclass:: DSFMT
:exclude-members:

Seeding and State
=================

.. autosummary::
:toctree: generated/

~DSFMT.seed
~DSFMT.state

Parallel generation
===================
.. autosummary::
:toctree: generated/

~DSFMT.jumped

Extending
=========
.. autosummary::
:toctree: generated/

~DSFMT.cffi
~DSFMT.ctypes


29 changes: 29 additions & 0 deletions doc/source/reference/random/bit_generators/index.rst
@@ -0,0 +1,29 @@
.. _bit_generator:

Bit Generators
--------------

.. currentmodule:: numpy.random

The random values produced by :class:`~Generator`
orignate in a BitGenerator. The BitGenerators do not directly provide
random numbers and only contains methods used for seeding, getting or
setting the state, jumping or advancing the state, and for accessing
low-level wrappers for consumption by code that can efficiently
access the functions provided, e.g., `numba <https://numba.pydata.org>`_.

Stable RNGs
===========

.. toctree::
:maxdepth: 1

DSFMT <dsfmt>
MT19937 <mt19937>
PCG32 <pcg32>
PCG64 <pcg64>
Philox <philox>
ThreeFry <threefry>
Xoshiro256** <xoshiro256>
Xoshiro512** <xoshiro512>

35 changes: 35 additions & 0 deletions doc/source/reference/random/bit_generators/mt19937.rst
@@ -0,0 +1,35 @@
Mersenne Twister (MT19937)
--------------------------

.. module:: numpy.random.mt19937

.. currentmodule:: numpy.random.mt19937

.. autoclass:: MT19937
:exclude-members:

Seeding and State
=================

.. autosummary::
:toctree: generated/

~MT19937.seed
~MT19937.state

Parallel generation
===================
.. autosummary::
:toctree: generated/

~MT19937.jumped

Extending
=========
.. autosummary::
:toctree: generated/

~MT19937.cffi
~MT19937.ctypes


34 changes: 34 additions & 0 deletions doc/source/reference/random/bit_generators/pcg32.rst
@@ -0,0 +1,34 @@
Parallel Congruent Generator (32-bit, PCG32)
--------------------------------------------

.. module:: numpy.random.pcg32

.. currentmodule:: numpy.random.pcg32

.. autoclass:: PCG32
:exclude-members:

Seeding and State
=================

.. autosummary::
:toctree: generated/

~PCG32.seed
~PCG32.state

Parallel generation
===================
.. autosummary::
:toctree: generated/

~PCG32.advance
~PCG32.jumped

Extending
=========
.. autosummary::
:toctree: generated/

~PCG32.cffi
~PCG32.ctypes