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.
Files changed (222) hide show
  1. randomgen/__init__.py +103 -0
  2. randomgen/_pickle.py +138 -0
  3. randomgen/_register.py +73 -0
  4. randomgen/_version.py +22 -0
  5. randomgen/aes.cp315-win_amd64.lib +0 -0
  6. randomgen/aes.cp315-win_amd64.pyd +0 -0
  7. randomgen/aes.pyi +31 -0
  8. randomgen/blabla.cp315-win_amd64.lib +0 -0
  9. randomgen/blabla.cp315-win_amd64.pyd +0 -0
  10. randomgen/blabla.pyi +32 -0
  11. randomgen/broadcasting.cp315-win_amd64.lib +0 -0
  12. randomgen/broadcasting.cp315-win_amd64.pyd +0 -0
  13. randomgen/chacha.cp315-win_amd64.lib +0 -0
  14. randomgen/chacha.cp315-win_amd64.pyd +0 -0
  15. randomgen/chacha.pyi +30 -0
  16. randomgen/common.cp315-win_amd64.lib +0 -0
  17. randomgen/common.cp315-win_amd64.pyd +0 -0
  18. randomgen/common.pyi +37 -0
  19. randomgen/conftest.py +23 -0
  20. randomgen/dsfmt.cp315-win_amd64.lib +0 -0
  21. randomgen/dsfmt.cp315-win_amd64.pyd +0 -0
  22. randomgen/dsfmt.pyi +17 -0
  23. randomgen/efiix64.cp315-win_amd64.lib +0 -0
  24. randomgen/efiix64.cp315-win_amd64.pyd +0 -0
  25. randomgen/efiix64.pyi +17 -0
  26. randomgen/entropy.cp315-win_amd64.lib +0 -0
  27. randomgen/entropy.cp315-win_amd64.pyd +0 -0
  28. randomgen/entropy.pyi +9 -0
  29. randomgen/generator.cp315-win_amd64.lib +0 -0
  30. randomgen/generator.cp315-win_amd64.pyd +0 -0
  31. randomgen/generator.pyi +98 -0
  32. randomgen/hc128.cp315-win_amd64.lib +0 -0
  33. randomgen/hc128.cp315-win_amd64.pyd +0 -0
  34. randomgen/hc128.pyi +23 -0
  35. randomgen/jsf.cp315-win_amd64.lib +0 -0
  36. randomgen/jsf.cp315-win_amd64.pyd +0 -0
  37. randomgen/jsf.pyi +22 -0
  38. randomgen/lxm.cp315-win_amd64.lib +0 -0
  39. randomgen/lxm.cp315-win_amd64.pyd +0 -0
  40. randomgen/lxm.pyi +23 -0
  41. randomgen/mt19937.cp315-win_amd64.lib +0 -0
  42. randomgen/mt19937.cp315-win_amd64.pyd +0 -0
  43. randomgen/mt19937.pyi +24 -0
  44. randomgen/mt64.cp315-win_amd64.lib +0 -0
  45. randomgen/mt64.cp315-win_amd64.pyd +0 -0
  46. randomgen/mt64.pyi +17 -0
  47. randomgen/mwcx.cp315-win_amd64.lib +0 -0
  48. randomgen/mwcx.cp315-win_amd64.pyd +0 -0
  49. randomgen/mwcx.pyi +25 -0
  50. randomgen/pcg32.cp315-win_amd64.lib +0 -0
  51. randomgen/pcg32.cp315-win_amd64.pyd +0 -0
  52. randomgen/pcg32.pyi +22 -0
  53. randomgen/pcg64.cp315-win_amd64.lib +0 -0
  54. randomgen/pcg64.cp315-win_amd64.pyd +0 -0
  55. randomgen/pcg64.pyi +81 -0
  56. randomgen/philox.cp315-win_amd64.lib +0 -0
  57. randomgen/philox.cp315-win_amd64.pyd +0 -0
  58. randomgen/philox.pyi +33 -0
  59. randomgen/rdrand.cp315-win_amd64.lib +0 -0
  60. randomgen/rdrand.cp315-win_amd64.pyd +0 -0
  61. randomgen/rdrand.pyi +32 -0
  62. randomgen/romu.cp315-win_amd64.lib +0 -0
  63. randomgen/romu.cp315-win_amd64.pyd +0 -0
  64. randomgen/romu.pyi +18 -0
  65. randomgen/seed_sequence.py +13 -0
  66. randomgen/sfc.cp315-win_amd64.lib +0 -0
  67. randomgen/sfc.cp315-win_amd64.pyd +0 -0
  68. randomgen/sfc.pyi +25 -0
  69. randomgen/sfmt.cp315-win_amd64.lib +0 -0
  70. randomgen/sfmt.cp315-win_amd64.pyd +0 -0
  71. randomgen/sfmt.pyi +18 -0
  72. randomgen/speck128.cp315-win_amd64.lib +0 -0
  73. randomgen/speck128.cp315-win_amd64.pyd +0 -0
  74. randomgen/speck128.pyi +35 -0
  75. randomgen/squares.cp315-win_amd64.lib +0 -0
  76. randomgen/squares.cp315-win_amd64.pyd +0 -0
  77. randomgen/squares.pyi +34 -0
  78. randomgen/tests/__init__.py +0 -0
  79. randomgen/tests/_shims.cp315-win_amd64.lib +0 -0
  80. randomgen/tests/_shims.cp315-win_amd64.pyd +0 -0
  81. randomgen/tests/_shims.pyi +20 -0
  82. randomgen/tests/_utility.py +17 -0
  83. randomgen/tests/data/__init__.py +0 -0
  84. randomgen/tests/data/_write_hashes.py +29 -0
  85. randomgen/tests/data/aesctr-testset-1.csv +1001 -0
  86. randomgen/tests/data/aesctr-testset-2.csv +1001 -0
  87. randomgen/tests/data/blabla-testset-1-avx2.csv +1001 -0
  88. randomgen/tests/data/blabla-testset-2.csv +1001 -0
  89. randomgen/tests/data/chacha-testset-1.csv +1001 -0
  90. randomgen/tests/data/chacha-testset-2.csv +1001 -0
  91. randomgen/tests/data/compute_hashes.py +291 -0
  92. randomgen/tests/data/ctypes_testing.c +5 -0
  93. randomgen/tests/data/dSFMT-testset-1.csv +1001 -0
  94. randomgen/tests/data/dSFMT-testset-2.csv +1001 -0
  95. randomgen/tests/data/efiix64-testset-1.csv +1001 -0
  96. randomgen/tests/data/efiix64-testset-2.csv +1001 -0
  97. randomgen/tests/data/hc-128-testset-1.csv +1001 -0
  98. randomgen/tests/data/hc-128-testset-2.csv +1001 -0
  99. randomgen/tests/data/jsf32-testset-1.csv +1001 -0
  100. randomgen/tests/data/jsf32-testset-2.csv +1001 -0
  101. randomgen/tests/data/jsf64-testset-1.csv +1001 -0
  102. randomgen/tests/data/jsf64-testset-2.csv +1001 -0
  103. randomgen/tests/data/lxm-testset-1.csv +1001 -0
  104. randomgen/tests/data/lxm-testset-2.csv +1001 -0
  105. randomgen/tests/data/mt19937-testset-1.csv +1001 -0
  106. randomgen/tests/data/mt19937-testset-2.csv +1001 -0
  107. randomgen/tests/data/mt64-testset-1.csv +1001 -0
  108. randomgen/tests/data/mt64-testset-2.csv +1001 -0
  109. randomgen/tests/data/mwc128x-testset-1.csv +1001 -0
  110. randomgen/tests/data/mwc128x-testset-2.csv +1001 -0
  111. randomgen/tests/data/mwc128x32-testset-1.csv +1001 -0
  112. randomgen/tests/data/mwc128x32-testset-2.csv +1001 -0
  113. randomgen/tests/data/mwc192x-testset-1.csv +1001 -0
  114. randomgen/tests/data/mwc192x-testset-2.csv +1001 -0
  115. randomgen/tests/data/mwc64x32-testset-1.csv +1001 -0
  116. randomgen/tests/data/mwc64x32-testset-2.csv +1001 -0
  117. randomgen/tests/data/pcg32-testset-1.csv +1001 -0
  118. randomgen/tests/data/pcg32-testset-2.csv +1001 -0
  119. randomgen/tests/data/pcg64-cm-dxsm-testset-1.csv +1001 -0
  120. randomgen/tests/data/pcg64-cm-dxsm-testset-2.csv +1001 -0
  121. randomgen/tests/data/pcg64-cm-xsl_rr-testset-1.csv +1000 -0
  122. randomgen/tests/data/pcg64-cm-xsl_rr-testset-2.csv +1001 -0
  123. randomgen/tests/data/pcg64-dxsm-testset-1.csv +1001 -0
  124. randomgen/tests/data/pcg64-dxsm-testset-2.csv +1001 -0
  125. randomgen/tests/data/pcg64-testset-1.csv +1001 -0
  126. randomgen/tests/data/pcg64-testset-2.csv +1001 -0
  127. randomgen/tests/data/pcg64-xsl_rr-testset-1.csv +1001 -0
  128. randomgen/tests/data/pcg64-xsl_rr-testset-2.csv +1001 -0
  129. randomgen/tests/data/philox-testset-1.csv +1001 -0
  130. randomgen/tests/data/philox-testset-2.csv +1001 -0
  131. randomgen/tests/data/philox4x32-testset-1.csv +1001 -0
  132. randomgen/tests/data/philox4x32-testset-2.csv +1001 -0
  133. randomgen/tests/data/romuquad-testset-1.csv +1001 -0
  134. randomgen/tests/data/romuquad-testset-2.csv +1001 -0
  135. randomgen/tests/data/romutrio-testset-1.csv +1001 -0
  136. randomgen/tests/data/romutrio-testset-2.csv +1001 -0
  137. randomgen/tests/data/sfc-testset-1.csv +1001 -0
  138. randomgen/tests/data/sfc-testset-2.csv +1001 -0
  139. randomgen/tests/data/sfmt-testset-1.csv +1001 -0
  140. randomgen/tests/data/sfmt-testset-2.csv +1001 -0
  141. randomgen/tests/data/speck-128-testset-1.csv +1001 -0
  142. randomgen/tests/data/speck-128-testset-2.csv +1001 -0
  143. randomgen/tests/data/squares-32-testset-1.csv +1001 -0
  144. randomgen/tests/data/squares-32-testset-2.csv +1001 -0
  145. randomgen/tests/data/squares-testset-1.csv +1001 -0
  146. randomgen/tests/data/squares-testset-2.csv +1001 -0
  147. randomgen/tests/data/stability_results.py +1729 -0
  148. randomgen/tests/data/stable_hashes.py +4023 -0
  149. randomgen/tests/data/threefry-testset-1.csv +1001 -0
  150. randomgen/tests/data/threefry-testset-2.csv +1001 -0
  151. randomgen/tests/data/threefry32-testset-1.csv +1001 -0
  152. randomgen/tests/data/threefry32-testset-2.csv +1001 -0
  153. randomgen/tests/data/tyche-openrand-testset-1.csv +1001 -0
  154. randomgen/tests/data/tyche-openrand-testset-2.csv +1001 -0
  155. randomgen/tests/data/tyche-testset-1.csv +1001 -0
  156. randomgen/tests/data/tyche-testset-2.csv +1001 -0
  157. randomgen/tests/data/xoroshiro128-testset-1.csv +1001 -0
  158. randomgen/tests/data/xoroshiro128-testset-2.csv +1001 -0
  159. randomgen/tests/data/xoroshiro128plusplus-testset-1.csv +1001 -0
  160. randomgen/tests/data/xoroshiro128plusplus-testset-2.csv +1001 -0
  161. randomgen/tests/data/xorshift1024-testset-1.csv +1001 -0
  162. randomgen/tests/data/xorshift1024-testset-2.csv +1001 -0
  163. randomgen/tests/data/xoshiro256-testset-1.csv +1001 -0
  164. randomgen/tests/data/xoshiro256-testset-2.csv +1001 -0
  165. randomgen/tests/data/xoshiro512-testset-1.csv +1001 -0
  166. randomgen/tests/data/xoshiro512-testset-2.csv +1001 -0
  167. randomgen/tests/test_bit_generators_against_numpy.py +102 -0
  168. randomgen/tests/test_broadcasting.py +426 -0
  169. randomgen/tests/test_common.py +231 -0
  170. randomgen/tests/test_direct.py +3098 -0
  171. randomgen/tests/test_extended_generator.py +1040 -0
  172. randomgen/tests/test_generator_mt19937.py +78 -0
  173. randomgen/tests/test_imports.py +50 -0
  174. randomgen/tests/test_lcg128mix_pcg64dxsm.py +296 -0
  175. randomgen/tests/test_multithreading.py +264 -0
  176. randomgen/tests/test_sfc.py +83 -0
  177. randomgen/tests/test_smoke.py +1397 -0
  178. randomgen/tests/test_stability.py +265 -0
  179. randomgen/tests/test_wrapper.py +201 -0
  180. randomgen/tests/test_wrapper_numba.py +241 -0
  181. randomgen/threefry.cp315-win_amd64.lib +0 -0
  182. randomgen/threefry.cp315-win_amd64.pyd +0 -0
  183. randomgen/threefry.pyi +32 -0
  184. randomgen/tyche.cp315-win_amd64.lib +0 -0
  185. randomgen/tyche.cp315-win_amd64.pyd +0 -0
  186. randomgen/tyche.pyi +23 -0
  187. randomgen/typing.py +10 -0
  188. randomgen/wrapper.cp315-win_amd64.lib +0 -0
  189. randomgen/wrapper.cp315-win_amd64.pyd +0 -0
  190. randomgen/wrapper.pyi +47 -0
  191. randomgen/xoroshiro128.cp315-win_amd64.lib +0 -0
  192. randomgen/xoroshiro128.cp315-win_amd64.pyd +0 -0
  193. randomgen/xoroshiro128.pyi +18 -0
  194. randomgen/xorshift1024.cp315-win_amd64.lib +0 -0
  195. randomgen/xorshift1024.cp315-win_amd64.pyd +0 -0
  196. randomgen/xorshift1024.pyi +18 -0
  197. randomgen/xoshiro256.cp315-win_amd64.lib +0 -0
  198. randomgen/xoshiro256.cp315-win_amd64.pyd +0 -0
  199. randomgen/xoshiro256.pyi +13 -0
  200. randomgen/xoshiro512.cp315-win_amd64.lib +0 -0
  201. randomgen/xoshiro512.cp315-win_amd64.pyd +0 -0
  202. randomgen/xoshiro512.pyi +13 -0
  203. randomgen-2.5.0.dist-info/METADATA +253 -0
  204. randomgen-2.5.0.dist-info/RECORD +222 -0
  205. randomgen-2.5.0.dist-info/WHEEL +4 -0
  206. randomgen-2.5.0.dist-info/licenses/LICENSE.md +108 -0
  207. randomgen-2.5.0.dist-info/licenses/randomgen/src/aesctr/LICENSE.md +232 -0
  208. randomgen-2.5.0.dist-info/licenses/randomgen/src/chacha/LICENSE.md +16 -0
  209. randomgen-2.5.0.dist-info/licenses/randomgen/src/common/LICENSE.md +29 -0
  210. randomgen-2.5.0.dist-info/licenses/randomgen/src/distributions/LICENSE.md +61 -0
  211. randomgen-2.5.0.dist-info/licenses/randomgen/src/dsfmt/LICENSE.md +34 -0
  212. randomgen-2.5.0.dist-info/licenses/randomgen/src/entropy/LICENSE.md +25 -0
  213. randomgen-2.5.0.dist-info/licenses/randomgen/src/mt19937/LICENSE.md +61 -0
  214. randomgen-2.5.0.dist-info/licenses/randomgen/src/pcg32/LICENSE.md +22 -0
  215. randomgen-2.5.0.dist-info/licenses/randomgen/src/pcg64/LICENSE.md +22 -0
  216. randomgen-2.5.0.dist-info/licenses/randomgen/src/philox/LICENSE.md +31 -0
  217. randomgen-2.5.0.dist-info/licenses/randomgen/src/splitmix64/LICENSE.md +9 -0
  218. randomgen-2.5.0.dist-info/licenses/randomgen/src/threefry/LICENSE.md +31 -0
  219. randomgen-2.5.0.dist-info/licenses/randomgen/src/xoroshiro128/LICENSE.md +9 -0
  220. randomgen-2.5.0.dist-info/licenses/randomgen/src/xorshift1024/LICENSE.md +9 -0
  221. randomgen-2.5.0.dist-info/licenses/randomgen/src/xoshiro256/LICENSE.md +9 -0
  222. 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
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
@@ -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