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")
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
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")
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"
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
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
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)
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
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)
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" )
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