def test_experiment_double_named_config(): ex = Experiment() @ex.config def config(): a = 0 d = { 'e': 0, 'f': 0 } @ex.named_config def A(): a = 2 d = { 'e': 2, 'f': 2 } @ex.named_config def B(): d = {'f': -1} @ex.main def run(a, d): return a, d['e'], d['f'] assert ex.run().result == (0, 0, 0) assert ex.run(named_configs=['A']).result == (2, 2, 2) assert ex.run(named_configs=['B']).result == (0, 0, -1) assert ex.run(named_configs=['A', 'B']).result == (2, 2, -1) assert ex.run(named_configs=['B', 'A']).result == (2, 2, 2)
def test_experiment_named_config_subingredient(): somemod = Ingredient("somemod") @somemod.config def sub_cfg(): a = 15 @somemod.capture def get_answer(a): return a @somemod.named_config def nsubcfg(): a = 16 ex = Experiment("some_experiment", ingredients=[somemod]) @ex.config def cfg(): a = 1 @ex.named_config def ncfg(): a = 2 somemod = {'a': 25} @ex.main def main(a): return a, get_answer() assert ex.run().result == (1, 15) assert ex.run(named_configs=['somemod.nsubcfg']).result == (1, 16) assert ex.run(named_configs=['ncfg']).result == (2, 25) assert ex.run(named_configs=['ncfg', 'somemod.nsubcfg']).result == (2, 16) assert ex.run(named_configs=['somemod.nsubcfg', 'ncfg']).result == (2, 25)
def test_double_nested_config(): sub_sub_ing = Ingredient('sub_sub_ing') sub_ing = Ingredient('sub_ing', [sub_sub_ing]) ing = Ingredient('ing', [sub_ing]) ex = Experiment('ex', [ing]) @ex.config def config(): a = 1 seed = 42 @ing.config def config(): b = 1 @sub_ing.config def config(): c = 2 @sub_sub_ing.config def config(): d = 3 @sub_sub_ing.capture def sub_sub_ing_main(_config): assert _config == { 'd': 3 }, _config @sub_ing.capture def sub_ing_main(_config): assert _config == { 'c': 2, 'sub_sub_ing': {'d': 3} }, _config @ing.capture def ing_main(_config): assert _config == { 'b': 1, 'sub_sub_ing': {'d': 3}, 'sub_ing': {'c': 2} }, _config @ex.main def main(_config): assert _config == { 'a': 1, 'sub_sub_ing': {'d': 3}, 'sub_ing': {'c': 2}, 'ing': {'b': 1}, 'seed': 42 }, _config ing_main() sub_ing_main() sub_sub_ing_main() ex.run()
def test_experiment_run(): ex = Experiment("some_experiment") @ex.main def main(): return 12 assert ex.run().result == 12
def test_double_nested_config(): sub_sub_ing = Ingredient('sub_sub_ing') sub_ing = Ingredient('sub_ing', [sub_sub_ing]) ing = Ingredient('ing', [sub_ing]) ex = Experiment('ex', [ing]) @ex.config def config(): a = 1 @ing.config def config(): b = 1 @sub_ing.config def config(): c = 2 @sub_sub_ing.config def config(): d = 3 @sub_sub_ing.capture def sub_sub_ing_main(_config): assert _config == { 'd': 3 }, _config @sub_ing.capture def sub_ing_main(_config): assert _config == { 'c': 2, 'sub_sub_ing': {'d': 3} }, _config @ing.capture def ing_main(_config): assert _config == { 'b': 1, 'sub_sub_ing': {'d': 3}, 'sub_ing': {'c': 2} }, _config @ex.main def main(_config): _config.pop('seed') assert _config == { 'a': 1, 'sub_sub_ing': {'d': 3}, 'sub_ing': {'c': 2}, 'ing': {'b': 1} }, _config ing_main() sub_ing_main() sub_sub_ing_main() ex.run()
def test_additional_gatherers(): @host_info_gatherer("hello") def get_hello(): return "hello world" experiment = Experiment("ator3000", additional_host_info=[get_hello]) @experiment.main def foo(): pass experiment.run() assert experiment.current_run.host_info["hello"] == "hello world"
def test_config_docs_are_preserved(ing): @ing.config def ing_cfg(): a = 5 # documented entry ex = Experiment(ingredients=[ing]) @ex.main def run(): return 5 run = ex._create_run() assert 'tickle.a' in run.config_modifications.docs assert run.config_modifications.docs['tickle.a'] == 'documented entry'
def test_ingredient_command(): m = Ingredient("somemod") m.add_config(a=42, b='foo{}') @m.command def transmogrify(a, b): return b.format(a) assert 'transmogrify' in m.commands assert m.commands['transmogrify'] == transmogrify ex = Experiment('foo', ingredients=[m]) assert ex.run_command('somemod.transmogrify').result == 'foo42'
def test_parse_tinydboption_apply(tmpdir): exp = Experiment() args = os.path.join(tmpdir.strpath) TinyDbOption.apply(args, exp) assert type(exp.observers[0]) == TinyDbObserver
def test_additional_cli_options(command_line_option): executed = [False] @cli_option("-w", "--warning") def dummy_option(args, run): executed[0] = args experiment = Experiment("ator3000", additional_cli_options=[dummy_option]) @experiment.main def foo(): pass experiment.run_commandline([__file__, command_line_option, "10"]) assert executed[0] == "10"
def test_experiment_run_access_subingredient(): somemod = Ingredient("somemod") @somemod.config def cfg(): a = 5 b = 'foo' ex = Experiment("some_experiment", ingredients=[somemod]) @ex.main def main(somemod): return somemod r = ex.run().result assert r['a'] == 5 assert r['b'] == 'foo'
def test_experiment_run_subingredient_function(): somemod = Ingredient("somemod") @somemod.config def cfg(): a = 5 b = 'foo' @somemod.capture def get_answer(b): return b ex = Experiment("some_experiment", ingredients=[somemod]) @ex.main def main(): return get_answer() assert ex.run().result == 'foo'
def test_experiment_named_config_subingredient_overwrite(): somemod = Ingredient("somemod") @somemod.capture def get_answer(a): return a ex = Experiment("some_experiment", ingredients=[somemod]) @ex.named_config def ncfg(): somemod = {'a': 1} @ex.main def main(): return get_answer() assert ex.run(named_configs=['ncfg']).result == 1 assert ex.run(config_updates={'somemod': {'a': 2}}).result == 2 assert ex.run(named_configs=['ncfg'], config_updates={'somemod': {'a': 2}} ).result == 2
def test_named_config_and_ingredient(): ing = Ingredient('foo') @ing.config def cfg(): a = 10 ex = Experiment(ingredients=[ing]) @ex.config def default(): b = 20 @ex.named_config def named(): b = 30 @ex.main def main(): pass r = ex.run(named_configs=['named']) assert r.config['b'] == 30 assert r.config['foo'] == {'a': 10}
def test_named_config_and_ingredient(): ing = Ingredient("foo") @ing.config def cfg(): a = 10 ex = Experiment(ingredients=[ing]) @ex.config def default(): b = 20 @ex.named_config def named(): b = 30 @ex.main def main(): pass r = ex.run(named_configs=["named"]) assert r.config["b"] == 30 assert r.config["foo"] == {"a": 10}
def ex(): return Experiment('ator3000')
from sacred.experiment import Experiment ex = Experiment('named_configs_demo') @ex.config def cfg(): a = 10 b = 3 * a c = "foo" @ex.named_config def variant1(): a = 100 c = "bar" @ex.main def my_main(a: int): print(a) if __name__ == "__main__": ex.run_commandline()
from sacred.experiment import Experiment from carbrain.datasets import DATASET_LIBRARY from carbrain.datasets.util import AnnotationType ex = Experiment('CenterNet') @ex.config def config(): dataset = 'nuscenes' dataset_config = {'split': 'v1.0-mini'} # check that we use a dataset which is capable of supplying 2D bounding boxes available_annotation_types = DATASET_LIBRARY[dataset].available_annotation_types if AnnotationType.OBJECT_DETECTION_2D not in available_annotation_types: raise ValueError('The dataset {} does not supply 2D bounding boxes.'.format(dataset)) @ex.automain def train(_config, _log, _seed): transforms = dataset = DATASET_LIBRARY[_config['dataset']](**_config['dataset_config'])
def ex(): return Experiment("ator3000")