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.