Пример #1
0
def get_args_parser():
    parser = ArgumentParser(prog='baseline tracker')

    parser.add_argument('--checkpoint', type=str, default="",
                        help="checkpoint model for inference")
    parser.add_argument('--search_size', type=int, default=255,
                        help="size of the template image")

    postprocess_parser = ArgumentParser(prog='post process')
    postprocess_parser.add_argument('--score_threshold', type=float, default=0.05,
                                    help='the lower score threshold to identify a target (score_target > threshold) ')
    postprocess_parser.add_argument('--window_steps', type=int, default=3,
                                    help='the pyramid factor to gradually reduce the widow effect')
    postprocess_parser.add_argument('--window_factor', type=float, default=0.4,
                                    help='the factor of the hanning window for heatmap post process')
    postprocess_parser.add_argument('--tracking_size_penalty_k', type=float, default=0.04,
                                    help='the factor to penalize the change of size')
    postprocess_parser.add_argument('--tracking_size_lpf', type=float, default=0.8,
                                    help='the factor of the lpf for size tracking')
    postprocess_parser.add_argument('--multi_frame', type=bool, default=False,
                                    help="(Deprecated) use multi frame for encoder (template images)")
    parser.add_argument('--postprocess', action=ActionParser(parser=postprocess_parser))

    # TrTr
    parser.add_argument('--model', action=ActionParser(parser=trtr_args_parser()))

    return parser
    def test_subcommand_with_subclass_default_override_lightning_issue_10859(
            self):
        class Arch:
            def __init__(self, a: int = 1):
                pass

        class ArchB(Arch):
            def __init__(self, a: int = 2, b: int = 3):
                pass

        class ArchC(Arch):
            def __init__(self, a: int = 4, c: int = 5):
                pass

        parser = ArgumentParser(error_handler=None)
        parser_subcommands = parser.add_subcommands()
        subparser = ArgumentParser()
        subparser.add_argument('--arch', type=Arch)

        with mock_module(Arch, ArchB, ArchC) as module:
            default = {'class_path': f'{module}.ArchB'}
            value = {
                'class_path': f'{module}.ArchC',
                'init_args': {
                    'a': 10,
                    'c': 11
                }
            }

            subparser.set_defaults(arch=default)
            parser_subcommands.add_subcommand('fit', subparser)

            cfg = parser.parse_args(['fit', f'--arch={json.dumps(value)}'])
            self.assertEqual(cfg.fit.arch.as_dict(), value)
 def test_ActionParser_required(self):
     p1 = ArgumentParser()
     p1.add_argument('--op1', required=True)
     p2 = ArgumentParser(error_handler=None)
     p2.add_argument('--op2', action=ActionParser(parser=p1))
     p2.parse_args(['--op2.op1=1'])
     self.assertRaises(ParserError, lambda: p2.parse_args([]))
Пример #4
0
def get_parser():
    """Returns the argument parser object for the command line tool."""
    ## validate parser ##
    parser_validate = ModuleArchitecture.get_config_parser()
    parser_validate.description = 'Command for checking the validity of neural network module architecture files.'
    parser_validate.set_defaults(propagators='default')
    parser_validate.add_argument(
        'jsonnet_paths',
        action=ActionPath(mode='fr'),
        nargs='+',
        help=
        'Path(s) to neural network module architecture file(s) in jsonnet narchi format.'
    )

    ## render parser ##
    parser_render = ModuleArchitectureRenderer.get_config_parser()
    parser_render.description = 'Command for rendering a neural network module architecture file.'
    parser_render.set_defaults(propagators='default')
    parser_render.add_argument(
        'jsonnet_path',
        action=ActionPath(mode='fr'),
        help=
        'Path to a neural network module architecture file in jsonnet narchi format.'
    )
    parser_render.add_argument(
        'out_file',
        nargs='?',
        action=ActionPath(mode='fc'),
        help=
        'Path where to write the architecture diagram (with a valid extension for pygraphviz draw). If '
        'unset a pdf is saved to the output directory.')

    ## schema parser ##
    parser_schema = ArgumentParser(
        description='Prints a schema as a pretty json.')
    parser_schema.add_argument(
        'schema',
        nargs='?',
        default='narchi',
        choices=[x for x in schemas.keys() if x is not None],
        help='Which of the available schemas to print.')

    ## global parser ##
    parser = ArgumentParser(description=__doc__, version=__version__)
    parser.add_argument(
        '--stack_trace',
        type=bool,
        default=False,
        help='Whether to print stack trace when there are errors.')
    parser.parser_validate = parser_validate
    parser.parser_render = parser_render
    parser.parser_schema = parser_schema

    subcommands = parser.add_subcommands()
    subcommands.add_subcommand('validate', parser_validate)
    subcommands.add_subcommand('render', parser_render)
    subcommands.add_subcommand('schema', parser_schema)

    return parser
 def test_ActionParser_conflict(self):
     parser_lv2 = ArgumentParser()
     parser_lv2.add_argument('--op')
     parser = ArgumentParser(error_handler=None)
     parser.add_argument('--inner.op')
     self.assertRaises(
         ValueError,
         lambda: parser.add_argument('--inner',
                                     action=ActionParser(parser_lv2)))
