# Generated by pytype, with only minor tweaks. Might be incomplete.

from typing import Any, Optional, List, Callable, Tuple, Dict, Iterable, Union

# See https://groups.google.com/forum/#!topic/python-ideas/gA1gdj3RZ5g
Text = Union[str, unicode]

NO_DEFAULT = ...  # type: Tuple[str, ...]
SUPPRESS_HELP = ...  # type: str
SUPPRESS_USAGE = ...  # type: str

def check_builtin(option: Option, opt, value: Text) -> Any: ...
def check_choice(option: Option, opt, value) -> Any: ...
def isbasestring(x) -> bool: ...

class OptParseError(Exception):
    msg = ...  # type: Any
    def __init__(self, msg) -> None: ...

class BadOptionError(OptParseError):
    opt_str = ...  # type: Any
    def __init__(self, opt_str) -> None: ...

class AmbiguousOptionError(BadOptionError):
    possibilities = ...  # type: Any
    def __init__(self, opt_str, possibilities) -> None: ...

class OptionError(OptParseError):
    msg = ...  # type: Any
    option_id = ...  # type: str
    def __init__(self, msg, option: Option) -> None: ...

class OptionConflictError(OptionError): ...

class HelpFormatter:
    NO_DEFAULT_VALUE = ...  # type: str
    _long_opt_fmt = ...  # type: Union[str, unicode]
    _short_opt_fmt = ...  # type: Union[str, unicode]
    current_indent = ...  # type: int
    default_tag = ...  # type: str
    help_position = ...  # type: Any
    help_width = ...  # type: Any
    indent_increment = ...  # type: Any
    level = ...  # type: int
    max_help_position = ...  # type: int
    option_strings = ...  # type: Dict[Option, str]
    parser = ...  # type: Any
    short_first = ...  # type: Any
    width = ...  # type: Any
    def __init__(self, indent_increment, max_help_position, width, short_first) -> None: ...
    def _format_text(self, text: Text) -> Text: ...
    def dedent(self) -> None: ...
    def expand_default(self, option: Option) -> Text: ...
    def format_description(self, description) -> Any: ...
    def format_epilog(self, epilog) -> Any: ...
    def format_heading(self, heading) -> Any: ...
    def format_option(self, option: Any) -> str: ...
    def format_option_strings(self, option: Any) -> Any: ...
    def format_usage(self, usage) -> Any: ...
    def indent(self) -> None: ...
    def set_long_opt_delimiter(self, delim) -> None: ...
    def set_parser(self, parser) -> None: ...
    def set_short_opt_delimiter(self, delim) -> None: ...
    def store_option_strings(self, parser) -> None: ...

class IndentedHelpFormatter(HelpFormatter):
    _long_opt_fmt = ...  # type: str
    _short_opt_fmt = ...  # type: str
    current_indent = ...  # type: int
    default_tag = ...  # type: str
    help_position = ...  # type: int
    help_width = ...  # type: Optional[int]
    indent_increment = ...  # type: Any
    level = ...  # type: int
    max_help_position = ...  # type: int
    option_strings = ...  # type: Dict[Any, Any]
    parser = ...  # type: Optional[OptionParser]
    short_first = ...  # type: Any
    width = ...  # type: Any
    def __init__(self, *args, **kwargs) -> None: ...
    def format_heading(self, heading) -> str: ...
    def format_usage(self, usage) -> str: ...

class Option:
    ACTIONS = ...  # type: Tuple[str, ...]
    ALWAYS_TYPED_ACTIONS = ...  # type: Tuple[str, ...]
    ATTRS = ...  # type: List[str]
    CHECK_METHODS = ...  # type: Union[None, List[Callable]]
    CONST_ACTIONS = ...  # type: Tuple[str, ...]
    STORE_ACTIONS = ...  # type: Tuple[str, ...]
    TYPED_ACTIONS = ...  # type: Tuple[str, ...]
    TYPES = ...  # type: Tuple[str, ...]
    TYPE_CHECKER = ...  # type: Dict[str, Callable]
    _long_opts = ...  # type: List[Text]
    _short_opts = ...  # type: List[Text]
    action = ...  # type: str
    dest = ...  # type: Any
    nargs = ...  # type: int
    type = ...  # type: Any
    def __init__(self, *args, **kwargs) -> None: ...
    def __repr__(self) -> str: ...
    def __str__(self) -> str: ...
    def _check_action(self) -> None: ...
    def _check_callback(self) -> None: ...
    def _check_choice(self) -> None: ...
    def _check_const(self) -> None: ...
    def _check_dest(self) -> None: ...
    def _check_nargs(self) -> None: ...
    def _check_opt_strings(self, opts) -> Any: ...
    def _check_type(self) -> None: ...
    def _set_attrs(self, attrs: Dict[str, Any]) -> None: ...
    def _set_opt_strings(self, opts) -> None: ...
    def check_value(self, opt, value) -> Any: ...
    def convert_value(self, opt, value) -> Any: ...
    def get_opt_string(self) -> Text: ...
    def process(self, opt, value, values: Any, parser: OptionParser) -> int: ...
    def take_action(self, action, dest, opt, value, values, parser: OptionParser) -> int: ...
    def takes_value(self) -> bool: ...

make_option = Option

