def _get_parser()

in scenarios/classification/tools/sweep.py [0:0]


def _get_parser(default_params: Dict[str, List[Any]]) -> Namespace:
    """ Get parser for this script. """
    parser = argparse.ArgumentParser(
        description=argparse_desc_msg,
        epilog=argparse_epilog_msg(default_params=default_params),
        formatter_class=RawTextHelpFormatter,
    )
    parser.add_argument(
        "--learning-rate",
        "-lr",
        dest="learning_rates",
        nargs="+",
        help="Learning rate - recommended options: [1e-3, 1e-4, 1e-5] ",
        type=float,
    )
    parser.add_argument(
        "--epoch",
        "-e",
        dest="epochs",
        nargs="+",
        help="Epochs - recommended options: [3, 5, 10, 15]",
        type=int,
    )
    parser.add_argument(
        "--batch-size",
        "-bs",
        dest="batch_sizes",
        nargs="+",
        help="Batch sizes - recommended options: [8, 16, 32, 64]",
        type=int,
    )
    parser.add_argument(
        "--im-size",
        "-is",
        dest="im_sizes",
        nargs="+",
        help="Image sizes - recommended options: [299, 499]",
        type=int,
    )
    parser.add_argument(
        "--architecture",
        "-a",
        dest="architectures",
        nargs="+",
        choices=["squeezenet1_1", "resnet18", "resnet34", "resnet50"],
        help="Choose an architecture.",
        type=str,
    )
    parser.add_argument(
        "--transform",
        "-t",
        dest="transforms",
        nargs="+",
        help="Tranform (data augmentation) - options: [True, False]",
        type=_str_to_bool,
    )
    parser.add_argument(
        "--dropout",
        "-d",
        dest="dropouts",
        nargs="+",
        help="Dropout - recommended options: [0.5]",
        type=float,
    )
    parser.add_argument(
        "--weight-decay",
        "-wd",
        dest="weight_decays",
        nargs="+",
        help="Weight decay - recommended options: [0.01]",
        type=float,
    )
    parser.add_argument(
        "--training-schedule",
        "-ts",
        dest="training_schedules",
        nargs="+",
        choices=["head_only", "body_only", "head_first_then_body"],
        help="Choose a training schedule",
        type=str,
    )
    parser.add_argument(
        "--discriminative-lr",
        "-dl",
        dest="discriminative_lrs",
        nargs="+",
        help="Discriminative learning rate - options: [True, False]. To use discriminative learning rates, training schedule must not be 'head_only'",
        choices=["True", "False"],
        type=_str_to_bool,
    )
    parser.add_argument(
        "--one-cycle-policy",
        "-ocp",
        dest="one_cycle_policies",
        nargs="+",
        help="one cycle policy - options: [True, False]",
        type=_str_to_bool,
    )
    parser.add_argument(
        "--inputs",
        "-i",
        dest="inputs",
        nargs="+",
        help="A list of data paths to run the tests on. The datasets must be structured so that each class is in a separate folder.",
        type=str,
    )
    parser.add_argument(
        "--early-stopping",
        dest="early_stopping",
        action="store_true",
        help="Stop training early if possible",
    )
    parser.add_argument(
        "--repeat",
        "-r",
        dest="repeat",
        help="The number of times to repeat each permutation",
        type=int,
    )
    parser.add_argument(
        "--output", "-o", dest="output", help="The path of the output file."
    )
    parser.set_defaults(
        repeat=3, early_stopping=False, inputs=None, benchmark=False
    )
    args = parser.parse_args()

    # if discriminative lr is on, we cannot have a 'head_only'
    # training_schedule
    if args.discriminative_lrs is not None and True in args.discriminative_lrs:
        assert "head_only" not in args.training_schedules

    # get mapping of architecture enum: ex. "resnet34" -->
    # Architecture.resnet34 -> models.resnet34
    if args.architectures is not None:
        args.architectures = [Architecture[a] for a in args.architectures]

    # get mapping of training enum: ex. "head_only" -->
    # TrainingSchedule.head_only --> 0
    if args.training_schedules is not None:
        args.training_schedules = [
            TrainingSchedule[t] for t in args.training_schedules
        ]

    return args