def _create_argument_parser() -> argparse.ArgumentParser: parser = simple_parsing.ArgumentParser( description="Pynguin is an automatic random unit test generation framework for Python." ) parser.add_argument( "--version", action="version", version="%(prog)s " + __version__ ) parser.add_argument( "-v", "--verbose", action="count", dest="verbosity", default=0, help="verbose output (repeat for increased verbosity)", ) parser.add_argument( "-q", "--quiet", action="store_const", const=-1, default=0, dest="verbosity", help="quiet output", ) parser.add_arguments(Configuration, dest="config") return parser
def test_issue_46(assert_equals_stdout): parser = simple_parsing.ArgumentParser() parser.add_argument("--run_id", type=str) parser.add_arguments(JBuildRelease, dest="jbuild", prefix="jbuild") parser.print_help() assert_equals_stdout( textwrap.dedent("""\ usage: pytest [-h] [--run_id str] --jbuildid int --jbuildurl str --jbuilddocker_image str optional arguments: -h, --help show this help message and exit --run_id str JBuildRelease ['jbuild']: JBuildRelease(id:int, url:str, docker_image:str) --jbuildid int --jbuildurl str --jbuilddocker_image str """)) from .testutils import raises_missing_required_arg with raises_missing_required_arg(): args = parser.parse_args( "--id 123 --jbuild.id 456 --jbuild.url bob --jbuild.docker_image foo" .split())
def _create_argument_parser() -> argparse.ArgumentParser: parser = simple_parsing.ArgumentParser( add_dest_to_option_strings=False, description= "Pynguin is an automatic unit test generation framework for Python", ) parser.add_argument("--version", action="version", version="%(prog)s " + __version__) parser.add_argument( "-v", "--verbose", action="count", dest="verbosity", default=0, help="verbose output (repeat for increased verbosity)", ) parser.add_argument("--log_file", type=str, default=None, help="Path to store the log file.") parser.add_argument( "-q", "--quiet", action="store_const", const=-1, default=0, dest="verbosity", help="quiet output", ) parser.add_arguments(Configuration, dest="config") return parser
def test_conflict_with_regular_argparse_arg(): # This _should_ work, but it doesn't, adding a new issue for this: # the problem: SimpleParsing doesn't yet detect # conflicts between arguments added the usual way with `add_argument` and those # added through `add_arguments`. parser = simple_parsing.ArgumentParser() parser.add_argument("--id", type=str) parser.add_arguments(JBuildRelease, dest="jbuild") args = parser.parse_args( "--id 123 --jbuild.id 456 --jbuild.url bob --jbuild.docker_image foo". split()) assert args.id == 123 assert args.jbuild.id == 456
def setup( cls: Type[Dataclass], arguments: Optional[str] = "", dest: Optional[str] = None, default: Optional[Dataclass] = None, conflict_resolution_mode: ConflictResolution = ConflictResolution.AUTO, add_option_string_dash_variants: bool = False, parse_known_args: bool = False, attempt_to_reorder: bool = False, ) -> Dataclass: """Basic setup for a test. Keyword Arguments: arguments {Optional[str]} -- The arguments to pass to the parser (default: {""}) dest {Optional[str]} -- the attribute where the argument should be stored. (default: {None}) Returns: {cls}} -- the class's type. """ parser = simple_parsing.ArgumentParser( conflict_resolution=conflict_resolution_mode, add_option_string_dash_variants=add_option_string_dash_variants, ) if dest is None: dest = camel_case(cls.__name__) parser.add_arguments(cls, dest=dest, default=default) if arguments is None: if parse_known_args: args = parser.parse_known_args( attempt_to_reorder=attempt_to_reorder) else: args = parser.parse_args() else: splits = shlex.split(arguments) if parse_known_args: args, unknown_args = parser.parse_known_args( splits, attempt_to_reorder=attempt_to_reorder) else: args = parser.parse_args(splits) assert hasattr(args, dest), f"attribute '{dest}' not found in args {args}" instance: Dataclass = getattr(args, dest) # type: ignore delattr(args, dest) assert args == argparse.Namespace( ), f"Namespace has leftover garbage values: {args}" instance = cast(Dataclass, instance) return instance
def test_simpleparse_version_giving_extra_args_to_parent(): parser = simple_parsing.ArgumentParser() parser.add_argument("--foo", type=int, default=3) assert not parser._subparsers subparsers = parser.add_subparsers(title="foo_command") subparser = subparsers.add_parser("boo") subparser.add_argument("--bar", type=int, default=1) subparser.add_argument("--baz", type=int, default=4) args = parser.parse_args("--foo 1 boo --bar 2 --baz 3".split()) assert args == Namespace(foo=1, bar=2, baz=3) args = parser.parse_known_args("boo --bar 2 --baz 3 --foo 1".split(), attempt_to_reorder=True) assert args == (Namespace(foo=1, bar=2, baz=3), [])
def test_workaround(): from simple_parsing import mutable_field, ConflictResolution # This also doesn't work, since the prefix is only added to the 'offending' # argument, rather than to all the args in that group. @dataclass class Main: id: int jbuild: JBuildRelease parser = simple_parsing.ArgumentParser() parser.add_arguments(Main, "main") args = parser.parse_args( "--id 123 --jbuild.id 456 --jbuild.url bob --jbuild.docker_image foo". split()) args = args.main assert args.id == 123 assert args.jbuild.id == 456
def setup_multiple(cls: Type[Dataclass], num_to_parse: int, arguments: Optional[str] = "") -> Tuple[Dataclass, ...]: conflict_resolution_mode: ConflictResolution = ConflictResolution.ALWAYS_MERGE parser = simple_parsing.ArgumentParser( conflict_resolution=conflict_resolution_mode) class_name = camel_case(cls.__name__) for i in range(num_to_parse): parser.add_arguments(cls, f"{class_name}_{i}") if arguments is None: args = parser.parse_args() else: splits = shlex.split(arguments) args = parser.parse_args(splits) return tuple( getattr(args, f"{class_name}_{i}") for i in range(num_to_parse))
def test_issue_46_solution2(assert_equals_stdout): # This (now) works: parser = simple_parsing.ArgumentParser(add_dest_to_option_strings=True) parser.add_argument("--run_id", type=str) parser.add_arguments(JBuildRelease, dest="jbuild", prefix="jbuild.") parser.print_help() assert_equals_stdout( textwrap.dedent("""\ usage: pytest [-h] [--run_id str] --jbuild.id int --jbuild.url str --jbuild.docker_image str optional arguments: -h, --help show this help message and exit --run_id str JBuildRelease ['jbuild']: JBuildRelease(id:int, url:str, docker_image:str) --jbuild.id int --jbuild.url str --jbuild.docker_image str """))
#!/usr/bin/env python3 import pickle import simple_parsing import torch from .experiment import Experiment from .experiment_config import Config, HParams, State from .logs import WandbLogger if __name__ == '__main__': # Prepare experiment settings parser = simple_parsing.ArgumentParser() parser.add_arguments(HParams, dest="hparams") parser.add_arguments(Config, dest="config") parser.add_arguments(State, dest="state") args = parser.parse_args() hparams: HParams = args.hparams config: Config = args.config config.setup_dirs() state: State = args.state state.ce_check_milestones = hparams.ce_target_milestones.copy() # Run experiment device = torch.device('cuda' if hparams.use_cuda else 'cpu') logger = WandbLogger('default', hparams.to_tensorboard_dict(), hparams.wandb_md5) def dump_results(epoch, val_eval, train_eval): results = {
def s_parser(file_name) -> simple_parsing.ArgumentParser: return _with_default_args( simple_parsing.ArgumentParser(conflict_resolution=ConflictResolution.EXPLICIT), file_name)
def parse(cls): parser = simple_parsing.ArgumentParser() parser.add_arguments(cls, dest="parameters") args = parser.parse_args() instance: Parameters = args.parameters return instance
wandb_id = wandb.run.id weights_path = os.path.join(weights_path, f'{wandb_id}.pth') torch.save(features.state_dict(), weights_path) if __name__ == "__main__": @dataclasses.dataclass class PretrainArgs: model: str = 'resnet12' dataset: str = 'mini-imagenet' iterations: int = 150000 ways: int = 5 shots: int = 5 lr: float = 0.01 weight_decay: float = 0.0005 data_augmentation: str = 'jitter' batch_size: int = 32 eval_freq: int = 10 cuda: bool = True seed: int = 1234 use_wandb: bool = True save_weights: bool = False load_weights: str = '' parser = sp.ArgumentParser(add_dest_to_option_strings=True) parser.add_arguments(PretrainArgs, dest='options') args = parser.parse_args() pretrain(args)