class OptionContainer:
    _long_opt = ...  # type: Dict[Text, Any]
    _short_opt = ...  # type: Dict[Text, Any]
    conflict_handler = ...  # type: Any
    defaults = ...  # type: Dict[Text, Any]
    description = ...  # type: Any
    option_class = ...  # type: Any
    def __init__(self, option_class, conflict_handler, description) -> None: ...
    def _check_conflict(self, option: Any) -> None: ...
    def _create_option_mappings(self) -> None: ...
    def _share_option_mappings(self, parser) -> None: ...
    def add_option(self, *args, **kwargs) -> Any: ...
    def add_options(self, option_list) -> None: ...
    def destroy(self) -> None: ...
    def format_description(self, formatter: Optional[HelpFormatter]) -> Any: ...
    def format_help(self, formatter: HelpFormatter) -> str: ...
    def format_option_help(self, formatter: Optional[HelpFormatter]) -> str: ...
    def get_description(self) -> Any: ...
    def get_option(self, opt_str) -> Optional[Option]: ...
    def has_option(self, opt_str) -> bool: ...
    def remove_option(self, opt_str) -> None: ...
    def set_conflict_handler(self, handler) -> None: ...
    def set_description(self, description) -> None: ...

class OptionGroup(OptionContainer):
    _long_opt = ...  # type: Dict[Any, Any]
    _short_opt = ...  # type: Dict[Any, Any]
    conflict_handler = ...  # type: Any
    defaults = ...  # type: Dict[Text, Any]
    description = ...  # type: Any
    option_class = ...  # type: Any
    option_list = ...  # type: List
    parser = ...  # type: Any
    title = ...  # type: Any
    def __init__(self, parser, title, *args, **kwargs) -> None: ...
    def _create_option_list(self) -> None: ...
    def format_help(self, formatter: HelpFormatter) -> Any: ...
    def set_title(self, title) -> None: ...

class OptionParser(OptionContainer):
    _long_opt = ...  # type: Dict[Text, Any]
    _short_opt = ...  # type: Dict[Any, Any]
    allow_interspersed_args = ...  # type: bool
    conflict_handler = ...  # type: Any
    defaults = ...  # type: Dict[Any, Any]
    description = ...  # type: Text
    epilog = ...  # type: Any
    formatter = ...  # type: HelpFormatter
    largs = ...  # type: Union[None, List[Text]]
    option_class = ...  # type: Callable
    option_groups = ...  # type: List[OptionParser]
    option_list = ...  # type: List[Any]
    process_default_values = ...  # type: Any
    prog = ...  # type: Any
    rargs = ...  # type: Optional[List[Any]]
    standard_option_list = ...  # type: List
    usage = ...  # type: Optional[Text]
    values = ...  # type: Any
    version = ...  # type: Text
    def __init__(self, *args, **kwargs) -> None: ...
    def _add_help_option(self) -> None: ...
    def _add_version_option(self) -> None: ...
    def _create_option_list(self) -> None: ...
    def _get_all_options(self) -> List[Any]: ...
    def _get_args(self, args: Iterable) -> List[Any]: ...
    def _get_encoding(self, file) -> Any: ...
    def _init_parsing_state(self) -> None: ...
    def _match_long_opt(self, opt) -> Any: ...
    def _populate_option_list(self, option_list, *args, **kwargs) -> None: ...
    def _process_args(self, largs: List[Text], rargs: List, values: Values) -> None: ...
    def _process_long_opt(self, rargs: List, values) -> None: ...
    def _process_short_opts(self, rargs: List, values) -> None: ...
    def add_option_group(self, *args, **kwargs) -> OptionParser: ...
    def check_values(self, values, args) -> Tuple[Any, ...]: ...
    def disable_interspersed_args(self) -> None: ...
    def enable_interspersed_args(self) -> None: ...
    def error(self, msg) -> None: ...
    def exit(self, *args, **kwargs) -> None: ...
    def expand_prog_name(self, s: Optional[Text]) -> Any: ...
    def format_epilog(self, formatter: Union[HelpFormatter, OptionParser, None]) -> Any: ...
    def format_help(self, *args, **kwargs) -> str: ...
    def format_option_help(self, *args, **kwargs) -> str: ...
    def get_default_values(self) -> Values: ...
    def get_option_group(self, opt_str) -> Any: ...
    def get_prog_name(self) -> Any: ...
    def get_usage(self) -> Text: ...
    def get_version(self) -> Any: ...
    def parse_args(self, *args, **kwargs) -> Tuple[Any, ...]: ...
    def print_help(self, *args, **kwargs) -> None: ...
    def print_usage(self, *args, **kwargs) -> None: ...
    def print_version(self, *args, **kwargs) -> None: ...
    def set_default(self, dest, value) -> None: ...
    def set_defaults(self, *args, **kwargs) -> None: ...
    def set_process_default_values(self, process) -> None: ...
    def set_usage(self, usage: Text) -> None: ...

class OptionValueError(OptParseError):
    msg = ...  # type: Any

class TitledHelpFormatter(HelpFormatter):
    _long_opt_fmt = ...  # type: str
    _short_opt_fmt = ...  # type: str
    current_indent = ...  # type: int
    default_tag = ...  # type: str
    help_position = ...  # type: int
    help_width = ...  # type: None
    indent_increment = ...  # type: Any
    level = ...  # type: int
    max_help_position = ...  # type: int
    option_strings = ...  # type: Dict
    parser = ...  # type: None
    short_first = ...  # type: Any
    width = ...  # type: Any
    def __init__(self, *args, **kwargs) -> None: ...
    def format_heading(self, heading) -> str: ...
    def format_usage(self, usage) -> str: ...

class Values:
    def __cmp__(self, other) -> int: ...
    def __init__(self, *args, **kwargs) -> None: ...
    def __repr__(self) -> str: ...
    def __str__(self) -> str: ...
    def _update(self, dict: Dict[str, Any], mode) -> None: ...
    def _update_careful(self, dict: Dict[str, Any]) -> None: ...
    def _update_loose(self, dict) -> None: ...
    def ensure_value(self, attr, value) -> Any: ...
    def read_file(self, filename, *args, **kwargs) -> None: ...
    def read_module(self, modname, *args, **kwargs) -> None: ...
