Source code for deepsphere.utils.parser

"""Command Line Parser realated functions.
One function creates the parser.
Another function allows hybird usage of:
- a yaml file with predefined parameters
and
- user inputted parameters through the command line.
"""

import argparse

import yaml


[docs]def create_parser(): """Creates a parser with all the variables that can be edited by the user. Returns: parser: a parser for the command line """ parser = argparse.ArgumentParser() parser.add_argument("--config-file", dest="config_file", type=argparse.FileType(mode="r")) parser.add_argument("--pooling_class", default=None, type=str) parser.add_argument("--n_pixels", default=None, type=int) parser.add_argument("--depth", default=None, type=int) parser.add_argument("--laplacian_type", default=None, type=str) parser.add_argument("--type", default=None, type=str) parser.add_argument("--sequence_length", default=None, type=int) parser.add_argument("--prediction_shift", default=None, type=int) parser.add_argument("--partition", default=None, nargs="+") parser.add_argument("--batch_size", default=None, type=int) parser.add_argument("--learning_rate", default=None, type=float) parser.add_argument("--n_epochs", default=None, type=int) parser.add_argument("--kernel_size", default=None, type=int) parser.add_argument("--path_to_data", default=None) parser.add_argument("--model_save_path", default=None) parser.add_argument("--tensorboard_path", default=None) parser.add_argument("--download", default=None, type=bool) parser.add_argument("--means_path", default=None) parser.add_argument("--stds_path", default=None) parser.add_argument("--seed", default=None, type=int) parser.add_argument("--reducelronplateau_mode", default=None) parser.add_argument("--reducelronplateau_factor", default=None, type=float) parser.add_argument("--reducelronplateau_patience", default=None, type=int) parser.add_argument("--steplr_step_size", default=None, type=int) parser.add_argument("--steplr_gamma", default=None, type=float) parser.add_argument("--warmuplr_warmup_start_value", default=None, type=float) parser.add_argument("--warmuplr_warmup_end_value", default=None, type=float) parser.add_argument("--warmuplr_warmup_duration", default=None, type=int) parser.add_argument("--earlystopping_patience", default=None, type=int) parser.add_argument("--gpu", dest="device", nargs="*") return parser
[docs]def parse_config(parser): """Takes the yaml file given through the command line Adds all the yaml file parameters, unless they have already been defined in the command line. Checks all values have been set else raises a Value error. Args: parser (argparse.parser): parser to be updated by the yaml file parameters Raises: ValueError: All fields must be set in the yaml config file or in the command line. Raises error if value is None (was not set). Returns: dict: parsed args of the parser """ args = parser.parse_args() arg_dict = args.__dict__ if args.config_file: data = yaml.load(args.config_file, Loader=yaml.FullLoader) delattr(args, "config_file") arg_dict = args.__dict__ for key, value in data.items(): # add only those not specified by the user through command line if isinstance(value, dict): for tag, element in value.items(): if arg_dict[tag] is None: arg_dict[tag] = element else: if arg_dict[key] is None: arg_dict[key] = value for key, value in arg_dict.items(): if key != "device" and key != "type" and key != "sequence_length" and key != "prediction_shift" and arg_dict[key] is None: raise ValueError("The value of {} is set to None. Please define it in the config yaml file or in the command line.".format(key)) return args