# The following type alias are stub-only and do not exist during runtime

#  Each entry is a tuple of the form (action, message, category, module,
#    lineno)

# sys.exit() accepts an optional argument of anything printable

_ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType]

builtin_module_names: Sequence[str]  # actually a tuple of strings

excepthook: Callable[[Type[BaseException], BaseException, TracebackType], Any]

path_hooks: List[Any]  # TODO precise type; function, path to finder

def call_tracing(__func: Callable[..., _T], __args: Any) -> _T: ...

def __excepthook__(type_: Type[BaseException], value: BaseException, traceback: TracebackType) -> None: ...

def setprofile(profilefunc: Optional[_ProfileFunc]) -> None: ...

_TraceFunc = Callable[[FrameType, str, Any], Optional[Callable[[FrameType, str, Any], Any]]]

class _WinVersion(Tuple[int, int, int, int, str, int, int, int, int, Tuple[int, int, int]]):

    __breakpointhook__: Any  # contains the original value of breakpointhook

    def addaudithook(hook: Callable[[str, Tuple[Any, ...]], Any]) -> None: ...

_AsyncgenHook = Optional[Callable[[AsyncGenerator[Any, Any]], None]]

def set_asyncgen_hooks(firstiter: _AsyncgenHook = ..., finalizer: _AsyncgenHook = ...) -> None: ...