from typing import List, Union, Sequence, Optional, Dict


class Class:
    module = ...  # type: str
    name = ...  # type: str
    super = ...  # type: Optional[List[Union[Class, str]]]
    methods = ...  # type: Dict[str, int]
    file = ...  # type: int
    lineno = ...  # type: int

    def __init__(self,
                 module: str,
                 name: str,
                 super: Optional[List[Union[Class, str]]],
                 file: str,
                 lineno: int) -> None: ...


class Function:
    module = ...  # type: str
    name = ...  # type: str
    file = ...  # type: int
    lineno = ...  # type: int

    def __init__(self,
                 module: str,
                 name: str,
                 file: str,
                 lineno: int) -> None: ...


def readmodule(module: str,
               path: Optional[Sequence[str]] = ...
               ) -> Dict[str, Class]: ...


def readmodule_ex(module: str,
                  path: Optional[Sequence[str]] = ...
                  ) -> Dict[str, Union[Class, Function, List[str]]]: ...
