예제 #1
0
 def __init__(self,
              path,
              ingredients=(),
              interactive=False,
              _caller_globals=None):
     self.path = path
     self.config_hooks = []
     self.configurations = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.logger = None
     self.captured_functions = []
     self.post_run_hooks = []
     self.pre_run_hooks = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     mainfile_name = _caller_globals.get('__file__', '.')
     self.base_dir = os.path.dirname(os.path.abspath(mainfile_name))
     self.doc = _caller_globals.get('__doc__', "")
     self.mainfile, self.sources, self.dependencies = \
         gather_sources_and_dependencies(_caller_globals)
     if self.mainfile is None and not interactive:
         raise RuntimeError("Defining an experiment in interactive mode! "
                            "The sourcecode cannot be stored and the "
                            "experiment won't be reproducible. If you still"
                            " want to run it pass interactive=True")
예제 #2
0
def test_gather_sources_and_dependencies():
    from tests.dependency_example import some_func

    main, sources, deps = gather_sources_and_dependencies(
        some_func.__globals__)
    assert isinstance(main, Source)
    assert isinstance(sources, set)
    assert isinstance(deps, set)
    assert main == Source.create(
        os.path.join(TEST_DIRECTORY, "dependency_example.py"))
    expected_sources = {
        Source.create(os.path.join(TEST_DIRECTORY, "__init__.py")),
        Source.create(os.path.join(TEST_DIRECTORY, "dependency_example.py")),
        Source.create(os.path.join(TEST_DIRECTORY, "foo", "__init__.py")),
        Source.create(os.path.join(TEST_DIRECTORY, "foo", "bar.py")),
    }
    assert sources == expected_sources

    assert PackageDependency.create(pytest) in deps
    assert PackageDependency.create(mock) in deps
    # If numpy is installed on the test system it will automatically be added
    # as an additional dependency, so test for that:
    if opt.has_numpy:
        assert PackageDependency.create(opt.np) in deps
        assert len(deps) == 3
    else:
        assert len(deps) == 2
예제 #3
0
파일: ingredient.py 프로젝트: IDSIA/sacred
 def __init__(self, path, ingredients=(), interactive=False,
              _caller_globals=None, base_dir=None):
     self.path = path
     self.config_hooks = []
     self.configurations = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.logger = None
     self.captured_functions = []
     self.post_run_hooks = []
     self.pre_run_hooks = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     mainfile_dir = os.path.dirname(_caller_globals.get('__file__', '.'))
     self.base_dir = os.path.abspath(base_dir or mainfile_dir)
     self.doc = _caller_globals.get('__doc__', "")
     self.mainfile, self.sources, self.dependencies = \
         gather_sources_and_dependencies(_caller_globals, self.base_dir)
     if self.mainfile is None and not interactive:
         raise RuntimeError("Defining an experiment in interactive mode! "
                            "The sourcecode cannot be stored and the "
                            "experiment won't be reproducible. If you still"
                            " want to run it pass interactive=True")
예제 #4
0
def test_gather_sources_and_dependencies(discover_sources, expected_sources):
    from tests.dependency_example import some_func
    from sacred import SETTINGS

    SETTINGS.DISCOVER_SOURCES = discover_sources

    main, sources, deps = gather_sources_and_dependencies(
        some_func.__globals__, save_git_info=False)
    assert isinstance(main, Source)
    assert isinstance(sources, set)
    assert isinstance(deps, set)
    assert main == Source.create(
        os.path.join(TEST_DIRECTORY, "dependency_example.py"))
    assert sources == expected_sources

    assert PackageDependency.create(pytest) in deps
    assert PackageDependency.create(mock) in deps
    # If numpy is installed on the test system it will automatically be added
    # as an additional dependency, so test for that:
    if opt.has_numpy:
        assert PackageDependency.create(opt.np) in deps
        assert len(deps) == 3
    else:
        assert len(deps) == 2

    # Reset to default to prevent side-effects
    SETTINGS.DISCOVER_SOURCES = "imported"
예제 #5
0
def test_custom_base_dir():
    from tests.basedir.my_experiment import some_func
    base_dir = os.path.abspath('tests')
    main, sources, deps = gather_sources_and_dependencies(some_func.__globals__, base_dir)
    assert isinstance(main, Source)
    assert isinstance(sources, set)
    assert isinstance(deps, set)
    assert main == Source.create('tests/basedir/my_experiment.py')
    expected_sources = {
        Source.create('tests/__init__.py'),
        Source.create('tests/basedir/__init__.py'),
        Source.create('tests/basedir/my_experiment.py'),
        Source.create('tests/foo/__init__.py'),
        Source.create('tests/foo/bar.py')
    }
    assert sources == expected_sources
