Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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())
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
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), [])
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
    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))
Ejemplo n.º 9
0
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
        """))
Ejemplo n.º 10
0
#!/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 = {
Ejemplo n.º 11
0
 def s_parser(file_name) -> simple_parsing.ArgumentParser:
     return _with_default_args(
         simple_parsing.ArgumentParser(conflict_resolution=ConflictResolution.EXPLICIT),
         file_name)
Ejemplo n.º 12
0
 def parse(cls):
     parser = simple_parsing.ArgumentParser()
     parser.add_arguments(cls, dest="parameters")
     args = parser.parse_args()
     instance: Parameters = args.parameters
     return instance
Ejemplo n.º 13
0
        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)