Пример #6
0
    def test_ActionPath_dump(self):
        parser = ArgumentParser()
        parser.add_argument('--path', action=ActionPath(mode='fc'))
        cfg = parser.parse_string('path: path')
        self.assertEqual(parser.dump(cfg), 'path: path\n')

        parser = ArgumentParser()
        parser.add_argument('--paths', nargs='+', action=ActionPath(mode='fc'))
        cfg = parser.parse_args(['--paths', 'path1', 'path2'])
        self.assertEqual(parser.dump(cfg), 'paths:\n- path1\n- path2\n')
    def test_ActionYesNo(self):
        parser = example_parser()
        defaults = parser.get_defaults()
        self.assertEqual(False, defaults.bools.def_false)
        self.assertEqual(True, defaults.bools.def_true)
        self.assertEqual(
            True,
            parser.parse_args(['--bools.def_false']).bools.def_false)
        self.assertEqual(
            False,
            parser.parse_args(['--no_bools.def_false']).bools.def_false)
        self.assertEqual(
            True,
            parser.parse_args(['--bools.def_true']).bools.def_true)
        self.assertEqual(
            False,
            parser.parse_args(['--no_bools.def_true']).bools.def_true)
        self.assertEqual(
            True,
            parser.parse_args(['--bools.def_false=true']).bools.def_false)
        self.assertEqual(
            False,
            parser.parse_args(['--bools.def_false=false']).bools.def_false)
        self.assertEqual(
            True,
            parser.parse_args(['--bools.def_false=yes']).bools.def_false)
        self.assertEqual(
            False,
            parser.parse_args(['--bools.def_false=no']).bools.def_false)
        self.assertEqual(
            True,
            parser.parse_args(['--no_bools.def_true=no']).bools.def_true)
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--bools.def_true nope']))

        parser = ArgumentParser()
        parser.add_argument('--val', action=ActionYesNo)
        self.assertEqual(True, parser.parse_args(['--val']).val)
        self.assertEqual(False, parser.parse_args(['--no_val']).val)
        parser = ArgumentParser()
        parser.add_argument('--with-val',
                            action=ActionYesNo(yes_prefix='with-',
                                               no_prefix='without-'))
        self.assertEqual(True, parser.parse_args(['--with-val']).with_val)
        self.assertEqual(False, parser.parse_args(['--without-val']).with_val)
        parser = ArgumentParser()
        self.assertRaises(
            ValueError,
            lambda: parser.add_argument('--val',
                                        action=ActionYesNo(yes_prefix='yes_')))
        self.assertRaises(
            ValueError, lambda: parser.add_argument('pos', action=ActionYesNo))
        self.assertRaises(
            ValueError, lambda: parser.add_argument(
                '--val', nargs='?', action=ActionYesNo(no_prefix=None)))
Пример #8
0
    def test_parser_mode_subparsers(self):
        subparser = ArgumentParser()
        parser = ArgumentParser()
        subcommands = parser.add_subcommands()
        subcommands.add_subcommand('sub', subparser)

        with unittest.mock.patch.dict('jsonargparse.loaders_dumpers.loaders'):
            set_loader('custom', yaml.safe_load)
            parser.parser_mode = 'custom'
            self.assertEqual('custom', parser.parser_mode)
            self.assertEqual('custom', subparser.parser_mode)
