Exemplo n.º 1
0
def test_user_override(config):
    apply_user_overrides(
        config, [('biz', '12'), ('e.f', 'range(4)'), ('g.h.i', 'zip("abc", range(3))')]
    )
    assert config['foo.bar.biz'] == 12.0
    assert config['d.e.f'] == [0, 1, 2, 3]
    assert config['g.h.i'] == {'a': 0, 'b': 1, 'c': 2}
Exemplo n.º 2
0
def test_user_override(config):
    apply_user_overrides(config, [
        ('biz', '12'),
        ('e.f', 'range(4)'),
        ('g.h.i', 'zip("abc", range(3))'),
    ])
    assert config['foo.bar.biz'] == 12.0
    assert config['d.e.f'] == [0, 1, 2, 3]
    assert config['g.h.i'] == {'a': 0, 'b': 1, 'c': 2}
Exemplo n.º 3
0
def test_user_override_bool(config):
    apply_user_overrides(config, [('def.baz', '1')])
    assert config['abc.def.baz'] is True
    apply_user_overrides(config, [('def.baz', 'True')])
    assert config['abc.def.baz'] is True
    apply_user_overrides(config, [('def.baz', 'False')])
    assert config['abc.def.baz'] is False
Exemplo n.º 4
0
def test_user_override_bool(config):
    apply_user_overrides(config, [('def.baz', '1')])
    assert config['abc.def.baz'] is True
    apply_user_overrides(config, [('def.baz', 'True')])
    assert config['abc.def.baz'] is True
    apply_user_overrides(config, [('def.baz', 'False')])
    assert config['abc.def.baz'] is False
Exemplo n.º 5
0
def test_user_override_str(config):
    apply_user_overrides(config, [('a.b.c', 'just a string')])
    assert config['a.b.c'] == 'just a string'
Exemplo n.º 6
0
def test_user_override_int_invalid(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('bar.baz', 'eighteen')])
Exemplo n.º 7
0
def test_user_override_int(config):
    apply_user_overrides(config, [('bar.baz', '18')])
    assert config['foo.bar.baz'] == 18
Exemplo n.º 8
0
def test_user_override_int(config):
    apply_user_overrides(config, [('bar.baz', '18')])
    assert config['foo.bar.baz'] == 18
Exemplo n.º 9
0
def main(argv=None):
    """Command line interface for running grocery simulations.

    This function handles command line parsing, configuration setup, and
    launching simulations.

    """
    parser = argparse.ArgumentParser()
    version = get_version()
    parser.add_argument(
        '--version', '-V', action='version', version=version,
        help='Show version and exit.')
    parser.add_argument(
        '--named', '-n', metavar='GROUP', dest='named_configs',
        action='append', default=[],
        help='Use named configuration %(metavar)s.')
    parser.add_argument(
        '--set', '-s', nargs=2, metavar=('KEY', 'VALUE'),
        action='append', default=[], dest='config_overrides',
        help='Override configuration KEY with VALUE expression.')
    parser.add_argument(
        '--factor', '-f', nargs=2, metavar=('KEYS', 'VALUES'),
        action='append', default=[], dest='factors',
        help='Add factorial KEYS with VALUES list of value expressions.')
    parser.add_argument(
        '--config', '-c', metavar='YAML', type=argparse.FileType('r'),
        action='append', default=[], dest='config_files',
        help='Read configuration from YAML file.')
    parser.add_argument(
        '--print-config', action='store_true',
        help='Print configuration and exit.')
    parser.add_argument(
        '--print-named', action='store_true',
        help='Print named configuration groups and exit.')

    extra_argv = shlex.split(os.environ.get('SB_EXTRA', ''))

    if argv is None:
        argv = sys.argv[1:]

    args = parser.parse_args(extra_argv + argv)

    if len(args.config_files) > 1 and args.factors:
        parser.error('argument --factor/-f: not allowed with multiple '
                     '--config/-c arguments')

    if args.print_named:
        print_named(named, sys.stdout)
        parser.exit()

    configs = []

    try:
        if args.config_files:
            named_overrides = named.resolve(*args.named_configs)
            for config_file in args.config_files:
                config = named.resolve('default')
                apply_user_config(config, parse_config_file(config_file))
                config.update(named_overrides)
                apply_user_overrides(config, args.config_overrides)
                configs.append(config)
        else:
            config = named.resolve('default', *args.named_configs)
            apply_user_overrides(config, args.config_overrides)
            configs.append(config)

        factors = parse_user_factors(configs[0], args.factors)
    except ConfigError as e:
        parser.error(str(e))

    if args.print_config:
        yaml.safe_dump_all(configs, stream=sys.stdout)
        parser.exit()

    try:
        if len(configs) == 1:
            config = configs[0]
            if factors:
                results = simulate_factors(config, factors, Top, Environment)
                return check_errors(results)
            else:
                simulate(config, Top, Environment)
        else:
            results = simulate_many(configs, Top, Environment)
            return check_errors(results)
    except KeyboardInterrupt:
        print("\nInterrupted by user", file=sys.stderr)
        return 1
