dapper.tools.seeding
Random number generation.
1"""Random number generation.""" 2 3import time 4 5import numpy.random as _rnd 6 7rng = _rnd.default_rng() 8 9 10def set_seed(sd="clock"): 11 """Set state of DAPPER random number generator.""" 12 if (sd is not False) and sd == 0: 13 msg = ( 14 "Seeding with 0 is not a good idea, because\n" 15 "- Might be confused with [None, False].\n" 16 "- Sometimes people seed experiment k with seed(k*sd),\n" 17 " which is intended to vary with k, but is 0 ∀k." 18 ) 19 raise RuntimeError(msg) 20 21 if sd in [None, "clock"]: 22 microsec = int(10**6 * time.time()) 23 MAXSEED = 2**32 24 sd = microsec % MAXSEED 25 26 # Don't set seed if sd==False 27 # (but None has already been converted to "clock") 28 if sd: 29 rng.bit_generator.state = _rnd.default_rng(sd).bit_generator.state 30 31 return rng
rng =
Generator(PCG64) at 0x7FA263361E00
def
set_seed(sd='clock'):
11def set_seed(sd="clock"): 12 """Set state of DAPPER random number generator.""" 13 if (sd is not False) and sd == 0: 14 msg = ( 15 "Seeding with 0 is not a good idea, because\n" 16 "- Might be confused with [None, False].\n" 17 "- Sometimes people seed experiment k with seed(k*sd),\n" 18 " which is intended to vary with k, but is 0 ∀k." 19 ) 20 raise RuntimeError(msg) 21 22 if sd in [None, "clock"]: 23 microsec = int(10**6 * time.time()) 24 MAXSEED = 2**32 25 sd = microsec % MAXSEED 26 27 # Don't set seed if sd==False 28 # (but None has already been converted to "clock") 29 if sd: 30 rng.bit_generator.state = _rnd.default_rng(sd).bit_generator.state 31 32 return rng
Set state of DAPPER random number generator.