Пример #9
0
 def test_ActionParser_failures(self):
     parser_lv2 = ArgumentParser()
     parser_lv2.add_argument('--op')
     parser = ArgumentParser(error_handler=None)
     parser.add_argument('--inner', action=ActionParser(parser=parser_lv2))
     self.assertRaises(
         ValueError,
         lambda: parser.add_argument('--mistake',
                                     action=ActionParser(parser=parser)))
     self.assertRaises(ParserError,
                       lambda: parser.parse_args(['--inner=1']))
Пример #10
0
    def test_default_help_formatter(self):
        parser = ArgumentParser(prog='app', default_env=True)
        parser.add_argument('--cfg',
                            help='Config in yaml/json.',
                            action=ActionConfigFile)
        parser.add_argument('--v1',
                            help='Option v1.',
                            default='v1',
                            required=True)
        parser.add_argument('--v2', type=int, help='Option v2.')
        parser.add_argument('--g1.v3', help='Option v3.', default='v3')
        parser.add_argument('--v4', choices=['A', 'B'], help='Option v4.')
        parser2 = ArgumentParser()
        parser2.add_argument('--v4')
        parser.add_argument('--g2', action=ActionParser(parser=parser2))
        parser.add_argument('--v5',
                            action=ActionYesNo,
                            default=True,
                            help='Option v5.')

        out = StringIO()
        parser.print_help(out)
        outval = out.getvalue()

        self.assertIn('--print_config', outval)

        self.assertIn('--cfg CFG', outval)
        self.assertIn('APP_CFG', outval)
        self.assertIn('Config in yaml/json.', outval)

        self.assertIn('--v1 V1', outval)
        self.assertIn('APP_V1', outval)
        self.assertIn('Option v1. (required, default: v1)', outval)

        self.assertIn('--v2 V2', outval)
        self.assertIn('APP_V2', outval)
        self.assertIn('Option v2. (type: int, default: null)', outval)

        self.assertIn('--g1.v3 V3', outval)
        self.assertIn('APP_G1__V3', outval)
        self.assertIn('Option v3. (default: v3)', outval)

        self.assertIn('--v4 {A,B}', outval)
        self.assertIn('APP_V4', outval)
        self.assertIn('Option v4. (default: null)', outval)

        self.assertIn('--g2.v4 V4', outval)
        self.assertIn('APP_G2__V4', outval)

        self.assertIn('--v5, --no_v5', outval)
        self.assertIn('APP_V5', outval)
        self.assertIn('Option v5. (type: bool, default: True)', outval)
 def test_list_path(self):
     parser = ArgumentParser()
     parser.add_argument('--paths', type=List[Path_fc])
     cfg = parser.parse_args(['--paths=["file1", "file2"]'])
     self.assertEqual(['file1', 'file2'], cfg.paths)
     self.assertIsInstance(cfg.paths[0], Path)
     self.assertIsInstance(cfg.paths[1], Path)
    def test_dump_skip_default(self):
        class MyCalendar(Calendar):
            def __init__(self, *args, param: str = '0', **kwargs):
                super().__init__(*args, **kwargs)

        with mock_module(MyCalendar) as module:
            parser = ArgumentParser()
            parser.add_argument('--g1.op1', default=123)
            parser.add_argument('--g1.op2', default='abc')
            parser.add_argument('--g2.op1', default=4.5)
            parser.add_argument('--g2.op2',
                                type=Calendar,
                                default=lazy_instance(Calendar,
                                                      firstweekday=2))

            cfg = parser.get_defaults()
            dump = parser.dump(cfg, skip_default=True)
            self.assertEqual(dump, '{}\n')

            cfg.g2.op2.class_path = f'{module}.MyCalendar'
            dump = parser.dump(cfg, skip_default=True)
            self.assertEqual(
                dump,
                'g2:\n  op2:\n    class_path: jsonargparse_tests.MyCalendar\n    init_args:\n      firstweekday: 2\n'
            )

            cfg.g2.op2.init_args.firstweekday = 0
            dump = parser.dump(cfg, skip_default=True)
            self.assertEqual(
                dump,
                'g2:\n  op2:\n    class_path: jsonargparse_tests.MyCalendar\n')
 def test_nargs_questionmark(self):
     parser = ArgumentParser(error_handler=None)
     parser.add_argument('p1')
     parser.add_argument('p2', nargs='?', type=OpenUnitInterval)
     self.assertIsNone(parser.parse_args(['a']).p2)
     self.assertEqual(0.5, parser.parse_args(['a', '0.5']).p2)
     self.assertRaises(ParserError, lambda: parser.parse_args(['a', 'b']))
    def test_class_type_subclass_nested_help(self):
        class Class:
            def __init__(self, cal: Calendar, p1: int = 0):
                self.cal = cal

        parser = ArgumentParser()
        parser.add_argument('--op', type=Class)

        for pattern in [r'[\s=]', r'\s']:
            with self.subTest('" "' if '=' in pattern else '"="'), mock_module(
                    Class) as module:
                out = StringIO()
                args = re.split(
                    pattern,
                    f'--op.help={module}.Class --op.init_args.cal.help=TextCalendar'
                )
                with redirect_stdout(out), self.assertRaises(SystemExit):
                    parser.parse_args(args)
                self.assertIn('--op.init_args.cal.init_args.firstweekday',
                              out.getvalue())

        with self.subTest('invalid'), mock_module(Class) as module:
            err = StringIO()
            with redirect_stderr(err), self.assertRaises(SystemExit):
                parser.parse_args(
                    [f'--op.help={module}.Class', '--op.init_args.p1=1'])
            self.assertIn('Expected a nested --*.help option', err.getvalue())
