|
1 | 1 | #!python
|
2 |
| -import sys |
3 | 2 | from collections import namedtuple
|
| 3 | +import sys |
| 4 | +import warnings |
| 5 | + |
4 | 6 | try:
|
5 | 7 | from threading import Lock
|
6 | 8 | except ImportError:
|
7 | 9 | from dummy_threading import Lock
|
8 | 10 |
|
9 | 11 | import numpy as np
|
10 |
| -from numpy.random.bit_generator cimport BitGenerator as _BitGenerator |
11 |
| -from cpython cimport PyFloat_AsDouble |
| 12 | + |
12 | 13 | cimport numpy as np
|
| 14 | +from cpython cimport PyFloat_AsDouble |
| 15 | +from numpy.random.bit_generator cimport BitGenerator as _BitGenerator |
13 | 16 |
|
14 |
| -from randomgen.common cimport * |
15 | 17 | from randomgen cimport api
|
| 18 | +from randomgen.common cimport * |
| 19 | + |
| 20 | +from randomgen._deprecated_value import _DeprecatedValue |
16 | 21 | from randomgen.seed_sequence import ISeedSequence
|
17 | 22 |
|
18 | 23 | ISEED_SEQUENCES = (ISeedSequence,)
|
@@ -43,14 +48,23 @@ cdef class BitGenerator(_BitGenerator):
|
43 | 48 | """
|
44 | 49 | Abstract class for all BitGenerators
|
45 | 50 | """
|
46 |
| - def __init__(self, seed, mode="sequence"): |
47 |
| - if mode is not None and (not isinstance(mode, str) or mode.lower() not in self._supported_modes()): |
| 51 | + def __init__(self, seed, *, numpy_seed=False, mode=_DeprecatedValue): |
| 52 | + if mode is not _DeprecatedValue: |
| 53 | + msg = ("mode is deprecated and will be removed in a future version. " |
| 54 | + "Seeding defaults to a numpy.random.SeedSequence instance.") |
| 55 | + if "numpy" in self._supported_modes(): |
| 56 | + msg += " Use numpy_seed=True to enforce numpy-compatible seeding." |
| 57 | + warnings.warn(msg, FutureWarning) |
| 58 | + if mode is not _DeprecatedValue and ( |
| 59 | + not isinstance(mode, str) or mode.lower() not in self._supported_modes() |
| 60 | + ): |
48 | 61 | if len(self._supported_modes()) == 1:
|
49 | 62 | msg = f"mode must be {self._supported_modes()[0]}"
|
50 | 63 | else:
|
51 | 64 | modes = ", ".join(f"\"{mode}\"" for mode in self._supported_modes())
|
52 | 65 | raise ValueError(f"mode must be one of: {modes}.")
|
53 |
| - self.mode = mode.lower() |
| 66 | + mode = mode.lower() if isinstance(mode, str) else mode |
| 67 | + self.mode = "numpy" if (numpy_seed or mode == "numpy") else "sequence" |
54 | 68 | super().__init__(seed)
|
55 | 69 |
|
56 | 70 | def _supported_modes(self):
|
|
0 commit comments