randomgen 2.5.0__cp315-cp315-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- randomgen/__init__.py +103 -0
- randomgen/_pickle.py +138 -0
- randomgen/_register.py +73 -0
- randomgen/_version.py +22 -0
- randomgen/aes.cp315-win_amd64.lib +0 -0
- randomgen/aes.cp315-win_amd64.pyd +0 -0
- randomgen/aes.pyi +31 -0
- randomgen/blabla.cp315-win_amd64.lib +0 -0
- randomgen/blabla.cp315-win_amd64.pyd +0 -0
- randomgen/blabla.pyi +32 -0
- randomgen/broadcasting.cp315-win_amd64.lib +0 -0
- randomgen/broadcasting.cp315-win_amd64.pyd +0 -0
- randomgen/chacha.cp315-win_amd64.lib +0 -0
- randomgen/chacha.cp315-win_amd64.pyd +0 -0
- randomgen/chacha.pyi +30 -0
- randomgen/common.cp315-win_amd64.lib +0 -0
- randomgen/common.cp315-win_amd64.pyd +0 -0
- randomgen/common.pyi +37 -0
- randomgen/conftest.py +23 -0
- randomgen/dsfmt.cp315-win_amd64.lib +0 -0
- randomgen/dsfmt.cp315-win_amd64.pyd +0 -0
- randomgen/dsfmt.pyi +17 -0
- randomgen/efiix64.cp315-win_amd64.lib +0 -0
- randomgen/efiix64.cp315-win_amd64.pyd +0 -0
- randomgen/efiix64.pyi +17 -0
- randomgen/entropy.cp315-win_amd64.lib +0 -0
- randomgen/entropy.cp315-win_amd64.pyd +0 -0
- randomgen/entropy.pyi +9 -0
- randomgen/generator.cp315-win_amd64.lib +0 -0
- randomgen/generator.cp315-win_amd64.pyd +0 -0
- randomgen/generator.pyi +98 -0
- randomgen/hc128.cp315-win_amd64.lib +0 -0
- randomgen/hc128.cp315-win_amd64.pyd +0 -0
- randomgen/hc128.pyi +23 -0
- randomgen/jsf.cp315-win_amd64.lib +0 -0
- randomgen/jsf.cp315-win_amd64.pyd +0 -0
- randomgen/jsf.pyi +22 -0
- randomgen/lxm.cp315-win_amd64.lib +0 -0
- randomgen/lxm.cp315-win_amd64.pyd +0 -0
- randomgen/lxm.pyi +23 -0
- randomgen/mt19937.cp315-win_amd64.lib +0 -0
- randomgen/mt19937.cp315-win_amd64.pyd +0 -0
- randomgen/mt19937.pyi +24 -0
- randomgen/mt64.cp315-win_amd64.lib +0 -0
- randomgen/mt64.cp315-win_amd64.pyd +0 -0
- randomgen/mt64.pyi +17 -0
- randomgen/mwcx.cp315-win_amd64.lib +0 -0
- randomgen/mwcx.cp315-win_amd64.pyd +0 -0
- randomgen/mwcx.pyi +25 -0
- randomgen/pcg32.cp315-win_amd64.lib +0 -0
- randomgen/pcg32.cp315-win_amd64.pyd +0 -0
- randomgen/pcg32.pyi +22 -0
- randomgen/pcg64.cp315-win_amd64.lib +0 -0
- randomgen/pcg64.cp315-win_amd64.pyd +0 -0
- randomgen/pcg64.pyi +81 -0
- randomgen/philox.cp315-win_amd64.lib +0 -0
- randomgen/philox.cp315-win_amd64.pyd +0 -0
- randomgen/philox.pyi +33 -0
- randomgen/rdrand.cp315-win_amd64.lib +0 -0
- randomgen/rdrand.cp315-win_amd64.pyd +0 -0
- randomgen/rdrand.pyi +32 -0
- randomgen/romu.cp315-win_amd64.lib +0 -0
- randomgen/romu.cp315-win_amd64.pyd +0 -0
- randomgen/romu.pyi +18 -0
- randomgen/seed_sequence.py +13 -0
- randomgen/sfc.cp315-win_amd64.lib +0 -0
- randomgen/sfc.cp315-win_amd64.pyd +0 -0
- randomgen/sfc.pyi +25 -0
- randomgen/sfmt.cp315-win_amd64.lib +0 -0
- randomgen/sfmt.cp315-win_amd64.pyd +0 -0
- randomgen/sfmt.pyi +18 -0
- randomgen/speck128.cp315-win_amd64.lib +0 -0
- randomgen/speck128.cp315-win_amd64.pyd +0 -0
- randomgen/speck128.pyi +35 -0
- randomgen/squares.cp315-win_amd64.lib +0 -0
- randomgen/squares.cp315-win_amd64.pyd +0 -0
- randomgen/squares.pyi +34 -0
- randomgen/tests/__init__.py +0 -0
- randomgen/tests/_shims.cp315-win_amd64.lib +0 -0
- randomgen/tests/_shims.cp315-win_amd64.pyd +0 -0
- randomgen/tests/_shims.pyi +20 -0
- randomgen/tests/_utility.py +17 -0
- randomgen/tests/data/__init__.py +0 -0
- randomgen/tests/data/_write_hashes.py +29 -0
- randomgen/tests/data/aesctr-testset-1.csv +1001 -0
- randomgen/tests/data/aesctr-testset-2.csv +1001 -0
- randomgen/tests/data/blabla-testset-1-avx2.csv +1001 -0
- randomgen/tests/data/blabla-testset-2.csv +1001 -0
- randomgen/tests/data/chacha-testset-1.csv +1001 -0
- randomgen/tests/data/chacha-testset-2.csv +1001 -0
- randomgen/tests/data/compute_hashes.py +291 -0
- randomgen/tests/data/ctypes_testing.c +5 -0
- randomgen/tests/data/dSFMT-testset-1.csv +1001 -0
- randomgen/tests/data/dSFMT-testset-2.csv +1001 -0
- randomgen/tests/data/efiix64-testset-1.csv +1001 -0
- randomgen/tests/data/efiix64-testset-2.csv +1001 -0
- randomgen/tests/data/hc-128-testset-1.csv +1001 -0
- randomgen/tests/data/hc-128-testset-2.csv +1001 -0
- randomgen/tests/data/jsf32-testset-1.csv +1001 -0
- randomgen/tests/data/jsf32-testset-2.csv +1001 -0
- randomgen/tests/data/jsf64-testset-1.csv +1001 -0
- randomgen/tests/data/jsf64-testset-2.csv +1001 -0
- randomgen/tests/data/lxm-testset-1.csv +1001 -0
- randomgen/tests/data/lxm-testset-2.csv +1001 -0
- randomgen/tests/data/mt19937-testset-1.csv +1001 -0
- randomgen/tests/data/mt19937-testset-2.csv +1001 -0
- randomgen/tests/data/mt64-testset-1.csv +1001 -0
- randomgen/tests/data/mt64-testset-2.csv +1001 -0
- randomgen/tests/data/mwc128x-testset-1.csv +1001 -0
- randomgen/tests/data/mwc128x-testset-2.csv +1001 -0
- randomgen/tests/data/mwc128x32-testset-1.csv +1001 -0
- randomgen/tests/data/mwc128x32-testset-2.csv +1001 -0
- randomgen/tests/data/mwc192x-testset-1.csv +1001 -0
- randomgen/tests/data/mwc192x-testset-2.csv +1001 -0
- randomgen/tests/data/mwc64x32-testset-1.csv +1001 -0
- randomgen/tests/data/mwc64x32-testset-2.csv +1001 -0
- randomgen/tests/data/pcg32-testset-1.csv +1001 -0
- randomgen/tests/data/pcg32-testset-2.csv +1001 -0
- randomgen/tests/data/pcg64-cm-dxsm-testset-1.csv +1001 -0
- randomgen/tests/data/pcg64-cm-dxsm-testset-2.csv +1001 -0
- randomgen/tests/data/pcg64-cm-xsl_rr-testset-1.csv +1000 -0
- randomgen/tests/data/pcg64-cm-xsl_rr-testset-2.csv +1001 -0
- randomgen/tests/data/pcg64-dxsm-testset-1.csv +1001 -0
- randomgen/tests/data/pcg64-dxsm-testset-2.csv +1001 -0
- randomgen/tests/data/pcg64-testset-1.csv +1001 -0
- randomgen/tests/data/pcg64-testset-2.csv +1001 -0
- randomgen/tests/data/pcg64-xsl_rr-testset-1.csv +1001 -0
- randomgen/tests/data/pcg64-xsl_rr-testset-2.csv +1001 -0
- randomgen/tests/data/philox-testset-1.csv +1001 -0
- randomgen/tests/data/philox-testset-2.csv +1001 -0
- randomgen/tests/data/philox4x32-testset-1.csv +1001 -0
- randomgen/tests/data/philox4x32-testset-2.csv +1001 -0
- randomgen/tests/data/romuquad-testset-1.csv +1001 -0
- randomgen/tests/data/romuquad-testset-2.csv +1001 -0
- randomgen/tests/data/romutrio-testset-1.csv +1001 -0
- randomgen/tests/data/romutrio-testset-2.csv +1001 -0
- randomgen/tests/data/sfc-testset-1.csv +1001 -0
- randomgen/tests/data/sfc-testset-2.csv +1001 -0
- randomgen/tests/data/sfmt-testset-1.csv +1001 -0
- randomgen/tests/data/sfmt-testset-2.csv +1001 -0
- randomgen/tests/data/speck-128-testset-1.csv +1001 -0
- randomgen/tests/data/speck-128-testset-2.csv +1001 -0
- randomgen/tests/data/squares-32-testset-1.csv +1001 -0
- randomgen/tests/data/squares-32-testset-2.csv +1001 -0
- randomgen/tests/data/squares-testset-1.csv +1001 -0
- randomgen/tests/data/squares-testset-2.csv +1001 -0
- randomgen/tests/data/stability_results.py +1729 -0
- randomgen/tests/data/stable_hashes.py +4023 -0
- randomgen/tests/data/threefry-testset-1.csv +1001 -0
- randomgen/tests/data/threefry-testset-2.csv +1001 -0
- randomgen/tests/data/threefry32-testset-1.csv +1001 -0
- randomgen/tests/data/threefry32-testset-2.csv +1001 -0
- randomgen/tests/data/tyche-openrand-testset-1.csv +1001 -0
- randomgen/tests/data/tyche-openrand-testset-2.csv +1001 -0
- randomgen/tests/data/tyche-testset-1.csv +1001 -0
- randomgen/tests/data/tyche-testset-2.csv +1001 -0
- randomgen/tests/data/xoroshiro128-testset-1.csv +1001 -0
- randomgen/tests/data/xoroshiro128-testset-2.csv +1001 -0
- randomgen/tests/data/xoroshiro128plusplus-testset-1.csv +1001 -0
- randomgen/tests/data/xoroshiro128plusplus-testset-2.csv +1001 -0
- randomgen/tests/data/xorshift1024-testset-1.csv +1001 -0
- randomgen/tests/data/xorshift1024-testset-2.csv +1001 -0
- randomgen/tests/data/xoshiro256-testset-1.csv +1001 -0
- randomgen/tests/data/xoshiro256-testset-2.csv +1001 -0
- randomgen/tests/data/xoshiro512-testset-1.csv +1001 -0
- randomgen/tests/data/xoshiro512-testset-2.csv +1001 -0
- randomgen/tests/test_bit_generators_against_numpy.py +102 -0
- randomgen/tests/test_broadcasting.py +426 -0
- randomgen/tests/test_common.py +231 -0
- randomgen/tests/test_direct.py +3098 -0
- randomgen/tests/test_extended_generator.py +1040 -0
- randomgen/tests/test_generator_mt19937.py +78 -0
- randomgen/tests/test_imports.py +50 -0
- randomgen/tests/test_lcg128mix_pcg64dxsm.py +296 -0
- randomgen/tests/test_multithreading.py +264 -0
- randomgen/tests/test_sfc.py +83 -0
- randomgen/tests/test_smoke.py +1397 -0
- randomgen/tests/test_stability.py +265 -0
- randomgen/tests/test_wrapper.py +201 -0
- randomgen/tests/test_wrapper_numba.py +241 -0
- randomgen/threefry.cp315-win_amd64.lib +0 -0
- randomgen/threefry.cp315-win_amd64.pyd +0 -0
- randomgen/threefry.pyi +32 -0
- randomgen/tyche.cp315-win_amd64.lib +0 -0
- randomgen/tyche.cp315-win_amd64.pyd +0 -0
- randomgen/tyche.pyi +23 -0
- randomgen/typing.py +10 -0
- randomgen/wrapper.cp315-win_amd64.lib +0 -0
- randomgen/wrapper.cp315-win_amd64.pyd +0 -0
- randomgen/wrapper.pyi +47 -0
- randomgen/xoroshiro128.cp315-win_amd64.lib +0 -0
- randomgen/xoroshiro128.cp315-win_amd64.pyd +0 -0
- randomgen/xoroshiro128.pyi +18 -0
- randomgen/xorshift1024.cp315-win_amd64.lib +0 -0
- randomgen/xorshift1024.cp315-win_amd64.pyd +0 -0
- randomgen/xorshift1024.pyi +18 -0
- randomgen/xoshiro256.cp315-win_amd64.lib +0 -0
- randomgen/xoshiro256.cp315-win_amd64.pyd +0 -0
- randomgen/xoshiro256.pyi +13 -0
- randomgen/xoshiro512.cp315-win_amd64.lib +0 -0
- randomgen/xoshiro512.cp315-win_amd64.pyd +0 -0
- randomgen/xoshiro512.pyi +13 -0
- randomgen-2.5.0.dist-info/METADATA +253 -0
- randomgen-2.5.0.dist-info/RECORD +222 -0
- randomgen-2.5.0.dist-info/WHEEL +4 -0
- randomgen-2.5.0.dist-info/licenses/LICENSE.md +108 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/aesctr/LICENSE.md +232 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/chacha/LICENSE.md +16 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/common/LICENSE.md +29 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/distributions/LICENSE.md +61 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/dsfmt/LICENSE.md +34 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/entropy/LICENSE.md +25 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/mt19937/LICENSE.md +61 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/pcg32/LICENSE.md +22 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/pcg64/LICENSE.md +22 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/philox/LICENSE.md +31 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/splitmix64/LICENSE.md +9 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/threefry/LICENSE.md +31 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/xoroshiro128/LICENSE.md +9 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/xorshift1024/LICENSE.md +9 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/xoshiro256/LICENSE.md +9 -0
- randomgen-2.5.0.dist-info/licenses/randomgen/src/xoshiro512/LICENSE.md +9 -0
randomgen/__init__.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
from randomgen._register import BitGenerators
|
|
7
|
+
from randomgen.aes import AESCounter
|
|
8
|
+
from randomgen.blabla import BlaBla
|
|
9
|
+
from randomgen.chacha import ChaCha
|
|
10
|
+
from randomgen.dsfmt import DSFMT
|
|
11
|
+
from randomgen.efiix64 import EFIIX64
|
|
12
|
+
from randomgen.entropy import random_entropy
|
|
13
|
+
from randomgen.generator import ExtendedGenerator
|
|
14
|
+
from randomgen.hc128 import HC128
|
|
15
|
+
from randomgen.jsf import JSF
|
|
16
|
+
from randomgen.lxm import LXM
|
|
17
|
+
from randomgen.mt64 import MT64
|
|
18
|
+
from randomgen.mt19937 import MT19937
|
|
19
|
+
from randomgen.mwcx import MWC64X32, MWC128X, MWC128X32, MWC192X
|
|
20
|
+
from randomgen.pcg32 import PCG32
|
|
21
|
+
from randomgen.pcg64 import PCG64, PCG64DXSM, LCG128Mix
|
|
22
|
+
from randomgen.philox import Philox
|
|
23
|
+
from randomgen.rdrand import RDRAND
|
|
24
|
+
from randomgen.romu import Romu
|
|
25
|
+
from randomgen.seed_sequence import SeedlessSeedSequence, SeedSequence
|
|
26
|
+
from randomgen.sfc import SFC64
|
|
27
|
+
from randomgen.sfmt import SFMT
|
|
28
|
+
from randomgen.speck128 import SPECK128
|
|
29
|
+
from randomgen.squares import Squares
|
|
30
|
+
from randomgen.threefry import ThreeFry
|
|
31
|
+
from randomgen.tyche import Tyche
|
|
32
|
+
from randomgen.wrapper import UserBitGenerator
|
|
33
|
+
from randomgen.xoroshiro128 import Xoroshiro128
|
|
34
|
+
from randomgen.xorshift1024 import Xorshift1024
|
|
35
|
+
from randomgen.xoshiro256 import Xoshiro256
|
|
36
|
+
from randomgen.xoshiro512 import Xoshiro512
|
|
37
|
+
|
|
38
|
+
from ._version import version as __version__, version_tuple as __version_info__
|
|
39
|
+
|
|
40
|
+
PKG = os.path.join(os.path.dirname(__file__))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
__all__ = [
|
|
44
|
+
"DSFMT",
|
|
45
|
+
"EFIIX64",
|
|
46
|
+
"HC128",
|
|
47
|
+
"JSF",
|
|
48
|
+
"LXM",
|
|
49
|
+
"MT64",
|
|
50
|
+
"MT19937",
|
|
51
|
+
"MWC64X32",
|
|
52
|
+
"MWC128X",
|
|
53
|
+
"MWC128X32",
|
|
54
|
+
"MWC192X",
|
|
55
|
+
"PCG32",
|
|
56
|
+
"PCG64",
|
|
57
|
+
"PCG64DXSM",
|
|
58
|
+
"RDRAND",
|
|
59
|
+
"SFC64",
|
|
60
|
+
"SFMT",
|
|
61
|
+
"SPECK128",
|
|
62
|
+
"AESCounter",
|
|
63
|
+
"BitGenerators",
|
|
64
|
+
"BlaBla",
|
|
65
|
+
"ChaCha",
|
|
66
|
+
"ExtendedGenerator",
|
|
67
|
+
"LCG128Mix",
|
|
68
|
+
"Philox",
|
|
69
|
+
"Romu",
|
|
70
|
+
"SeedSequence",
|
|
71
|
+
"SeedlessSeedSequence",
|
|
72
|
+
"Squares",
|
|
73
|
+
"ThreeFry",
|
|
74
|
+
"Tyche",
|
|
75
|
+
"UserBitGenerator",
|
|
76
|
+
"Xoroshiro128",
|
|
77
|
+
"Xorshift1024",
|
|
78
|
+
"Xoshiro256",
|
|
79
|
+
"Xoshiro512",
|
|
80
|
+
"__version__",
|
|
81
|
+
"__version_info__",
|
|
82
|
+
"random_entropy",
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test(extra_args: str | list[str] | None = None, exit=True) -> None: # noqa: PT028
|
|
87
|
+
try:
|
|
88
|
+
import pytest # noqa: PLC0415
|
|
89
|
+
except ImportError as err:
|
|
90
|
+
raise ImportError("Need pytest>=5.0.1 to run tests") from err
|
|
91
|
+
cmd = ["--skip-slow"]
|
|
92
|
+
if extra_args:
|
|
93
|
+
if not isinstance(extra_args, list):
|
|
94
|
+
extra_args = [extra_args]
|
|
95
|
+
assert isinstance(extra_args, list)
|
|
96
|
+
cmd = extra_args
|
|
97
|
+
cmd += [PKG]
|
|
98
|
+
joined = " ".join(cmd)
|
|
99
|
+
print(f"running: pytest {joined}")
|
|
100
|
+
result = pytest.main(cmd)
|
|
101
|
+
if exit:
|
|
102
|
+
sys.exit(result)
|
|
103
|
+
return result
|
randomgen/_pickle.py
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import warnings
|
|
4
|
+
|
|
5
|
+
from randomgen.aes import AESCounter
|
|
6
|
+
from randomgen.blabla import BlaBla
|
|
7
|
+
from randomgen.chacha import ChaCha
|
|
8
|
+
from randomgen.common import BitGenerator
|
|
9
|
+
from randomgen.dsfmt import DSFMT
|
|
10
|
+
from randomgen.efiix64 import EFIIX64
|
|
11
|
+
from randomgen.generator import ExtendedGenerator
|
|
12
|
+
from randomgen.hc128 import HC128
|
|
13
|
+
from randomgen.jsf import JSF
|
|
14
|
+
from randomgen.lxm import LXM
|
|
15
|
+
from randomgen.mt64 import MT64
|
|
16
|
+
from randomgen.mt19937 import MT19937
|
|
17
|
+
from randomgen.mwcx import MWC64X32, MWC128X, MWC128X32, MWC192X
|
|
18
|
+
from randomgen.pcg32 import PCG32
|
|
19
|
+
from randomgen.pcg64 import PCG64, PCG64DXSM, LCG128Mix
|
|
20
|
+
from randomgen.philox import Philox
|
|
21
|
+
from randomgen.rdrand import RDRAND
|
|
22
|
+
from randomgen.romu import Romu
|
|
23
|
+
from randomgen.sfc import SFC64
|
|
24
|
+
from randomgen.sfmt import SFMT
|
|
25
|
+
from randomgen.speck128 import SPECK128
|
|
26
|
+
from randomgen.squares import Squares
|
|
27
|
+
from randomgen.threefry import ThreeFry
|
|
28
|
+
from randomgen.tyche import Tyche
|
|
29
|
+
from randomgen.xoroshiro128 import Xoroshiro128
|
|
30
|
+
from randomgen.xorshift1024 import Xorshift1024
|
|
31
|
+
from randomgen.xoshiro256 import Xoshiro256
|
|
32
|
+
from randomgen.xoshiro512 import Xoshiro512
|
|
33
|
+
|
|
34
|
+
BitGenerators: dict[str, type[BitGenerator]] = {
|
|
35
|
+
"AESCounter": AESCounter,
|
|
36
|
+
"BlaBla": BlaBla,
|
|
37
|
+
"ChaCha": ChaCha,
|
|
38
|
+
"DSFMT": DSFMT,
|
|
39
|
+
"EFIIX64": EFIIX64,
|
|
40
|
+
"HC128": HC128,
|
|
41
|
+
"JSF": JSF,
|
|
42
|
+
"LCG128Mix": LCG128Mix,
|
|
43
|
+
"LXM": LXM,
|
|
44
|
+
"MT19937": MT19937,
|
|
45
|
+
"MT64": MT64,
|
|
46
|
+
"MWC64X32": MWC64X32,
|
|
47
|
+
"MWC128X": MWC128X,
|
|
48
|
+
"MWC128X32": MWC128X32,
|
|
49
|
+
"MWC192X": MWC192X,
|
|
50
|
+
"PCG32": PCG32,
|
|
51
|
+
"PCG64": PCG64,
|
|
52
|
+
"PCG64DXSM": PCG64DXSM,
|
|
53
|
+
"Philox": Philox,
|
|
54
|
+
"RDRAND": RDRAND,
|
|
55
|
+
"Romu": Romu,
|
|
56
|
+
"SFC64": SFC64,
|
|
57
|
+
"SFMT": SFMT,
|
|
58
|
+
"SPECK128": SPECK128,
|
|
59
|
+
"Squares": Squares,
|
|
60
|
+
"ThreeFry": ThreeFry,
|
|
61
|
+
"Tyche": Tyche,
|
|
62
|
+
"Xoroshiro128": Xoroshiro128,
|
|
63
|
+
"Xorshift1024": Xorshift1024,
|
|
64
|
+
"Xoshiro256": Xoshiro256,
|
|
65
|
+
"Xoshiro512": Xoshiro512,
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Assign the fully qualified name for future proofness
|
|
69
|
+
for value in list(BitGenerators.values()):
|
|
70
|
+
BitGenerators[f"{value.__module__}.{value.__name__}"] = value
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _get_bitgenerator(bit_generator_name: str) -> type[BitGenerator]:
|
|
74
|
+
"""
|
|
75
|
+
Bit generator look-up with user-friendly errors
|
|
76
|
+
"""
|
|
77
|
+
if bit_generator_name in BitGenerators:
|
|
78
|
+
bit_generator = BitGenerators[bit_generator_name]
|
|
79
|
+
else:
|
|
80
|
+
raise ValueError(
|
|
81
|
+
str(bit_generator_name) + " is not a known BitGenerator module.",
|
|
82
|
+
)
|
|
83
|
+
return bit_generator
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _decode(name: str | bytes) -> str:
|
|
87
|
+
if isinstance(name, str):
|
|
88
|
+
return name
|
|
89
|
+
assert isinstance(name, bytes)
|
|
90
|
+
return name.decode("ascii")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def __extended_generator_ctor(
|
|
94
|
+
bit_generator_name: str | bytes = "MT19937",
|
|
95
|
+
) -> ExtendedGenerator:
|
|
96
|
+
"""
|
|
97
|
+
Pickling helper function that returns a Generator object
|
|
98
|
+
|
|
99
|
+
Parameters
|
|
100
|
+
----------
|
|
101
|
+
bit_generator_name: str
|
|
102
|
+
String containing the core BitGenerator
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
rg: Generator
|
|
107
|
+
Generator using the named core BitGenerator
|
|
108
|
+
"""
|
|
109
|
+
bit_generator_name = _decode(bit_generator_name)
|
|
110
|
+
assert isinstance(bit_generator_name, str)
|
|
111
|
+
bit_generator = _get_bitgenerator(bit_generator_name)
|
|
112
|
+
with warnings.catch_warnings():
|
|
113
|
+
warnings.filterwarnings("ignore", category=FutureWarning)
|
|
114
|
+
bit_gen = bit_generator()
|
|
115
|
+
return ExtendedGenerator(bit_gen)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def __bit_generator_ctor(bit_generator_name: str | bytes = "MT19937") -> BitGenerator:
|
|
119
|
+
"""
|
|
120
|
+
Pickling helper function that returns a bit generator object
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
bit_generator_name: str
|
|
125
|
+
String containing the name of the bit generator
|
|
126
|
+
|
|
127
|
+
Returns
|
|
128
|
+
-------
|
|
129
|
+
bit_generator: BitGenerator
|
|
130
|
+
Bit generator instance
|
|
131
|
+
"""
|
|
132
|
+
bit_generator_name = _decode(bit_generator_name)
|
|
133
|
+
assert isinstance(bit_generator_name, str)
|
|
134
|
+
bit_generator = _get_bitgenerator(bit_generator_name)
|
|
135
|
+
with warnings.catch_warnings():
|
|
136
|
+
warnings.filterwarnings("ignore", category=FutureWarning)
|
|
137
|
+
bit_gen = bit_generator()
|
|
138
|
+
return bit_gen
|
randomgen/_register.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from numpy.random._pickle import BitGenerators
|
|
2
|
+
|
|
3
|
+
from randomgen.aes import AESCounter
|
|
4
|
+
from randomgen.blabla import BlaBla
|
|
5
|
+
from randomgen.chacha import ChaCha
|
|
6
|
+
from randomgen.dsfmt import DSFMT
|
|
7
|
+
from randomgen.efiix64 import EFIIX64
|
|
8
|
+
from randomgen.hc128 import HC128
|
|
9
|
+
from randomgen.jsf import JSF
|
|
10
|
+
from randomgen.lxm import LXM
|
|
11
|
+
from randomgen.mt64 import MT64
|
|
12
|
+
from randomgen.mt19937 import MT19937
|
|
13
|
+
from randomgen.mwcx import MWC64X32, MWC128X, MWC128X32, MWC192X
|
|
14
|
+
from randomgen.pcg32 import PCG32
|
|
15
|
+
from randomgen.pcg64 import PCG64, PCG64DXSM, LCG128Mix
|
|
16
|
+
from randomgen.philox import Philox
|
|
17
|
+
from randomgen.rdrand import RDRAND
|
|
18
|
+
from randomgen.romu import Romu
|
|
19
|
+
from randomgen.sfc import SFC64
|
|
20
|
+
from randomgen.sfmt import SFMT
|
|
21
|
+
from randomgen.speck128 import SPECK128
|
|
22
|
+
from randomgen.squares import Squares
|
|
23
|
+
from randomgen.threefry import ThreeFry
|
|
24
|
+
from randomgen.tyche import Tyche
|
|
25
|
+
from randomgen.wrapper import UserBitGenerator
|
|
26
|
+
from randomgen.xoroshiro128 import Xoroshiro128
|
|
27
|
+
from randomgen.xorshift1024 import Xorshift1024
|
|
28
|
+
from randomgen.xoshiro256 import Xoshiro256
|
|
29
|
+
from randomgen.xoshiro512 import Xoshiro512
|
|
30
|
+
|
|
31
|
+
bit_generators = [
|
|
32
|
+
AESCounter,
|
|
33
|
+
BlaBla,
|
|
34
|
+
ChaCha,
|
|
35
|
+
DSFMT,
|
|
36
|
+
EFIIX64,
|
|
37
|
+
HC128,
|
|
38
|
+
JSF,
|
|
39
|
+
LXM,
|
|
40
|
+
MT19937,
|
|
41
|
+
MT64,
|
|
42
|
+
MWC64X32,
|
|
43
|
+
MWC128X,
|
|
44
|
+
MWC128X32,
|
|
45
|
+
MWC192X,
|
|
46
|
+
PCG32,
|
|
47
|
+
PCG64,
|
|
48
|
+
PCG64DXSM,
|
|
49
|
+
LCG128Mix,
|
|
50
|
+
Philox,
|
|
51
|
+
RDRAND,
|
|
52
|
+
Romu,
|
|
53
|
+
SFC64,
|
|
54
|
+
SFMT,
|
|
55
|
+
SPECK128,
|
|
56
|
+
Squares,
|
|
57
|
+
ThreeFry,
|
|
58
|
+
Tyche,
|
|
59
|
+
UserBitGenerator,
|
|
60
|
+
Xoroshiro128,
|
|
61
|
+
Xorshift1024,
|
|
62
|
+
Xoshiro256,
|
|
63
|
+
Xoshiro512,
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
for bitgen in bit_generators:
|
|
67
|
+
key = f"{bitgen.__name__}"
|
|
68
|
+
if key not in BitGenerators:
|
|
69
|
+
BitGenerators[key] = bitgen
|
|
70
|
+
full_key = f"{bitgen.__module__}.{bitgen.__name__}"
|
|
71
|
+
BitGenerators[full_key] = bitgen
|
|
72
|
+
|
|
73
|
+
__all__ = ["BitGenerators"]
|
randomgen/_version.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
|
5
|
+
|
|
6
|
+
TYPE_CHECKING = False
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
11
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
12
|
+
else:
|
|
13
|
+
VERSION_TUPLE = object
|
|
14
|
+
|
|
15
|
+
version: str
|
|
16
|
+
__version__: str
|
|
17
|
+
__version_tuple__: VERSION_TUPLE
|
|
18
|
+
version_tuple: VERSION_TUPLE
|
|
19
|
+
|
|
20
|
+
__version__ = version = '2.5.0'
|
|
21
|
+
__version_tuple__ = version_tuple = (2, 5, 0)
|
|
22
|
+
|
|
Binary file
|
|
Binary file
|
randomgen/aes.pyi
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
|
|
3
|
+
from numpy import ndarray
|
|
4
|
+
|
|
5
|
+
from randomgen.common import BitGenerator
|
|
6
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
7
|
+
|
|
8
|
+
class AESCounter(BitGenerator):
|
|
9
|
+
def __init__(
|
|
10
|
+
self,
|
|
11
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
12
|
+
*,
|
|
13
|
+
counter: int | Sequence[int] | None = ...,
|
|
14
|
+
key: int | Sequence[int] | None = ...,
|
|
15
|
+
) -> None: ...
|
|
16
|
+
@property
|
|
17
|
+
def use_aesni(self) -> bool: ...
|
|
18
|
+
@use_aesni.setter
|
|
19
|
+
def use_aesni(self, value: bool) -> None: ...
|
|
20
|
+
def seed(
|
|
21
|
+
self,
|
|
22
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
23
|
+
counter: int | Sequence[int] | None = ...,
|
|
24
|
+
key: int | Sequence[int] | None = ...,
|
|
25
|
+
) -> None: ...
|
|
26
|
+
@property
|
|
27
|
+
def state(self) -> dict[str, str | dict[str, int | ndarray] | int]: ...
|
|
28
|
+
@state.setter
|
|
29
|
+
def state(self, value: dict[str, str | dict[str, int | ndarray] | int]) -> None: ...
|
|
30
|
+
def jumped(self, iter: int = ...) -> AESCounter: ...
|
|
31
|
+
def advance(self, delta: int) -> AESCounter: ...
|
|
Binary file
|
|
Binary file
|
randomgen/blabla.pyi
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
|
|
3
|
+
from numpy import ndarray
|
|
4
|
+
|
|
5
|
+
from randomgen.common import BitGenerator
|
|
6
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
7
|
+
|
|
8
|
+
class BlaBla(BitGenerator):
|
|
9
|
+
def __init__(
|
|
10
|
+
self,
|
|
11
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
12
|
+
*,
|
|
13
|
+
counter: int | Sequence[int] | None = ...,
|
|
14
|
+
key: int | Sequence[int] | None = ...,
|
|
15
|
+
rounds: int = ...,
|
|
16
|
+
) -> None: ...
|
|
17
|
+
@property
|
|
18
|
+
def use_avx2(self) -> bool: ...
|
|
19
|
+
@use_avx2.setter
|
|
20
|
+
def use_avx2(self, value: bool) -> None: ...
|
|
21
|
+
def seed(
|
|
22
|
+
self,
|
|
23
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
24
|
+
counter: int | Sequence[int] | None = ...,
|
|
25
|
+
key: int | Sequence[int] | None = ...,
|
|
26
|
+
) -> None: ...
|
|
27
|
+
@property
|
|
28
|
+
def state(self) -> dict[str, str | dict[str, ndarray | int]]: ...
|
|
29
|
+
@state.setter
|
|
30
|
+
def state(self, value: dict[str, str | dict[str, ndarray | int]]) -> None: ...
|
|
31
|
+
def advance(self, delta: int) -> None: ...
|
|
32
|
+
def jumped(self, iter: int = ...) -> BlaBla: ...
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
randomgen/chacha.pyi
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
|
|
3
|
+
from numpy import ndarray
|
|
4
|
+
|
|
5
|
+
from randomgen.common import BitGenerator
|
|
6
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
7
|
+
|
|
8
|
+
class ChaCha(BitGenerator):
|
|
9
|
+
def __init__(
|
|
10
|
+
self,
|
|
11
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
12
|
+
*,
|
|
13
|
+
counter: int | Sequence[int] | None = ...,
|
|
14
|
+
key: int | Sequence[int] | None = ...,
|
|
15
|
+
rounds: int = ...,
|
|
16
|
+
) -> None: ...
|
|
17
|
+
@property
|
|
18
|
+
def use_simd(self) -> bool: ...
|
|
19
|
+
@use_simd.setter
|
|
20
|
+
def use_simd(self, value: bool) -> None: ...
|
|
21
|
+
def seed(
|
|
22
|
+
self,
|
|
23
|
+
seed: IntegerSequenceSeed | None = ...,
|
|
24
|
+
counter: int | Sequence[int] | None = ...,
|
|
25
|
+
key: int | Sequence[int] | None = ...,
|
|
26
|
+
) -> None: ...
|
|
27
|
+
@property
|
|
28
|
+
def state(self) -> dict[str, str | dict[str, ndarray | int]]: ...
|
|
29
|
+
@state.setter
|
|
30
|
+
def state(self, value: dict[str, str | dict[str, ndarray | int]]) -> None: ...
|
|
Binary file
|
|
Binary file
|
randomgen/common.pyi
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from typing import Any, NamedTuple
|
|
2
|
+
|
|
3
|
+
from numpy import ndarray
|
|
4
|
+
|
|
5
|
+
from randomgen.seed_sequence import SeedSequence
|
|
6
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
7
|
+
|
|
8
|
+
class Interface(NamedTuple):
|
|
9
|
+
state_address: int
|
|
10
|
+
state: int
|
|
11
|
+
next_uint64: int
|
|
12
|
+
next_uint32: int
|
|
13
|
+
next_double: int
|
|
14
|
+
bit_generator: int
|
|
15
|
+
|
|
16
|
+
class BitGenerator:
|
|
17
|
+
seed_seq: SeedSequence
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
seed: IntegerSequenceSeed | None,
|
|
21
|
+
*,
|
|
22
|
+
numpy_seed: bool = ...,
|
|
23
|
+
) -> None: ...
|
|
24
|
+
@property
|
|
25
|
+
def state(self) -> dict[str, Any]: ...
|
|
26
|
+
@state.setter
|
|
27
|
+
def state(self, value: dict[str, Any]) -> None: ...
|
|
28
|
+
def random_raw(
|
|
29
|
+
self,
|
|
30
|
+
size: int | None = ...,
|
|
31
|
+
output: bool = ...,
|
|
32
|
+
) -> int | ndarray | None: ...
|
|
33
|
+
def _benchmark(self, cnt: int, method: str = ...) -> None: ...
|
|
34
|
+
@property
|
|
35
|
+
def ctypes(self) -> Any: ...
|
|
36
|
+
@property
|
|
37
|
+
def cffi(self) -> Any: ...
|
randomgen/conftest.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def pytest_configure(config):
|
|
5
|
+
# Minimal config to simplify running tests from lm.test()
|
|
6
|
+
config.addinivalue_line("markers", "slow: mark a test as slow")
|
|
7
|
+
# Used by pytest-run-parallel, registered here for runs without it
|
|
8
|
+
config.addinivalue_line(
|
|
9
|
+
"markers", "thread_unsafe: mark a test as unsafe to run in several threads"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def pytest_addoption(parser):
|
|
14
|
+
parser.addoption("--skip-slow", action="store_true", help="skip slow tests")
|
|
15
|
+
parser.addoption("--only-slow", action="store_true", help="run only slow tests")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def pytest_runtest_setup(item):
|
|
19
|
+
if "slow" in item.keywords and item.config.getoption("--skip-slow"):
|
|
20
|
+
pytest.skip("skipping due to --skip-slow")
|
|
21
|
+
|
|
22
|
+
if "slow" not in item.keywords and item.config.getoption("--only-slow"):
|
|
23
|
+
pytest.skip("skipping due to --only-slow")
|
|
Binary file
|
|
Binary file
|
randomgen/dsfmt.pyi
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from typing import TypeAlias
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
from randomgen.common import BitGenerator
|
|
6
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
7
|
+
|
|
8
|
+
DSFMTState: TypeAlias = dict[str, str | int | np.ndarray | dict[str, int | np.ndarray]]
|
|
9
|
+
|
|
10
|
+
class DSFMT(BitGenerator):
|
|
11
|
+
def __init__(self, seed: IntegerSequenceSeed | None = ...) -> None: ...
|
|
12
|
+
def seed(self, seed: IntegerSequenceSeed | None = ...) -> None: ...
|
|
13
|
+
def jumped(self, iter: int = ...) -> DSFMT: ...
|
|
14
|
+
@property
|
|
15
|
+
def state(self) -> DSFMTState: ...
|
|
16
|
+
@state.setter
|
|
17
|
+
def state(self, value: DSFMTState) -> None: ...
|
|
Binary file
|
|
Binary file
|
randomgen/efiix64.pyi
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from randomgen.common import BitGenerator
|
|
4
|
+
from randomgen.typing import IntegerSequenceSeed
|
|
5
|
+
|
|
6
|
+
class EFIIX64(BitGenerator):
|
|
7
|
+
def __init__(self, seed: IntegerSequenceSeed | None = ...) -> None: ...
|
|
8
|
+
def seed(self, seed: IntegerSequenceSeed | None = ...) -> None: ...
|
|
9
|
+
@property
|
|
10
|
+
def state(
|
|
11
|
+
self,
|
|
12
|
+
) -> dict[str, str | int | dict[str, int | np.ndarray]]: ...
|
|
13
|
+
@state.setter
|
|
14
|
+
def state(
|
|
15
|
+
self,
|
|
16
|
+
value: dict[str, str | int | dict[str, int | np.ndarray]],
|
|
17
|
+
) -> None: ...
|
|
Binary file
|
|
Binary file
|
randomgen/entropy.pyi
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
def seed_by_array(seed: int | np.ndarray, n: int) -> np.ndarray: ...
|
|
6
|
+
def random_entropy(
|
|
7
|
+
size: int | tuple[int, ...] | None = ...,
|
|
8
|
+
source: Literal["system", "fallback", "auto"] = ...,
|
|
9
|
+
) -> int | np.ndarray: ...
|
|
Binary file
|
|
Binary file
|
randomgen/generator.pyi
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from typing import Any, Literal, overload
|
|
2
|
+
|
|
3
|
+
from numpy import ndarray
|
|
4
|
+
from numpy.typing import DTypeLike
|
|
5
|
+
|
|
6
|
+
from randomgen.common import BitGenerator
|
|
7
|
+
from randomgen.typing import RequiredSize, Size
|
|
8
|
+
|
|
9
|
+
class ExtendedGenerator:
|
|
10
|
+
_bit_generator: BitGenerator
|
|
11
|
+
def __init__(self, bit_generator: BitGenerator | None = ...) -> None: ...
|
|
12
|
+
@property
|
|
13
|
+
def bit_generator(self) -> BitGenerator: ...
|
|
14
|
+
@property
|
|
15
|
+
def state(self) -> dict[str, Any]: ...
|
|
16
|
+
@state.setter
|
|
17
|
+
def state(self, value: dict[str, Any]) -> None: ...
|
|
18
|
+
@overload
|
|
19
|
+
def uintegers(self, size: None = ..., bits: Literal[32, 64] = ...) -> int: ...
|
|
20
|
+
@overload
|
|
21
|
+
def uintegers(self, size: RequiredSize, bits: Literal[32, 64] = ...) -> ndarray: ...
|
|
22
|
+
@overload
|
|
23
|
+
def random(
|
|
24
|
+
self,
|
|
25
|
+
size: None = ...,
|
|
26
|
+
dtype: DTypeLike = ...,
|
|
27
|
+
out: None = ...,
|
|
28
|
+
) -> float: ...
|
|
29
|
+
@overload
|
|
30
|
+
def random(
|
|
31
|
+
self,
|
|
32
|
+
size: RequiredSize,
|
|
33
|
+
dtype: DTypeLike = ...,
|
|
34
|
+
out: ndarray | None = ...,
|
|
35
|
+
) -> ndarray: ...
|
|
36
|
+
@overload
|
|
37
|
+
def random(
|
|
38
|
+
self,
|
|
39
|
+
size: None = ...,
|
|
40
|
+
dtype: DTypeLike = ...,
|
|
41
|
+
*,
|
|
42
|
+
out: ndarray,
|
|
43
|
+
) -> ndarray: ...
|
|
44
|
+
def multivariate_normal(
|
|
45
|
+
self,
|
|
46
|
+
mean: ndarray,
|
|
47
|
+
cov: ndarray,
|
|
48
|
+
size: Size = ...,
|
|
49
|
+
check_valid: Literal["raise", "ignore", "warn"] = ...,
|
|
50
|
+
tol: float = ...,
|
|
51
|
+
*,
|
|
52
|
+
method: Literal["svd", "eigh", "cholesky", "factor"] = ...,
|
|
53
|
+
) -> ndarray: ...
|
|
54
|
+
@overload
|
|
55
|
+
def complex_normal(
|
|
56
|
+
self,
|
|
57
|
+
loc: complex = ...,
|
|
58
|
+
gamma: complex = ...,
|
|
59
|
+
relation: complex = ...,
|
|
60
|
+
size: None = ...,
|
|
61
|
+
) -> complex: ...
|
|
62
|
+
@overload
|
|
63
|
+
def complex_normal(
|
|
64
|
+
self,
|
|
65
|
+
loc: complex | ndarray = ...,
|
|
66
|
+
gamma: complex | ndarray = ...,
|
|
67
|
+
relation: complex | ndarray = ...,
|
|
68
|
+
size: Size = ...,
|
|
69
|
+
) -> ndarray: ...
|
|
70
|
+
def standard_wishart(
|
|
71
|
+
self,
|
|
72
|
+
df: int,
|
|
73
|
+
dim: int,
|
|
74
|
+
size: Size = ...,
|
|
75
|
+
rescale: bool = ...,
|
|
76
|
+
) -> ndarray: ...
|
|
77
|
+
def wishart(
|
|
78
|
+
self,
|
|
79
|
+
df: int | ndarray,
|
|
80
|
+
scale: ndarray | None = ...,
|
|
81
|
+
size: Size = ...,
|
|
82
|
+
*,
|
|
83
|
+
check_valid: Literal["raise", "ignore", "warn"] = ...,
|
|
84
|
+
tol: float = ...,
|
|
85
|
+
rank: int | None = ...,
|
|
86
|
+
method: Literal["svd", "eigh", "cholesky", "factor"] = ...,
|
|
87
|
+
) -> ndarray: ...
|
|
88
|
+
def multivariate_complex_normal(
|
|
89
|
+
self,
|
|
90
|
+
loc: ndarray,
|
|
91
|
+
gamma: ndarray | None = ...,
|
|
92
|
+
relation: ndarray | None = ...,
|
|
93
|
+
size: Size = ...,
|
|
94
|
+
*,
|
|
95
|
+
check_valid: Literal["raise", "ignore", "warn"] = ...,
|
|
96
|
+
tol: float = ...,
|
|
97
|
+
method: Literal["svd", "eigh", "cholesky", "factor"] = ...,
|
|
98
|
+
) -> ndarray: ...
|
|
Binary file
|