Пример #15
0
    def test_ActionJsonnet(self):
        parser = ArgumentParser(default_meta=False, error_handler=None)
        parser.add_argument('--input.ext_vars', action=ActionJsonnetExtVars())
        parser.add_argument('--input.jsonnet',
                            action=ActionJsonnet(
                                ext_vars='input.ext_vars',
                                schema=json.dumps(example_schema)))

        cfg2 = parser.parse_args([
            '--input.ext_vars', '{"param": 123}', '--input.jsonnet',
            example_2_jsonnet
        ])
        self.assertEqual(123, cfg2.input.jsonnet['param'])
        self.assertEqual(9, len(cfg2.input.jsonnet['records']))
        self.assertEqual('#8', cfg2.input.jsonnet['records'][-2]['ref'])
        self.assertEqual(15.5, cfg2.input.jsonnet['records'][-2]['val'])

        cfg1 = parser.parse_args(['--input.jsonnet', example_1_jsonnet])
        self.assertEqual(cfg1.input.jsonnet['records'],
                         cfg2.input.jsonnet['records'])

        self.assertRaises(
            ParserError, lambda: parser.parse_args([
                '--input.ext_vars', '{"param": "a"}', '--input.jsonnet',
                example_2_jsonnet
            ]))
        self.assertRaises(
            ParserError,
            lambda: parser.parse_args(['--input.jsonnet', example_2_jsonnet]))

        self.assertRaises(ValueError, lambda: ActionJsonnet(ext_vars=2))
        self.assertRaises(
            ValueError,
            lambda: ActionJsonnet(schema='.' + json.dumps(example_schema)))
    def test_enum(self):
        class MyEnum(Enum):
            A = 1
            B = 2
            C = 3

        parser = ArgumentParser(error_handler=None)
        parser.add_argument('--enum',
                            type=MyEnum,
                            default=MyEnum.C,
                            help='Description')

        for val in ['A', 'B', 'C']:
            self.assertEqual(MyEnum[val],
                             parser.parse_args(['--enum=' + val]).enum)
        for val in ['X', 'b', 2]:
            self.assertRaises(
                ParserError, lambda: parser.parse_args(['--enum=' + str(val)]))

        cfg = parser.parse_args(['--enum=C'], with_meta=False)
        self.assertEqual('enum: C\n', parser.dump(cfg))

        help_str = StringIO()
        parser.print_help(help_str)
        self.assertIn('Description (type: MyEnum, default: C)',
                      help_str.getvalue())
 def test_list(self):
     for list_type in [Iterable, List, Sequence]:
         with self.subTest(str(list_type)):
             parser = ArgumentParser()
             parser.add_argument('--list', type=list_type[int])
             cfg = parser.parse_args(['--list=[1, 2]'])
             self.assertEqual([1, 2], cfg.list)
