"""
Module that provides options parsing functionality.
Copyright Schrodinger LLC, All Rights Reserved.
"""
import argparse
[docs]def create_argparse_namespace(argv, valid_pos_args, valid_flags, valid_keys):
    """
    Creates an argparse.Namespace object from command line arguments and known
    positional arguments and options.
    :param argv: Command line arguments, including program name
    :type: list of str
    :param valid_pos_args: All recognized positional arguments
    :type: list of str
    :param valid_flags: All recognized flags
    :type: list of str
    :param valid_keys: All recognized keys for key,value pairs
    :type: list of str
    :return: An argument namespace derived from inputs
    :rtype: argparse.Namespace
    """
    argparse_parser = argparse.ArgumentParser(prog=argv[0])
    for pos_arg in valid_pos_args:
        argparse_parser.add_argument(pos_arg)
    for flag in valid_flags:
        argparse_parser.add_argument(flag, action="store_true")
    for key in valid_keys:
        argparse_parser.add_argument(key)
    argparse_namespace, _ = argparse_parser.parse_known_args(argv[1:])
    return argparse_namespace 
[docs]def parse_shape_screen_options(argv):
    """
    Creates shape screen argument namespace from command line options.
    :param argv: Command line arguments, including program name
    :type argv: list of str
    :return: Argument namespace
    :rtype: argparse.Namespace
    """
    valid_pos_args = []
    valid_flags = [
        "-advance", "-append", "-atoms", "-best", "-classic", "-connect",
        "-distinct", "-dual", "-flex", "-flexAppend", "-hydrogens", "-inplace",
        "-LOCAL", "-NICE", "-NOCHECKPOINT", "-NOJOBID", "-nosort", "-nv",
        "-only", "-osd", "-pharm", "-proj", "-scoreInPlace", "-sort", "-split",
        "-stereo", "-table", "-v", "-verbose", "-WAIT", "-IFDX_MODE"
    ]
    valid_keys = [
        "-align", "-alt", "-atomtypes", "-atomTypes", "-atomweights",
        "-atomWeights", "-CHECKPOINT", "-ewin", "-fd", "-filter",
        "-flexAmideOption", "-flexConfsPerBond", "-flexMaxConfs",
        "-flexMaxRelEnergy", "-flexSearchMethod", "-force", "-HOST",
        "-INTERVAL", "-isub", "-JOB", "-keep", "-limit", "-map", "-max",
        "-norm", "-NSUB", "-osub", "-rad", "-redun", "-report", "-RESTART",
        "-sample", "-screen", "-shape", "-title", "-TMDIR", "-xvol"
    ]
    return create_argparse_namespace(argv, valid_pos_args, valid_flags,
                                     valid_keys)