import sys from _typeshed import OptExcInfo, ProfileFunction, TraceFunction, structseq from builtins import object as _object from collections.abc import AsyncGenerator, Callable, Coroutine, Sequence from importlib.abc import PathEntryFinder from importlib.machinery import ModuleSpec from io import TextIOWrapper from types import FrameType, ModuleType, TracebackType from typing import Any, NoReturn, Protocol, TextIO, TypeVar from typing_extensions import Final, Literal, TypeAlias, final _T = TypeVar("_T") # see https://github.com/python/typeshed/issues/8513#issue-1333671093 for the rationale behind this alias _ExitCode: TypeAlias = str | int | None _OptExcInfo: TypeAlias = OptExcInfo # noqa: Y047 # TODO: obsolete, remove fall 2022 or later # Intentionally omits one deprecated and one optional method of `importlib.abc.MetaPathFinder` class _MetaPathFinder(Protocol): def find_spec(self, fullname: str, path: Sequence[str] | None, target: ModuleType | None = ...) -> ModuleSpec | None: ... # ----- sys variables ----- if sys.platform != "win32": abiflags: str argv: list[str] base_exec_prefix: str base_prefix: str byteorder: Literal["little", "big"] builtin_module_names: Sequence[str] # actually a tuple of strings copyright: str if sys.platform == "win32": dllhandle: int dont_write_bytecode: bool displayhook: Callable[[object], Any] excepthook: Callable[[type[BaseException], BaseException, TracebackType | None], Any] exec_prefix: str executable: str float_repr_style: Literal["short", "legacy"] hexversion: int last_type: type[BaseException] | None last_value: BaseException | None last_traceback: TracebackType | None maxsize: int maxunicode: int meta_path: list[_MetaPathFinder] modules: dict[str, ModuleType] if sys.version_info >= (3, 10): orig_argv: list[str] path: list[str] path_hooks: list[Callable[[str], PathEntryFinder]] path_importer_cache: dict[str, PathEntryFinder | None] platform: str if sys.version_info >= (3, 9): platlibdir: str prefix: str if sys.version_info >= (3, 8): pycache_prefix: str | None ps1: object ps2: object stdin: TextIO stdout: TextIO stderr: TextIO if sys.version_info >= (3, 10): stdlib_module_names: frozenset[str] __stdin__: Final[TextIOWrapper] # Contains the original value of stdin __stdout__: Final[TextIOWrapper] # Contains the original value of stdout __stderr__: Final[TextIOWrapper] # Contains the original value of stderr tracebacklimit: int version: str api_version: int warnoptions: Any # Each entry is a tuple of the form (action, message, category, module, # lineno) if sys.platform == "win32": winver: str _xoptions: dict[Any, Any] # Type alias used as a mixin for structseq classes that cannot be instantiated at runtime # This can't be represented in the type system, so we just use `structseq[Any]` _UninstantiableStructseq: TypeAlias = structseq[Any] flags: _flags if sys.version_info >= (3, 10): _FlagTuple: TypeAlias = tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, bool, int, int] else: _FlagTuple: TypeAlias = tuple[int, int, int, int, int, int, int, int, int, int, int, int, int, bool, int] @final class _flags(_UninstantiableStructseq, _FlagTuple): @property def debug(self) -> int: ... @property def inspect(self) -> int: ... @property def interactive(self) -> int: ... @property def optimize(self) -> int: ... @property def dont_write_bytecode(self) -> int: ... @property def no_user_site(self) -> int: ... @property def no_site(self) -> int: ... @property def ignore_environment(self) -> int: ... @property def verbose(self) -> int: ... @property def bytes_warning(self) -> int: ... @property def quiet(self) -> int: ... @property def hash_randomization(self) -> int: ... @property def isolated(self) -> int: ... @property def dev_mode(self) -> bool: ... @property def utf8_mode(self) -> int: ... if sys.version_info >= (3, 10): @property def warn_default_encoding(self) -> int: ... # undocumented if sys.version_info >= (3, 11): @property def safe_path(self) -> bool: ... float_info: _float_info @final class _float_info(structseq[float], tuple[float, int, int, float, int, int, int, int, float, int, int]): @property def max(self) -> float: ... # DBL_MAX @property def max_exp(self) -> int: ... # DBL_MAX_EXP @property def max_10_exp(self) -> int: ... # DBL_MAX_10_EXP @property def min(self) -> float: ... # DBL_MIN @property def min_exp(self) -> int: ... # DBL_MIN_EXP @property def min_10_exp(self) -> int: ... # DBL_MIN_10_EXP @property def dig(self) -> int: ... # DBL_DIG @property def mant_dig(self) -> int: ... # DBL_MANT_DIG @property def epsilon(self) -> float: ... # DBL_EPSILON @property def radix(self) -> int: ... # FLT_RADIX @property def rounds(self) -> int: ... # FLT_ROUNDS hash_info: _hash_info @final class _hash_info(structseq[Any | int], tuple[int, int, int, int, int, str, int, int, int]): @property def width(self) -> int: ... @property def modulus(self) -> int: ... @property def inf(self) -> int: ... @property def nan(self) -> int: ... @property def imag(self) -> int: ... @property def algorithm(self) -> str: ... @property def hash_bits(self) -> int: ... @property def seed_bits(self) -> int: ... @property def cutoff(self) -> int: ... # undocumented implementation: _implementation class _implementation: name: str version: _version_info hexversion: int cache_tag: str # Define __getattr__, as the documentation states: # > sys.implementation may contain additional attributes specific to the Python implementation. # > These non-standard attributes must start with an underscore, and are not described here. def __getattr__(self, name: str) -> Any: ... int_info: _int_info @final class _int_info(structseq[int], tuple[int, int, int, int]): @property def bits_per_digit(self) -> int: ... @property def sizeof_digit(self) -> int: ... @property def default_max_str_digits(self) -> int: ... @property def str_digits_check_threshold(self) -> int: ... _ThreadInfoName: TypeAlias = Literal["nt", "pthread", "pthread-stubs", "solaris"] _ThreadInfoLock: TypeAlias = Literal["semaphore", "mutex+cond"] | None @final class _thread_info(_UninstantiableStructseq, tuple[_ThreadInfoName, _ThreadInfoLock, str | None]): @property def name(self) -> _ThreadInfoName: ... @property def lock(self) -> _ThreadInfoLock: ... @property def version(self) -> str | None: ... thread_info: _thread_info @final class _version_info(_UninstantiableStructseq, tuple[int, int, int, str, int]): @property def major(self) -> int: ... @property def minor(self) -> int: ... @property def micro(self) -> int: ... @property def releaselevel(self) -> str: ... @property def serial(self) -> int: ... version_info: _version_info def call_tracing(__func: Callable[..., _T], __args: Any) -> _T: ... def _clear_type_cache() -> None: ... def _current_frames() -> dict[int, FrameType]: ... def _getframe(__depth: int = 0) -> FrameType: ... def _debugmallocstats() -> None: ... def __displayhook__(__object: object) -> None: ... def __excepthook__(__exctype: type[BaseException], __value: BaseException, __traceback: TracebackType | None) -> None: ... def exc_info() -> OptExcInfo: ... if sys.version_info >= (3, 11): def exception() -> BaseException | None: ... def exit(__status: _ExitCode = None) -> NoReturn: ... def getallocatedblocks() -> int: ... def getdefaultencoding() -> str: ... if sys.platform != "win32": def getdlopenflags() -> int: ... def getfilesystemencoding() -> str: ... def getfilesystemencodeerrors() -> str: ... def getrefcount(__object: Any) -> int: ... def getrecursionlimit() -> int: ... def getsizeof(obj: object, default: int = ...) -> int: ... def getswitchinterval() -> float: ... def getprofile() -> ProfileFunction | None: ... def setprofile(profilefunc: ProfileFunction | None) -> None: ... def gettrace() -> TraceFunction | None: ... def settrace(tracefunc: TraceFunction | None) -> None: ... if sys.platform == "win32": # A tuple of length 5, even though it has more than 5 attributes. @final class _WinVersion(_UninstantiableStructseq, tuple[int, int, int, int, str]): @property def major(self) -> int: ... @property def minor(self) -> int: ... @property def build(self) -> int: ... @property def platform(self) -> int: ... @property def service_pack(self) -> str: ... @property def service_pack_minor(self) -> int: ... @property def service_pack_major(self) -> int: ... @property def suite_mask(self) -> int: ... @property def product_type(self) -> int: ... @property def platform_version(self) -> tuple[int, int, int]: ... def getwindowsversion() -> _WinVersion: ... def intern(__string: str) -> str: ... def is_finalizing() -> bool: ... def breakpointhook(*args: Any, **kwargs: Any) -> Any: ... __breakpointhook__ = breakpointhook # Contains the original value of breakpointhook if sys.platform != "win32": def setdlopenflags(__flags: int) -> None: ... def setrecursionlimit(__limit: int) -> None: ... def setswitchinterval(__interval: float) -> None: ... def gettotalrefcount() -> int: ... # Debug builds only if sys.version_info < (3, 9): def getcheckinterval() -> int: ... # deprecated def setcheckinterval(__n: int) -> None: ... # deprecated if sys.version_info < (3, 9): # An 11-tuple or None def callstats() -> tuple[int, int, int, int, int, int, int, int, int, int, int] | None: ... if sys.version_info >= (3, 8): # Doesn't exist at runtime, but exported in the stubs so pytest etc. can annotate their code more easily. class UnraisableHookArgs: exc_type: type[BaseException] exc_value: BaseException | None exc_traceback: TracebackType | None err_msg: str | None object: _object unraisablehook: Callable[[UnraisableHookArgs], Any] def __unraisablehook__(__unraisable: UnraisableHookArgs) -> Any: ... def addaudithook(hook: Callable[[str, tuple[Any, ...]], Any]) -> None: ... def audit(__event: str, *args: Any) -> None: ... _AsyncgenHook: TypeAlias = Callable[[AsyncGenerator[Any, Any]], None] | None @final class _asyncgen_hooks(structseq[_AsyncgenHook], tuple[_AsyncgenHook, _AsyncgenHook]): @property def firstiter(self) -> _AsyncgenHook: ... @property def finalizer(self) -> _AsyncgenHook: ... def get_asyncgen_hooks() -> _asyncgen_hooks: ... def set_asyncgen_hooks(firstiter: _AsyncgenHook = ..., finalizer: _AsyncgenHook = ...) -> None: ... if sys.platform == "win32": def _enablelegacywindowsfsencoding() -> None: ... def get_coroutine_origin_tracking_depth() -> int: ... def set_coroutine_origin_tracking_depth(depth: int) -> None: ... if sys.version_info < (3, 8): _CoroWrapper: TypeAlias = Callable[[Coroutine[Any, Any, Any]], Any] def set_coroutine_wrapper(__wrapper: _CoroWrapper) -> None: ... def get_coroutine_wrapper() -> _CoroWrapper: ... # The following two functions were added in 3.11.0, 3.10.7, 3.9.14, 3.8.14, & 3.7.14, # as part of the response to CVE-2020-10735 def set_int_max_str_digits(maxdigits: int) -> None: ... def get_int_max_str_digits() -> int: ...