Пример #18
0
    def test_ActionJsonnet_save(self):
        parser = ArgumentParser(error_handler=None)
        parser.add_argument('--ext_vars', action=ActionJsonnetExtVars())
        parser.add_argument('--jsonnet',
                            action=ActionJsonnet(ext_vars='ext_vars'))
        parser.add_argument('--cfg', action=ActionConfigFile)

        jsonnet_file = os.path.join(self.tmpdir, 'example.jsonnet')
        with open(jsonnet_file, 'w') as output_file:
            output_file.write(example_2_jsonnet)
        outdir = os.path.join(self.tmpdir, 'output')
        outyaml = os.path.join(outdir, 'main.yaml')
        outjsonnet = os.path.join(outdir, 'example.jsonnet')
        os.mkdir(outdir)

        cfg = parser.parse_args(
            ['--ext_vars', '{"param": 123}', '--jsonnet', jsonnet_file])
        self.assertEqual(str(cfg.jsonnet['__path__']), jsonnet_file)

        parser.save(cfg, outyaml)
        cfg2 = parser.parse_args(['--cfg', outyaml])
        cfg2.cfg = None
        self.assertTrue(os.path.isfile(outyaml))
        self.assertTrue(os.path.isfile(outjsonnet))
        self.assertEqual(strip_meta(cfg), strip_meta(cfg2))

        os.unlink(outyaml)
        os.unlink(outjsonnet)
        parser.save(strip_meta(cfg), outyaml)
        cfg3 = parser.parse_args(['--cfg', outyaml])
        cfg3.cfg = None
        self.assertTrue(os.path.isfile(outyaml))
        self.assertTrue(not os.path.isfile(outjsonnet))
        self.assertEqual(strip_meta(cfg), strip_meta(cfg3))
    def test_class_type_with_default_config_files(self):
        config = {
            'class_path': 'calendar.Calendar',
            'init_args': {
                'firstweekday': 3
            },
        }
        config_path = os.path.join(self.tmpdir, 'config.yaml')
        with open(config_path, 'w') as f:
            json.dump({'data': {'cal': config}}, f)

        class MyClass:
            def __init__(self, cal: Optional[Calendar] = None, val: int = 2):
                self.cal = cal

        parser = ArgumentParser(error_handler=None,
                                default_config_files=[config_path])
        parser.add_argument('--op', default='from default')
        parser.add_class_arguments(MyClass, 'data')

        cfg = parser.get_defaults()
        self.assertEqual(config_path, str(cfg['__default_config__']))
        self.assertEqual(cfg.data.cal.as_dict(), config)
        dump = parser.dump(cfg)
        self.assertIn('class_path: calendar.Calendar\n', dump)
        self.assertIn('firstweekday: 3\n', dump)

        cfg = parser.parse_args([])
        self.assertEqual(cfg.data.cal.as_dict(), config)
        cfg = parser.parse_args(['--data.cal.class_path=calendar.Calendar'],
                                defaults=False)
        self.assertEqual(cfg.data.cal,
                         Namespace(class_path='calendar.Calendar'))
Пример #20
0
 def get_parser_lv2():
     parser_lv2 = ArgumentParser(description='parser_lv2 description')
     parser_lv2.add_argument('--a1', help='lv2_a1 help')
     group_lv2 = parser_lv2.add_argument_group(
         description='group_lv2 description')
     group_lv2.add_argument('--a2', help='lv2_a2 help')
     return parser_lv2
    def test_class_path_override_with_default_config_files(self):
        class MyCalendar(Calendar):
            def __init__(self, *args, param: str = '0', **kwargs):
                super().__init__(*args, **kwargs)

        with mock_module(MyCalendar) as module:
            config = {
                'class_path': f'{module}.MyCalendar',
                'init_args': {
                    'firstweekday': 2,
                    'param': '1'
                },
            }
            config_path = os.path.join(self.tmpdir, 'config.yaml')
            with open(config_path, 'w') as f:
                json.dump({'cal': config}, f)

            parser = ArgumentParser(error_handler=None,
                                    default_config_files=[config_path])
            parser.add_argument('--cal', type=Optional[Calendar])

            cfg = parser.instantiate_classes(parser.get_defaults())
            self.assertIsInstance(cfg['cal'], MyCalendar)

            cfg = parser.parse_args([
                '--cal={"class_path": "calendar.Calendar", "init_args": {"firstweekday": 3}}'
            ])
            self.assertEqual(type(parser.instantiate_classes(cfg)['cal']),
                             Calendar)
