Closed
Description
Numpy docs advise using SeedSequence for spawning independent bit_generators
: https://numpy.org/doc/stable/reference/random/parallel.html
Their method should be quite more robust to collisions than our naive random.integers(2**30)
strategy, we use here and in a couple other places:
Line 1047 in bae5087
import math
unique_seeds = 2**30
for n_seeds in (10, 100, 1_000, 10_000, 100_000):
# birthday paradox probability: https://en.wikipedia.org/wiki/Birthday_problem
p_collision = 1-math.perm(unique_seeds, n_seeds) / unique_seeds**n_seeds
print(f"{n_seeds=}, {p_collision=}")
n_seeds=10, p_collision=4.1909515080540416e-08
n_seeds=100, p_collision=4.610036260510597e-06
n_seeds=1000, p_collision=0.0004650875835883195
n_seeds=10000, p_collision=0.04549425469529611
n_seeds=100000, p_collision=0.9905023499278603
Similar to aesara-devs/aesara#936