Exemplo n.º 10
0
def test_user_override_invalid_value(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('baz', '1')])
Exemplo n.º 11
0
def test_user_override_type_mismatch(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('d.e.f', 'os.system("clear")')])
Exemplo n.º 12
0
def test_user_override_str_int(config):
    apply_user_overrides(config, [('a.b.c', '123')])
    assert config['a.b.c'] == '123'
Exemplo n.º 13
0
def test_user_override_str(config):
    apply_user_overrides(config, [('a.b.c', 'just a string')])
    assert config['a.b.c'] == 'just a string'
Exemplo n.º 14
0
def test_user_override_int_invalid(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('bar.baz', 'eighteen')])
Exemplo n.º 15
0
def test_user_override_str_int(config):
    apply_user_overrides(config, [('a.b.c', '123')])
    assert config['a.b.c'] == '123'
Exemplo n.º 16
0
def test_user_override_type_mismatch(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('d.e.f', 'os.system("clear")')])
Exemplo n.º 17
0
def test_user_override_invalid_value(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('baz', '1')])
Exemplo n.º 18
0
def test_user_override_invalid_key(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('not.a.key', '1')])
Exemplo n.º 19
0
def test_user_override_invalid_key(config):
    with pytest.raises(ConfigError):
        apply_user_overrides(config, [('not.a.key', '1')])
Exemplo n.º 20
0
    }

    parser = ArgumentParser()
    parser.add_argument(
        '--set',
        '-s',
        nargs=2,
        metavar=('KEY', 'VALUE'),
        action='append',
        default=[],
        dest='config_overrides',
        help='Override config KEY with VALUE expression',
    )
    parser.add_argument(
        '--factor',
        '-f',
        nargs=2,
        metavar=('KEYS', 'VALUES'),
        action='append',
        default=[],
        dest='factors',
        help='Add multi-factor VALUES for KEY(S)',
    )
    args = parser.parse_args()
    apply_user_overrides(config, args.config_overrides)
    factors = parse_user_factors(config, args.factors)
    if factors:
        simulate_factors(config, factors, Top)
    else:
        simulate(config, Top)
Exemplo n.º 21
0
        'sim.duration': '7200 s',
        'sim.gtkw.file': 'sim.gtkw',
        'sim.gtkw.live': False,
        'sim.log.enable': True,
        'sim.progress.enable': False,
        'sim.result.file': 'result.json',
        'sim.seed': 1234,
        'sim.timescale': 's',
        'sim.vcd.dump_file': 'sim.vcd',
        'sim.vcd.enable': True,
        'sim.vcd.persist': False,
        'sim.workspace': 'workspace',
    }

    parser = ArgumentParser()
    parser.add_argument(
        '--set', '-s', nargs=2, metavar=('KEY', 'VALUE'),
        action='append', default=[], dest='config_overrides',
        help='Override config KEY with VALUE expression')
    parser.add_argument(
        '--factor', '-f', nargs=2, metavar=('KEYS', 'VALUES'),
        action='append', default=[], dest='factors',
        help='Add multi-factor VALUES for KEY(S)')
    args = parser.parse_args()
    apply_user_overrides(config, args.config_overrides)
    factors = parse_user_factors(config, args.factors)
    if factors:
        simulate_factors(config, factors, Top)
    else:
        simulate(config, Top)