Пример #22
0
def get_args_parser():
    parser = ArgumentParser(prog='benchmark dataset evaluation')
    parser.add_argument('--tracker_path',
                        '-p',
                        type=str,
                        default='results',
                        help='tracker result path')
    parser.add_argument('--dataset',
                        '-d',
                        type=str,
                        default='VOT2018',
                        choices=('VOT2018', 'VOT2019', 'VOT2020', 'OTB', 'UAV',
                                 'NFS', 'TrackingNet', 'LaSOT', 'GOT-10k'),
                        help='the name of benchmark')
    parser.add_argument('--num',
                        '-n',
                        default=1,
                        type=int,
                        help='number of thread to eval')
    parser.add_argument('--tracker_prefix',
                        '-t',
                        default='',
                        type=str,
                        help='tracker name')
    parser.add_argument('--draw_plot', action='store_true')
    parser.add_argument('--bold_trackers', default=[], nargs='+')
    parser.add_argument('--show_video_level',
                        '-s',
                        dest='show_video_level',
                        action='store_true')
    parser.set_defaults(show_video_level=False)
    return parser
    def test_dict_union(self):
        class MyEnum(Enum):
            ab = 1

        parser = ArgumentParser(error_handler=None)
        parser.add_argument('--dict1',
                            type=Dict[int, Optional[Union[float, MyEnum]]])
        parser.add_argument('--dict2', type=Dict[str, Union[bool, Path_fc]])
        cfg = parser.parse_args(
            ['--dict1={"2":4.5, "6":"ab"}', '--dict2={"a":true, "b":"f"}'])
        self.assertEqual({2: 4.5, 6: MyEnum.ab}, cfg['dict1'])
        self.assertEqual({'a': True, 'b': 'f'}, cfg['dict2'])
        self.assertIsInstance(cfg['dict2']['b'], Path)
        self.assertEqual({5: None},
                         parser.parse_args(['--dict1={"5":null}'])['dict1'])
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--dict1=["a", "b"]']))
        cfg = yaml.safe_load(parser.dump(cfg))
        self.assertEqual(
            {
                'dict1': {
                    '2': 4.5,
                    '6': 'ab'
                },
                'dict2': {
                    'a': True,
                    'b': 'f'
                }
            }, cfg)
Пример #24
0
def parse_args():
    """Parse command-line arguments."""
    parser = ArgumentParser()
    parser.add_argument("data_dir", type=str)
    parser.add_argument("--n_workers", type=int, default=8)
    parser.add_argument("--save_dir", type=str, default=".")
    parser.add_argument("--comment", type=str)

    parser.add_argument("--frames_per_sample", type=int, default=40)
    parser.add_argument("--frames_per_slice", type=int, default=8)
    parser.add_argument("--bits", type=int, default=9)
    parser.add_argument("--conditioning_channels", type=int, default=128)
    parser.add_argument("--embedding_dim", type=int, default=256)
    parser.add_argument("--rnn_channels", type=int, default=896)
    parser.add_argument("--fc_channels", type=int, default=512)
    parser.add_argument("--batch_size", type=int, default=32)
    parser.add_argument("--n_steps", type=int, default=100000)
    parser.add_argument("--valid_every", type=int, default=1000)
    parser.add_argument("--valid_ratio", type=float, default=0.1)
    parser.add_argument("--save_every", type=int, default=10000)
    parser.add_argument("--learning_rate", type=float, default=4e-4)
    parser.add_argument("--decay_every", type=int, default=20000)
    parser.add_argument("--decay_gamma", type=float, default=0.5)
    parser.add_argument("--training_config", action=ActionConfigFile)

    return parser.parse_args()
Пример #25
0
    def test_ActionParser_nested_dash_names(self):
        p1 = ArgumentParser(error_handler=None)
        p1.add_argument('--op1-like')

        p2 = ArgumentParser(error_handler=None)
        p2.add_argument('--op2-like', action=ActionParser(parser=p1))

        self.assertEqual(
            p2.parse_args(['--op2-like.op1-like=a']).op2_like.op1_like, 'a')

        p3 = ArgumentParser(error_handler=None)
        p3.add_argument('--op3', action=ActionParser(parser=p2))

        self.assertEqual(
            p3.parse_args(['--op3.op2-like.op1-like=b']).op3.op2_like.op1_like,
            'b')
 def _test_typehint_non_parameterized_types(self, type):
     parser = ArgumentParser(error_handler=None)
     ActionTypeHint.is_supported_typehint(type, full=True)
     parser.add_argument('--type', type=type)
     cfg = parser.parse_args(['--type=uuid.UUID'])
     self.assertEqual(cfg.type, uuid.UUID)
     self.assertEqual(parser.dump(cfg), 'type: uuid.UUID\n')
