def test_ActionJsonSchema(self):
        parser = ArgumentParser(prog='app', default_meta=False, error_handler=None)
        parser.add_argument('--op1',
            action=ActionJsonSchema(schema=schema1))
        parser.add_argument('--op2',
            action=ActionJsonSchema(schema=schema2))
        parser.add_argument('--op3',
            action=ActionJsonSchema(schema=schema3))
        parser.add_argument('--cfg',
            action=ActionConfigFile)

        op1_val = [1, 2, 3, 4]
        op2_val = {'k1': 'one', 'k2': 2, 'k3': 3.3}

        self.assertEqual(op1_val, parser.parse_args(['--op1', str(op1_val)]).op1)
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1, "two"]']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1.5, 2]']))

        self.assertEqual(op2_val, parser.parse_args(['--op2', str(op2_val)]).op2)
        self.assertEqual(17, parser.parse_args(['--op2', '{"k2": 2}']).op2['k3'])
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k1": 1}']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k2": "2"}']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k4": 4}']))

        op1_file = os.path.join(self.tmpdir, 'op1.json')
        op2_file = os.path.join(self.tmpdir, 'op2.json')
        cfg1_file = os.path.join(self.tmpdir, 'cfg1.yaml')
        cfg3_file = os.path.join(self.tmpdir, 'cfg3.yaml')
        cfg2_str = 'op1:\n  '+str(op1_val)+'\nop2:\n  '+str(op2_val)+'\n'
        with open(op1_file, 'w') as f:
            f.write(str(op1_val))
        with open(op2_file, 'w') as f:
            f.write(str(op2_val))
        with open(cfg1_file, 'w') as f:
            f.write('op1:\n  '+op1_file+'\nop2:\n  '+op2_file+'\n')
        with open(cfg3_file, 'w') as f:
            f.write('op3:\n  n1:\n  - '+str(op2_val)+'\n')

        cfg = parser.parse_path(cfg1_file)
        self.assertEqual(op1_val, cfg['op1'])
        self.assertEqual(op2_val, cfg['op2'])

        cfg = parser.parse_string(cfg2_str)
        self.assertEqual(op1_val, cfg['op1'])
        self.assertEqual(op2_val, cfg['op2'])

        cfg = parser.parse_args(['--cfg', cfg3_file])
        self.assertEqual(op2_val, cfg.op3['n1'][0])
        parser.check_config(cfg, skip_none=True)

        if os.name == 'posix' and platform.python_implementation() == 'CPython':
            os.chmod(op1_file, 0)
            self.assertRaises(ParserError, lambda: parser.parse_path(cfg1_file))
Esempio n. 2
0
def read_config(args: Optional[List[str]]) -> SimpleNamespace:
    """
    Parse command line arguments and return a JSON object.
    :returns: benchmark configuration.
    """
    parser = ArgumentParser()
    parser.add_argument("config",
                        action=ActionJsonSchema(schema=SCHEMA),
                        help="%s")
    config = parser.parse_args(args).config
    return config
    def test_ActionJsonSchema_help(self):
        parser = ArgumentParser()
        parser.add_argument('--op1',
            action=ActionJsonSchema(schema=schema1),
            help='schema: %s')

        out = StringIO()
        parser.print_help(out)

        outval = out.getvalue()
        schema = re.sub('^.*schema:([^()]+)[^{}]*$', r'\1', outval.replace('\n', ' '))
        self.assertEqual(schema1, json.loads(schema))
Esempio n. 4
0
def read_config(args: Optional[List[str]]) -> SimpleNamespace:
    """
    Parse command line arguments and return a JSON object.
    :returns: benchmark configuration.
    """
    parser = ArgumentParser()
    parser.add_argument("config",
                        action=ActionJsonSchema(schema=SCHEMA),
                        help="%s")
    config = parser.parse_args(args).config

    # default num_warmup to half of num_sample
    if not hasattr(config, "num_warmup"):
        config.num_warmup = config.iterations // 2

    return config
