Mercurial > p > roundup > code
annotate roundup/anypy/random_.py @ 6757:f6dd6cd920bc
Split edit ok and edit not ok test into two tests.
Having them combined seems to cause them to fail in CI.
Will splitting them with separate setup for each work better?
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 05 Jul 2022 02:02:38 -0400 |
| parents | adf54478cdaf |
| children | 07ce4e4110f5 |
| rev | line source |
|---|---|
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
1 try: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
2 from secrets import choice, randbelow, token_bytes |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
3 |
|
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
4 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
5 pass |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
6 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
7 is_weak = False |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
8 except ImportError: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
9 import os as _os |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
10 import random as _random |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
11 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
12 # prefer to use SystemRandom if it is available |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
13 if hasattr(_random, 'SystemRandom'): |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
14 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
15 pass |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
16 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
17 _r = _random.SystemRandom() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
18 is_weak = False |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
19 else: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
20 # don't completely throw away the existing state, but add some |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
21 # more random state to the existing state |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
22 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
23 import os, time |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
24 _r.seed((_r.getstate(), |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
25 v, |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
26 hasattr(os, 'getpid') and os.getpid(), |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
27 time.time())) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
28 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
29 # create our own instance so we don't mess with the global |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
30 # random number generator |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
31 _r = _random.Random() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
32 seed() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
33 is_weak = True |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
34 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
35 choice = _r.choice |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
36 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
37 def randbelow(i): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
38 return _r.randint(0, i - 1) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
39 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
40 if hasattr(_os, 'urandom'): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
41 def token_bytes(l): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
42 return _os.urandom(l) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
43 else: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
44 def token_bytes(l): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
45 _bchr = chr if str == bytes else lambda x: bytes((x,)) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
46 return b''.join([_bchr(_r.getrandbits(8)) for i in range(l)]) |