Пример #27
0
    def test_ActionYesNo_parse_env(self):
        parser = example_parser()
        self.assertEqual(
            True,
            parser.parse_env({
                'APP_BOOLS__DEF_FALSE': 'true'
            }).bools.def_false)
        self.assertEqual(
            True,
            parser.parse_env({
                'APP_BOOLS__DEF_FALSE': 'yes'
            }).bools.def_false)
        self.assertEqual(
            False,
            parser.parse_env({
                'APP_BOOLS__DEF_TRUE': 'false'
            }).bools.def_true)
        self.assertEqual(
            False,
            parser.parse_env({
                'APP_BOOLS__DEF_TRUE': 'no'
            }).bools.def_true)

        parser = ArgumentParser(default_env=True, env_prefix='APP')
        parser.add_argument('--op', action=ActionYesNo, default=False)
        self.assertEqual(True, parser.parse_env({'APP_OP': 'true'}).op)
    def test_class_type_subclass_given_by_name_issue_84(self):
        class LocalCalendar(Calendar):
            pass

        parser = ArgumentParser()
        parser.add_argument('--op', type=Union[Calendar, GzipFile, None])
        cfg = parser.parse_args(['--op=TextCalendar'])
        self.assertEqual(cfg.op.class_path, 'calendar.TextCalendar')

        out = StringIO()
        parser.print_help(out)
        for class_path in [
                'calendar.Calendar', 'calendar.TextCalendar', 'gzip.GzipFile'
        ]:
            self.assertIn(class_path, out.getvalue())
        self.assertNotIn('LocalCalendar', out.getvalue())

        class HTMLCalendar(Calendar):
            pass

        with mock_module(HTMLCalendar) as module:
            err = StringIO()
            with redirect_stderr(err), self.assertRaises(SystemExit):
                parser.parse_args(['--op.help=HTMLCalendar'])
            self.assertIn('Give the full class path to avoid ambiguity',
                          err.getvalue())
            self.assertIn(f'{module}.HTMLCalendar', err.getvalue())
Пример #29
0
 def add_subcommand_from_function(self,
                                  subcommands,
                                  function,
                                  function_name=None):
     subcommand = ArgumentParser()
     if get_kwarg_name(function) == "data_module_kwargs":
         datamodule_function = class_from_function(
             function, return_type=self.local_datamodule_class)
         subcommand.add_class_arguments(
             datamodule_function,
             fail_untyped=False,
             skip={
                 "self",
                 "train_dataset",
                 "val_dataset",
                 "test_dataset",
                 "predict_dataset",
                 "train_input",
                 "val_input",
                 "test_input",
                 "predict_input",
                 "input",
                 "input_transform",
             },
         )
     else:
         datamodule_function = class_from_function(
             drop_kwargs(function), return_type=self.local_datamodule_class)
         subcommand.add_class_arguments(datamodule_function,
                                        fail_untyped=False)
     subcommand_name = function_name or function.__name__
     subcommands.add_subcommand(subcommand_name, subcommand)
     self._subcommand_builders[subcommand_name] = function
    def test_bool(self):
        parser = ArgumentParser(prog='app',
                                default_env=True,
                                error_handler=None)
        parser.add_argument('--val', type=bool)
        self.assertEqual(None, parser.get_defaults().val)
        self.assertEqual(True, parser.parse_args(['--val', 'true']).val)
        self.assertEqual(True, parser.parse_args(['--val', 'TRUE']).val)
        self.assertEqual(False, parser.parse_args(['--val', 'false']).val)
        self.assertEqual(False, parser.parse_args(['--val', 'FALSE']).val)
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--val', '1']))

        os.environ['APP_VAL'] = 'true'
        self.assertEqual(True, parser.parse_args([]).val)
        os.environ['APP_VAL'] = 'True'
        self.assertEqual(True, parser.parse_args([]).val)
        os.environ['APP_VAL'] = 'false'
        self.assertEqual(False, parser.parse_args([]).val)
        os.environ['APP_VAL'] = 'False'
        self.assertEqual(False, parser.parse_args([]).val)
        os.environ['APP_VAL'] = '2'
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--val', 'a']))
        del os.environ['APP_VAL']