# Path: sacred/config/captured_function.py
# def create_captured_function(function, prefix=None):
#     sig = Signature(function)
#     function.signature = sig
#     function.uses_randomness = "_seed" in sig.arguments or "_rnd" in sig.arguments
#     function.logger = None
#     function.config = {}
#     function.rnd = None
#     function.run = None
#     function.prefix = prefix
#     return captured_function(function)
# 
# 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",
#     },
# )


import datetime
import mock
import random
import sacred.optional as opt
from sacred.config.captured_function import create_captured_function
from sacred.settings import SETTINGS
#!/usr/bin/env python
# coding=utf-8



def test_create_captured_function():
    def foo():
        """my docstring"""
        return 42

    cf = create_captured_function(foo)

    assert cf.__name__ == "foo"
    assert cf.__doc__ == "my docstring"
    assert cf.prefix is None
    assert cf.config == {}
    assert not cf.uses_randomness
    assert callable(cf)


def test_call_captured_function():
    def foo(a, b, c, d=4, e=5, f=6):
        return a, b, c, d, e, f


# Path: sacred/config/captured_function.py
# def create_captured_function(function, prefix=None):
#     sig = Signature(function)
#     function.signature = sig
#     function.uses_randomness = "_seed" in sig.arguments or "_rnd" in sig.arguments
#     function.logger = None
#     function.config = {}
#     function.rnd = None
#     function.run = None
#     function.prefix = prefix
#     return captured_function(function)
# 
# 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: tests/test_config/test_captured_functions.py
import datetime
import mock
import random
import sacred.optional as opt
from sacred.config.captured_function import create_captured_function
from sacred.settings import SETTINGS

#!/usr/bin/env python
# coding=utf-8



def test_create_captured_function():
    def foo():
        """my docstring"""
        return 42

    cf = create_captured_function(foo)

    assert cf.__name__ == "foo"
    assert cf.__doc__ == "my docstring"
    assert cf.prefix is None
    assert cf.config == {}
    assert not cf.uses_randomness
    assert callable(cf)


def test_call_captured_function():
    def foo(a, b, c, d=4, e=5, f=6):
        return a, b, c, d, e, f


    cf = create_captured_function(foo)