# Path: sacred/settings.py
# SETTINGS = FrozenKeyMunch.fromDict(
#     {
#         "CONFIG": {
#             # make sure all config keys are compatible with MongoDB
#             "ENFORCE_KEYS_MONGO_COMPATIBLE": True,
#             # make sure all config keys are serializable with jsonpickle
#             # THIS IS IMPORTANT. Only deactivate if you know what you're doing.
#             "ENFORCE_KEYS_JSONPICKLE_COMPATIBLE": True,
#             # make sure all config keys are valid python identifiers
#             "ENFORCE_VALID_PYTHON_IDENTIFIER_KEYS": False,
#             # make sure all config keys are strings
#             "ENFORCE_STRING_KEYS": False,
#             # make sure no config key contains an equals sign
#             "ENFORCE_KEYS_NO_EQUALS": True,
#             # if true, all dicts and lists in the configuration of a captured
#             # function are replaced with a read-only container that raises an
#             # Exception if it is attempted to write to those containers
#             "READ_ONLY_CONFIG": True,
#             # regex patterns to filter out certain IDE or linter directives
#             # from inline comments in the documentation
#             "IGNORED_COMMENTS": ["^pylint:", "^noinspection"],
#             # if true uses the numpy legacy API, i.e. _rnd in captured functions is
#             # a numpy.random.RandomState rather than numpy.random.Generator.
#             # numpy.random.RandomState became legacy with numpy v1.19.
#             "NUMPY_RANDOM_LEGACY_API": version.parse(opt.np.__version__)
#             < version.parse("1.19")
#             if opt.has_numpy
#             else False,
#         },
#         "HOST_INFO": {
#             # Collect information about GPUs using the nvidia-smi tool
#             "INCLUDE_GPU_INFO": True,
#             # List of ENVIRONMENT variables to store in host-info
#             "CAPTURED_ENV": [],
#         },
#         "COMMAND_LINE": {
#             # disallow string fallback, if parsing a value from command-line
#             # failed
#             "STRICT_PARSING": False,
#             # show command line options that are disabled (e.g. unmet
#             # dependencies)
#             "SHOW_DISABLED_OPTIONS": True,
#         },
#         # configure how stdout/stderr are captured. ['no', 'sys', 'fd']
#         "CAPTURE_MODE": "sys" if platform.system() == "Windows" else "fd",
#         # configure how dependencies are discovered. [none, imported, sys, pkg]
#         "DISCOVER_DEPENDENCIES": "imported",
#         # configure how source-files are discovered. [none, imported, sys, dir]
#         "DISCOVER_SOURCES": "imported",
#     },
# )
# 
# Path: sacred/utils.py
# def module_is_in_cache(modname):
#     """Checks if a module was imported before (is in the import cache)."""
#     return modname in sys.modules


import random
import sacred.optional as opt
        import torch
from sacred.settings import SETTINGS
from sacred.utils import module_is_in_cache
def get_seed(rnd=None):
    if rnd is None:
        return random.randint(*SEEDRANGE)
    else:
        try:
            return rnd.integers(*SEEDRANGE, dtype=int)
        except Exception:
            return rnd.randint(*SEEDRANGE)


def create_rnd(seed):
    assert isinstance(seed, int), "Seed has to be integer but was {} {}".format(
        repr(seed), type(seed)
    )
    if opt.has_numpy:
        if SETTINGS.CONFIG.NUMPY_RANDOM_LEGACY_API:
            return opt.np.random.RandomState(seed)
        else:
            return opt.np.random.default_rng(seed)
    else:
        return random.Random(seed)


def set_global_seed(seed):
    random.seed(seed)
    if opt.has_numpy:
        opt.np.random.seed(seed)
    if module_is_in_cache("tensorflow"):
        tf = opt.get_tensorflow()
        tf.set_random_seed(seed)

# Path: sacred/settings.py
# SETTINGS = FrozenKeyMunch.fromDict(
#     {
#         "CONFIG": {
#             # make sure all config keys are compatible with MongoDB
#             "ENFORCE_KEYS_MONGO_COMPATIBLE": True,
#             # make sure all config keys are serializable with jsonpickle
#             # THIS IS IMPORTANT. Only deactivate if you know what you're doing.
#             "ENFORCE_KEYS_JSONPICKLE_COMPATIBLE": True,
#             # make sure all config keys are valid python identifiers
#             "ENFORCE_VALID_PYTHON_IDENTIFIER_KEYS": False,
#             # make sure all config keys are strings
#             "ENFORCE_STRING_KEYS": False,
#             # make sure no config key contains an equals sign
#             "ENFORCE_KEYS_NO_EQUALS": True,
#             # if true, all dicts and lists in the configuration of a captured
#             # function are replaced with a read-only container that raises an
#             # Exception if it is attempted to write to those containers
#             "READ_ONLY_CONFIG": True,
#             # regex patterns to filter out certain IDE or linter directives
#             # from inline comments in the documentation
#             "IGNORED_COMMENTS": ["^pylint:", "^noinspection"],
#             # if true uses the numpy legacy API, i.e. _rnd in captured functions is
#             # a numpy.random.RandomState rather than numpy.random.Generator.
#             # numpy.random.RandomState became legacy with numpy v1.19.
#             "NUMPY_RANDOM_LEGACY_API": version.parse(opt.np.__version__)
#             < version.parse("1.19")
#             if opt.has_numpy
#             else False,
#         },
#         "HOST_INFO": {
#             # Collect information about GPUs using the nvidia-smi tool
#             "INCLUDE_GPU_INFO": True,
#             # List of ENVIRONMENT variables to store in host-info
#             "CAPTURED_ENV": [],
#         },
#         "COMMAND_LINE": {
#             # disallow string fallback, if parsing a value from command-line
#             # failed
#             "STRICT_PARSING": False,
#             # show command line options that are disabled (e.g. unmet
#             # dependencies)
#             "SHOW_DISABLED_OPTIONS": True,
#         },
#         # configure how stdout/stderr are captured. ['no', 'sys', 'fd']
#         "CAPTURE_MODE": "sys" if platform.system() == "Windows" else "fd",
#         # configure how dependencies are discovered. [none, imported, sys, pkg]
#         "DISCOVER_DEPENDENCIES": "imported",
#         # configure how source-files are discovered. [none, imported, sys, dir]
#         "DISCOVER_SOURCES": "imported",
#     },
# )
# 
# Path: sacred/utils.py
# def module_is_in_cache(modname):
#     """Checks if a module was imported before (is in the import cache)."""
#     return modname in sys.modules


# Path: sacred/randomness.py
import random
import sacred.optional as opt
        import torch
from sacred.settings import SETTINGS
from sacred.utils import module_is_in_cache

def get_seed(rnd=None):
    if rnd is None:
        return random.randint(*SEEDRANGE)
    else:
        try:
            return rnd.integers(*SEEDRANGE, dtype=int)
        except Exception:
            return rnd.randint(*SEEDRANGE)


def create_rnd(seed):
    assert isinstance(seed, int), "Seed has to be integer but was {} {}".format(
        repr(seed), type(seed)
    )
    if opt.has_numpy:
        if SETTINGS.CONFIG.NUMPY_RANDOM_LEGACY_API:
            return opt.np.random.RandomState(seed)
        else:
            return opt.np.random.default_rng(seed)
    else:
        return random.Random(seed)


def set_global_seed(seed):
    random.seed(seed)
    if opt.has_numpy:
        opt.np.random.seed(seed)
    if module_is_in_cache("tensorflow"):
        tf = opt.get_tensorflow()
        tf.set_random_seed(seed)

    if module_is_in_cache("torch"):