예제 #6
0
 def __init__(self, path, ingredients=(), _generate_seed=False,
              _caller_globals=None):
     self.path = path
     self.cfgs = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.gen_seed = _generate_seed
     self.captured_functions = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     self.doc = _caller_globals.get('__doc__', "")
     self.sources, self.dependencies = \
         gather_sources_and_dependencies(_caller_globals)
     self.current_run = None
예제 #7
0
 def __init__(self, path, ingredients=(), _caller_globals=None):
     self.path = path
     self.config_hooks = []
     self.configurations = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.logger = None
     self.captured_functions = []
     self.post_run_hooks = []
     self.pre_run_hooks = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     self.doc = _caller_globals.get('__doc__', "")
     self.sources, self.dependencies = \
         gather_sources_and_dependencies(_caller_globals)
예제 #8
0
def test_custom_base_dir():
    from tests.basedir.my_experiment import some_func
    main, sources, deps = gather_sources_and_dependencies(
        some_func.__globals__, TEST_DIRECTORY)
    assert isinstance(main, Source)
    assert isinstance(sources, set)
    assert isinstance(deps, set)
    assert main == Source.create(
        os.path.join(TEST_DIRECTORY, 'basedir', 'my_experiment.py'))
    expected_sources = {
        Source.create(os.path.join(TEST_DIRECTORY, '__init__.py')),
        Source.create(os.path.join(TEST_DIRECTORY, 'basedir', '__init__.py')),
        Source.create(
            os.path.join(TEST_DIRECTORY, 'basedir', 'my_experiment.py')),
        Source.create(os.path.join(TEST_DIRECTORY, 'foo', '__init__.py')),
        Source.create(os.path.join(TEST_DIRECTORY, 'foo', 'bar.py'))
    }
    assert sources == expected_sources
예제 #9
0
 def __init__(self,
              path,
              ingredients=(),
              interactive=False,
              _caller_globals=None):
     self.path = path
     self.config_hooks = []
     self.configurations = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.logger = None
     self.captured_functions = []
     self.post_run_hooks = []
     self.pre_run_hooks = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     self.doc = _caller_globals.get('__doc__', "")
     self.sources, self.dependencies = \
         gather_sources_and_dependencies(_caller_globals, interactive)
예제 #10
0
 def __init__(
     self,
     path: PathType,
     ingredients: Sequence["Ingredient"] = (),
     interactive: bool = False,
     _caller_globals: Optional[dict] = None,
     base_dir: Optional[PathType] = None,
     save_git_info: bool = True,
 ):
     self.path = path
     self.config_hooks = []
     self.configurations = []
     self.named_configs = dict()
     self.ingredients = list(ingredients)
     self.logger = None
     self.captured_functions = []
     self.post_run_hooks = []
     self.pre_run_hooks = []
     self._is_traversing = False
     self.commands = OrderedDict()
     # capture some context information
     _caller_globals = _caller_globals or inspect.stack()[1][0].f_globals
     mainfile_dir = os.path.dirname(_caller_globals.get("__file__", "."))
     self.base_dir = os.path.abspath(base_dir or mainfile_dir)
     self.save_git_info = save_git_info
     self.doc = _caller_globals.get("__doc__", "")
     (
         self.mainfile,
         self.sources,
         self.dependencies,
     ) = gather_sources_and_dependencies(
         _caller_globals, save_git_info, self.base_dir
     )
     if self.mainfile is None and not interactive:
         raise RuntimeError(
             "Defining an experiment in interactive mode! "
             "The sourcecode cannot be stored and the "
             "experiment won't be reproducible. If you still"
             " want to run it pass interactive=True"
         )
예제 #11
0
def test_gather_sources_and_dependencies():
    from tests.dependency_example import some_func
    sources, deps = gather_sources_and_dependencies(some_func.__globals__)
    assert isinstance(sources, set)
    assert isinstance(deps, set)
    expected_sources = {
        Source.create('tests/__init__.py'),
        Source.create('tests/dependency_example.py'),
        Source.create('tests/foo/__init__.py'),
        Source.create('tests/foo/bar.py')
    }
    assert sources == expected_sources

    assert PackageDependency.create(pytest) in deps
    assert PackageDependency.create(mock) in deps
    # If numpy is installed on the test system it will automatically be added
    # as an additional dependency, so test for that:
    if opt.has_numpy:
        assert PackageDependency.create(opt.np) in deps
        assert len(deps) == 3
    else:
        assert len(deps) == 2