def parse_options(args: List[str]) -> argparse.Namespace:
    parser = argparse.ArgumentParser(description='Compares stubs to objects introspected from the runtime.')
    parser.add_argument('modules', nargs='*', help='Modules to test')
    parser.add_argument('--concise', action='store_true', help='Make output concise')
    parser.add_argument('--ignore-missing-stub', action='store_true', help='Ignore errors for stub missing things that are present at runtime')
    parser.add_argument('--ignore-positional-only', action='store_true', help="Ignore errors for whether an argument should or shouldn't be positional-only")
    parser.add_argument('--custom-typeshed-dir', metavar='DIR', help='Use the custom typeshed in DIR')
    parser.add_argument('--check-typeshed', action='store_true', help='Check all stdlib modules in typeshed')
    parser.add_argument('--allowlist', '--whitelist', action='append', metavar='FILE', default=[], help='Use file as an allowlist. Can be passed multiple times to combine multiple allowlists. Allowlists can be created with --generate-allowlist')
    parser.add_argument('--generate-allowlist', '--generate-whitelist', action='store_true', help='Print an allowlist (to stdout) to be used with --allowlist')
    parser.add_argument('--ignore-unused-allowlist', '--ignore-unused-whitelist', action='store_true', help='Ignore unused allowlist entries')
    config_group = parser.add_argument_group(title='mypy config file', description='Use a config file instead of command line arguments. Plugins and mypy path are the only supported configurations.')
    config_group.add_argument('--mypy-config-file', help='An existing mypy configuration file, currently used by stubtest to help determine mypy path and plugins')
    return parser.parse_args(args)
def parse_options(args: List[str]) -> argparse.Namespace:
    parser = argparse.ArgumentParser(description='Compares stubs to objects introspected from the runtime.')
    parser.add_argument('modules', nargs='*', help='Modules to test')
    parser.add_argument('--concise', action='store_true', help='Make output concise')
    parser.add_argument('--ignore-missing-stub', action='store_true', help='Ignore errors for stub missing things that are present at runtime')
    parser.add_argument('--ignore-positional-only', action='store_true', help="Ignore errors for whether an argument should or shouldn't be positional-only")
    parser.add_argument('--custom-typeshed-dir', metavar='DIR', help='Use the custom typeshed in DIR')
    parser.add_argument('--check-typeshed', action='store_true', help='Check all stdlib modules in typeshed')
    parser.add_argument('--allowlist', '--whitelist', action='append', metavar='FILE', default=[], help='Use file as an allowlist. Can be passed multiple times to combine multiple allowlists. Allowlists can be created with --generate-allowlist')
    parser.add_argument('--generate-allowlist', '--generate-whitelist', action='store_true', help='Print an allowlist (to stdout) to be used with --allowlist')
    parser.add_argument('--ignore-unused-allowlist', '--ignore-unused-whitelist', action='store_true', help='Ignore unused allowlist entries')
    config_group = parser.add_argument_group(title='mypy config file', description='Use a config file instead of command line arguments. Plugins and mypy path are the only supported configurations.')
    config_group.add_argument('--mypy-config-file', help='An existing mypy configuration file, currently used by stubtest to help determine mypy path and plugins')
    return parser.parse_args(args)