예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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()
예제 #4
0
def test_experiment_run():
    ex = Experiment("some_experiment")

    @ex.main
    def main():
        return 12

    assert ex.run().result == 12
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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'
예제 #8
0
파일: test_modules.py 프로젝트: wjp/sacred
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'
예제 #9
0
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'
예제 #10
0
파일: test_modules.py 프로젝트: wjp/sacred
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'
예제 #11
0
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}
예제 #12
0
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}
예제 #13
0
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()