Source code for imagine.tools.random_seed

"""
This module provides a time-thread dependent seed value.

For the testing suites, please turn to "imagine/tests/tools_tests.py".
"""

# %% IMPORTS
# Built-in imports
import logging as log
import threading
import time

# Package imports
import numpy as np

# All declaration
__all__ = ['ensemble_seed_generator', 'seed_generator']


# %% FUNCTION DEFINITIONS
[docs]def seed_generator(trigger): """ Sets trigger as 0 will generate time-thread dependent method otherwise returns the trigger as seed. Parameters ---------- trigger : int Non-negative pre-fixed seed. Returns ------- seed : int A random seed value. """ log.debug('@ random_seed::seed_generator') if trigger > 0: return int(trigger) elif trigger == 0: return round(time.time()*1E+9) % int(1E+8) + threading.get_ident() % int(1E+8) else: raise ValueError('unsupported random seed value')
[docs]def ensemble_seed_generator(size): """ Generates fixed random seed values for each realization in ensemble. Parameters ---------- size : int Number of realizations in ensemble. Returns ------- seeds : numpy.ndarray An array of random seeds. """ log.debug('@ random_seed::ensemble_seed_generator') # the uint32 is defined by the random generator's capacity return np.random.randint(low=1, high=np.uint32(-1)//3, size=np.uint64(size))