def get_config(args_list=None):
    """ """
    # load and validate config file
    parser = argparse.ArgumentParser()
    parser.add_argument('config', action=ActionJsonSchema(schema=schema))
    parser.add_argument('updates', nargs='*')
    args = parser.parse_args(args_list)
    args = namespace_to_dict(args)

    # convert config to json-serializable dict object
    config = args['config']
    if '__path__' in config:
        config = {**config, '__path__': config['__path__'].abs_path}
    config = json.loads(json.dumps(config), cls=ScientificNotationDecoder)

    # update config in-place with commandline arguments
    update_config(config, args['updates'])
    return config
Esempio n. 6
0
    def test_parser_mode_jsonnet(self):
        parser = ArgumentParser(parser_mode='jsonnet', error_handler=None)
        parser.add_argument('--cfg', action=ActionConfigFile)
        parser.add_argument('--param', type=int)
        parser.add_argument('--records',
                            action=ActionJsonSchema(schema=records_schema))

        jsonnet_file = os.path.join(self.tmpdir, 'example.jsonnet')
        with open(jsonnet_file, 'w') as output_file:
            output_file.write(example_1_jsonnet)

        cfg = parser.parse_args(['--cfg', jsonnet_file])
        self.assertEqual(654, cfg.param)
        self.assertEqual(9, len(cfg.records))
        self.assertEqual('#8', cfg.records[-2]['ref'])
        self.assertEqual(15.5, cfg.records[-2]['val'])

        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--cfg', '{}}']))
 def test_ActionJsonSchema_failures(self):
     self.assertRaises(ValueError, lambda: ActionJsonSchema())
     self.assertRaises(ValueError, lambda: ActionJsonSchema(schema=':'+json.dumps(schema1)))
Esempio n. 8
0
    def get_config_parser():
        """Returns a ModuleArchitectureRenderer configuration parser."""
        parser = ModuleArchitecture.get_config_parser()
        parser.description = ModuleArchitectureRenderer.__doc__

        # render options #
        group_render = parser.add_argument_group('Rendering related options')
        group_render.add_argument(
            '--save_pdf',
            default=False,
            type=bool,
            help='Whether to write rendered pdf file to output directory.')
        group_render.add_argument(
            '--save_gv',
            default=False,
            type=bool,
            help='Whether to write graphviz file to output directory.')
        group_render.add_argument(
            '--block_attrs',
            default={
                'Default': 'shape=box',
                'Input': 'shape=box, style=rounded, penwidth=1.5',
                'Output': 'shape=box, style=rounded, peripheries=2',
                'Nested': 'shape=box, style=dashed',
                'Shared': 'style=filled',
                'Reshape': 'shape=hexagon',
                'Identity': 'shape=circle, width=0',
                'Add': 'shape=circle, margin=0, width=0'
            },
            action=ActionJsonSchema(schema={
                'type': 'object',
                'items': {
                    'type': 'string'
                }
            }),
            help='Attributes for block nodes.')
        group_render.add_argument(
            '--block_labels',
            default={
                'Identity': '',
                'Add': '+'
            },
            action=ActionJsonSchema(schema={
                'type': 'object',
                'items': {
                    'type': 'string'
                }
            }),
            help='Fixed labels for block nodes.')
        group_render.add_argument('--edge_attrs',
                                  default='fontsize=10',
                                  help='Attributes for edges.')
        group_render.add_argument(
            '--nested_depth',
            default=3,
            action=ActionOperators(expr=('>=', 0)),
            help=
            'Maximum depth for nested subblocks to render. Set to 0 for unlimited.'
        )
        group_render.add_argument(
            '--full_ids',
            default=False,
            type=bool,
            help='Whether block IDs should include parent prefix.')
        group_render.add_argument(
            '--layout_prog',
            choices=['dot', 'neato', 'twopi', 'circo', 'fdp'],
            default='dot',
            help='The graphviz layout method to use.')

        return parser