-
Notifications
You must be signed in to change notification settings - Fork 8.6k
/
Copy pathseeding.py
30 lines (20 loc) · 911 Bytes
/
seeding.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"""Set of random number generator functions: seeding, generator, hashing seeds."""
from typing import Any, Optional, Tuple
import numpy as np
from gym import error
def np_random(seed: Optional[int] = None) -> Tuple[np.random.Generator, Any]:
"""Generates a random number generator from the seed and returns the Generator and seed.
Args:
seed: The seed used to create the generator
Returns:
The generator and resulting seed
Raises:
Error: Seed must be a non-negative integer or omitted
"""
if seed is not None and not (isinstance(seed, int) and 0 <= seed):
raise error.Error(f"Seed must be a non-negative integer or omitted, not {seed}")
seed_seq = np.random.SeedSequence(seed)
np_seed = seed_seq.entropy
rng = RandomNumberGenerator(np.random.PCG64(seed_seq))
return rng, np_seed
RNG = RandomNumberGenerator = np.random.Generator