import copy
from typing import Union
import numpy as np
[docs]def derive_random_seed(*args: Union[np.random.RandomState, np.random.Generator]) -> int:
def _sample(rng: Union[np.random.RandomState, np.random.Generator]) -> int:
if isinstance(rng, np.random.RandomState):
return copy.copy(rng).randint(0, 2 ** 32, size=None, dtype=int)
elif isinstance(rng, np.random.Generator):
return copy.copy(rng).integers(
0, 2 ** 32, size=None, dtype=int, endpoint=False
)
else:
raise ValueError("Unsupported type of random number generator")
seed = _sample(args[0])
for i in range(1, len(args)):
seed = seed ^ _sample(args[i])
return seed