Add @disjoint_base decorator in the stdlib (#14599)

And fix some other new stubtest finds.
This commit is contained in:
Jelle Zijlstra
2025-08-24 07:27:14 -07:00
committed by GitHub
parent 2565f34946
commit e8ba06f710
55 changed files with 701 additions and 307 deletions
+2 -18
View File
@@ -4,15 +4,14 @@
# Please keep sorted alphabetically
collections\.ChainMap\.fromkeys # https://github.com/python/mypy/issues/17023
http.client.HTTPConnection.response_class # the actual type at runtime is abc.ABCMeta
importlib.abc.Loader.exec_module # See Lib/importlib/_abc.py. Might be defined for backwards compatibility
importlib.abc.MetaPathFinder.find_spec # Not defined on the actual class, but expected to exist.
importlib.abc.PathEntryFinder.find_spec # Not defined on the actual class, but expected to exist.
tkinter.simpledialog.[A-Z_]+
tkinter.simpledialog.TclVersion
tkinter.simpledialog.TkVersion
tkinter.Text.count # stubtest somehow thinks that index1 parameter has a default value, but it doesn't in any of the overloads
builtins.tuple # should have @disjoint_base but hits pyright issue
tarfile.TarInfo.__slots__ # it's a big dictionary at runtime and the dictionary values are a bit long
# ===============================================================
@@ -201,7 +200,6 @@ _markupbase.ParserBase.parse_marked_section
_pydecimal.* # See comments in file
_typeshed.* # Utility types for typeshed, doesn't exist at runtime
argparse.ArgumentParser.__init__ # stubtest doesn't recognise the runtime default (a class) as being compatible with a callback protocol (the stub annotation)
argparse.Namespace.__getattr__ # The whole point of this class is its attributes are dynamic
# Runtime AST node runtime constructor behaviour is too loose.
@@ -218,8 +216,6 @@ argparse.Namespace.__setattr__ # should allow setting any attribute
ast.ImportFrom.level # None on the class, but never None on instances
ast.NodeVisitor.visit_\w+ # Methods are discovered dynamically, see #3796
_?asyncio.Future.__init__ # Usually initialized from c object
asyncio.futures.Future.__init__ # Usually initialized from c object
# Condition functions are exported in __init__
asyncio.Condition.acquire
@@ -230,7 +226,6 @@ asyncio.locks.Condition.locked
asyncio.locks.Condition.release
builtins.memoryview.__contains__ # C type that implements __getitem__
builtins.object.__init__ # default C signature is incorrect
builtins.reveal_locals # Builtins that type checkers pretends exist
builtins.reveal_type # Builtins that type checkers pretends exist
builtins.type.__dict__ # read-only but not actually a property; stubtest thinks it's a mutable attribute.
@@ -260,8 +255,6 @@ configparser.SectionProxy.getint # SectionProxy get functions are set in __init
contextlib.AbstractAsyncContextManager.__class_getitem__
contextlib.AbstractContextManager.__class_getitem__
_?contextvars.Context.__init__ # C signature is broader than what is actually accepted
copy.PyStringMap # defined only in Jython
# The Dialect properties are initialized as None in Dialect but their values are enforced in _Dialect
@@ -329,9 +322,6 @@ importlib.machinery.ExtensionFileLoader.get_filename
inspect.Parameter.__init__
inspect.Signature.__init__
inspect.Parameter.empty # set as private marker _empty
inspect.Signature.empty # set as private marker _empty
logging.LogRecord.__setattr__ # doesn't exist, but makes things easy if we pretend it does
# Iterable classes that don't define __iter__ at runtime (usually iterable via __getitem__)
@@ -377,11 +367,6 @@ multiprocessing.queues.JoinableQueue.__init__
multiprocessing.queues.Queue.__init__
multiprocessing.queues.SimpleQueue.__init__
# alias for a class defined elsewhere,
# mypy infers the variable has type `(*args) -> ForkingPickler`
# but stubtest infers the runtime type as <class ForkingPickler>
multiprocessing.reduction.AbstractReducer.ForkingPickler
# These methods are dynamically created after object initialization,
# copied from a wrapped lock object. Stubtest doesn't think they exist
# because of that.
@@ -406,7 +391,6 @@ os.PathLike.__class_getitem__ # PathLike is a protocol; we don't expect all Pat
pickle._Pickler\..* # Best effort typing for undocumented internals
pickle._Unpickler\..* # Best effort typing for undocumented internals
_?queue.SimpleQueue.__init__ # C signature is broader than what is actually accepted
shutil.rmtree # function with attributes, which we approximate with a callable protocol
socketserver.BaseServer.get_request # Not implemented, but expected to exist on subclasses.
ssl.PROTOCOL_SSLv2 # Depends on the existence and flags of SSL
@@ -43,7 +43,6 @@ curses.LINES # Initialized only after initscr call
curses.has_key # stubtest gets confused because this is both a module and a function in curses
multiprocessing.popen_spawn_win32 # exists on Darwin but fails to import
readline.append_history_file # Only available if compiled with GNU readline, not editline
select.kqueue.__init__ # default C signature is wrong
select.poll # Actually a function; we have a class so it can be used as a type
# Some of these exist on non-windows, but they are useless and this is not intended
+2 -1
View File
@@ -55,6 +55,8 @@ asyncio.locks.Lock.__init__
asyncio.locks.Semaphore.__init__
asyncio.queues.Queue.__init__
_random.Random.__init__ # Issues with __new__/__init__ correspondence
bdb.Breakpoint.clearBreakpoints # Exists at runtime, but missing from stubs
@@ -100,7 +102,6 @@ typing_extensions.Sentinel.__call__
# <= 3.11
# =======
_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set
enum.Enum._generate_next_value_
importlib.abc.Finder.find_module
urllib.request.HTTPPasswordMgrWithPriorAuth.__init__ # Args are passed as is to super, so super args are specified
@@ -68,7 +68,6 @@ importlib.metadata._meta.SimplePath.__truediv__ # Runtime definition of protoco
# <= 3.11
# =======
_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set
enum.Enum._generate_next_value_
importlib.abc.Finder.find_module
urllib.request.HTTPPasswordMgrWithPriorAuth.__init__ # Args are passed as is to super, so super args are specified
@@ -54,7 +54,6 @@ typing_extensions.Sentinel.__call__
# <= 3.11
# =======
_?bz2.BZ2Decompressor.__init__ # function does not accept parameters but C signature is set
enum.Enum._generate_next_value_
importlib.abc.Finder.find_module
urllib.request.HTTPPasswordMgrWithPriorAuth.__init__ # Args are passed as is to super, so super args are specified
@@ -2,10 +2,6 @@
# TODO: Allowlist entries that should be fixed
# ============================================
# alias for a class defined elsewhere,
# mypy infers the variable has type `(*args) -> DupHandle` but stubtest infers the runtime type as <class DupHandle>
multiprocessing.reduction.AbstractReducer.DupHandle
# Exists at runtime, but missing from stubs
_winapi.CreateFileMapping
_winapi.MapViewOfFile
+3 -1
View File
@@ -4,12 +4,13 @@ from collections.abc import Awaitable, Callable, Coroutine, Generator
from contextvars import Context
from types import FrameType, GenericAlias
from typing import Any, Literal, TextIO, TypeVar
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
_T = TypeVar("_T")
_T_co = TypeVar("_T_co", covariant=True)
_TaskYieldType: TypeAlias = Future[object] | None
@disjoint_base
class Future(Awaitable[_T]):
_state: str
@property
@@ -49,6 +50,7 @@ else:
# While this is true in general, here it's sort-of okay to have a covariant subclass,
# since the only reason why `asyncio.Future` is invariant is the `set_result()` method,
# and `asyncio.Task.set_result()` always raises.
@disjoint_base
class Task(Future[_T_co]): # type: ignore[type-var] # pyright: ignore[reportInvalidTypeArguments]
if sys.version_info >= (3, 12):
def __init__(
+4 -1
View File
@@ -3,7 +3,7 @@ import sys
from _typeshed import SupportsWrite
from collections.abc import Iterable
from typing import Any, Final, Literal, type_check_only
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
__version__: Final[str]
@@ -24,6 +24,7 @@ class Error(Exception): ...
_DialectLike: TypeAlias = str | Dialect | csv.Dialect | type[Dialect | csv.Dialect]
@disjoint_base
class Dialect:
delimiter: str
quotechar: str | None
@@ -48,6 +49,7 @@ class Dialect:
if sys.version_info >= (3, 10):
# This class calls itself _csv.reader.
@disjoint_base
class Reader:
@property
def dialect(self) -> Dialect: ...
@@ -56,6 +58,7 @@ if sys.version_info >= (3, 10):
def __next__(self) -> list[str]: ...
# This class calls itself _csv.writer.
@disjoint_base
class Writer:
@property
def dialect(self) -> Dialect: ...
+2 -1
View File
@@ -3,7 +3,7 @@ from _typeshed import ReadableBuffer
from collections.abc import Callable
from types import ModuleType
from typing import AnyStr, Protocol, final, overload, type_check_only
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
_DigestMod: TypeAlias = str | Callable[[], _HashObject] | ModuleType | None
@@ -22,6 +22,7 @@ class _HashObject(Protocol):
def hexdigest(self) -> str: ...
def update(self, obj: ReadableBuffer, /) -> None: ...
@disjoint_base
class HASH:
@property
def digest_size(self) -> int: ...
+2 -1
View File
@@ -1,7 +1,7 @@
import types
from collections.abc import Callable
from typing import Any, Final, Literal, SupportsIndex, TypeVar, overload
from typing_extensions import TypeAlias
from typing_extensions import TypeAlias, disjoint_base
_R = TypeVar("_R")
@@ -12,6 +12,7 @@ class InterpreterError(Exception): ...
class InterpreterNotFoundError(InterpreterError): ...
class NotShareableError(ValueError): ...
@disjoint_base
class CrossInterpreterBufferView:
def __buffer__(self, flags: int, /) -> memoryview: ...
+66 -27
View File
@@ -7,7 +7,7 @@ from io import BufferedIOBase, RawIOBase, TextIOBase, UnsupportedOperation as Un
from os import _Opener
from types import TracebackType
from typing import IO, Any, BinaryIO, Final, Generic, Literal, Protocol, TextIO, TypeVar, overload, type_check_only
from typing_extensions import Self
from typing_extensions import Self, disjoint_base
_T = TypeVar("_T")
@@ -22,32 +22,62 @@ def open_code(path: str) -> IO[bytes]: ...
BlockingIOError = builtins.BlockingIOError
class _IOBase:
def __iter__(self) -> Iterator[bytes]: ...
def __next__(self) -> bytes: ...
def __enter__(self) -> Self: ...
def __exit__(
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
) -> None: ...
def close(self) -> None: ...
def fileno(self) -> int: ...
def flush(self) -> None: ...
def isatty(self) -> bool: ...
def readable(self) -> bool: ...
read: Callable[..., Any]
def readlines(self, hint: int = -1, /) -> list[bytes]: ...
def seek(self, offset: int, whence: int = 0, /) -> int: ...
def seekable(self) -> bool: ...
def tell(self) -> int: ...
def truncate(self, size: int | None = None, /) -> int: ...
def writable(self) -> bool: ...
write: Callable[..., Any]
def writelines(self, lines: Iterable[ReadableBuffer], /) -> None: ...
def readline(self, size: int | None = -1, /) -> bytes: ...
def __del__(self) -> None: ...
@property
def closed(self) -> bool: ...
def _checkClosed(self) -> None: ... # undocumented
if sys.version_info >= (3, 12):
@disjoint_base
class _IOBase:
def __iter__(self) -> Iterator[bytes]: ...
def __next__(self) -> bytes: ...
def __enter__(self) -> Self: ...
def __exit__(
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
) -> None: ...
def close(self) -> None: ...
def fileno(self) -> int: ...
def flush(self) -> None: ...
def isatty(self) -> bool: ...
def readable(self) -> bool: ...
read: Callable[..., Any]
def readlines(self, hint: int = -1, /) -> list[bytes]: ...
def seek(self, offset: int, whence: int = 0, /) -> int: ...
def seekable(self) -> bool: ...
def tell(self) -> int: ...
def truncate(self, size: int | None = None, /) -> int: ...
def writable(self) -> bool: ...
write: Callable[..., Any]
def writelines(self, lines: Iterable[ReadableBuffer], /) -> None: ...
def readline(self, size: int | None = -1, /) -> bytes: ...
def __del__(self) -> None: ...
@property
def closed(self) -> bool: ...
def _checkClosed(self) -> None: ... # undocumented
else:
class _IOBase:
def __iter__(self) -> Iterator[bytes]: ...
def __next__(self) -> bytes: ...
def __enter__(self) -> Self: ...
def __exit__(
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
) -> None: ...
def close(self) -> None: ...
def fileno(self) -> int: ...
def flush(self) -> None: ...
def isatty(self) -> bool: ...
def readable(self) -> bool: ...
read: Callable[..., Any]
def readlines(self, hint: int = -1, /) -> list[bytes]: ...
def seek(self, offset: int, whence: int = 0, /) -> int: ...
def seekable(self) -> bool: ...
def tell(self) -> int: ...
def truncate(self, size: int | None = None, /) -> int: ...
def writable(self) -> bool: ...
write: Callable[..., Any]
def writelines(self, lines: Iterable[ReadableBuffer], /) -> None: ...
def readline(self, size: int | None = -1, /) -> bytes: ...
def __del__(self) -> None: ...
@property
def closed(self) -> bool: ...
def _checkClosed(self) -> None: ... # undocumented
class _RawIOBase(_IOBase):
def readall(self) -> bytes: ...
@@ -65,6 +95,7 @@ class _BufferedIOBase(_IOBase):
def read(self, size: int | None = -1, /) -> bytes: ...
def read1(self, size: int = -1, /) -> bytes: ...
@disjoint_base
class FileIO(RawIOBase, _RawIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of writelines in the base classes
mode: str
# The type of "name" equals the argument passed in to the constructor,
@@ -79,6 +110,7 @@ class FileIO(RawIOBase, _RawIOBase, BinaryIO): # type: ignore[misc] # incompat
def seek(self, pos: int, whence: int = 0, /) -> int: ...
def read(self, size: int | None = -1, /) -> bytes | MaybeNone: ...
@disjoint_base
class BytesIO(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of methods in the base classes
def __init__(self, initial_bytes: ReadableBuffer = b"") -> None: ...
# BytesIO does not contain a "name" field. This workaround is necessary
@@ -119,6 +151,7 @@ class _BufferedReaderStream(Protocol):
_BufferedReaderStreamT = TypeVar("_BufferedReaderStreamT", bound=_BufferedReaderStream, default=_BufferedReaderStream)
@disjoint_base
class BufferedReader(BufferedIOBase, _BufferedIOBase, BinaryIO, Generic[_BufferedReaderStreamT]): # type: ignore[misc] # incompatible definitions of methods in the base classes
raw: _BufferedReaderStreamT
if sys.version_info >= (3, 14):
@@ -130,6 +163,7 @@ class BufferedReader(BufferedIOBase, _BufferedIOBase, BinaryIO, Generic[_Buffere
def seek(self, target: int, whence: int = 0, /) -> int: ...
def truncate(self, pos: int | None = None, /) -> int: ...
@disjoint_base
class BufferedWriter(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of writelines in the base classes
raw: RawIOBase
if sys.version_info >= (3, 14):
@@ -141,6 +175,7 @@ class BufferedWriter(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore
def seek(self, target: int, whence: int = 0, /) -> int: ...
def truncate(self, pos: int | None = None, /) -> int: ...
@disjoint_base
class BufferedRandom(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of methods in the base classes
mode: str
name: Any
@@ -154,6 +189,7 @@ class BufferedRandom(BufferedIOBase, _BufferedIOBase, BinaryIO): # type: ignore
def peek(self, size: int = 0, /) -> bytes: ...
def truncate(self, pos: int | None = None, /) -> int: ...
@disjoint_base
class BufferedRWPair(BufferedIOBase, _BufferedIOBase, Generic[_BufferedReaderStreamT]):
if sys.version_info >= (3, 14):
def __init__(self, reader: _BufferedReaderStreamT, writer: RawIOBase, buffer_size: int = 131072, /) -> None: ...
@@ -200,6 +236,7 @@ class _WrappedBuffer(Protocol):
_BufferT_co = TypeVar("_BufferT_co", bound=_WrappedBuffer, default=_WrappedBuffer, covariant=True)
@disjoint_base
class TextIOWrapper(TextIOBase, _TextIOBase, TextIO, Generic[_BufferT_co]): # type: ignore[misc] # incompatible definitions of write in the base classes
def __init__(
self,
@@ -234,6 +271,7 @@ class TextIOWrapper(TextIOBase, _TextIOBase, TextIO, Generic[_BufferT_co]): # t
def seek(self, cookie: int, whence: int = 0, /) -> int: ...
def truncate(self, pos: int | None = None, /) -> int: ...
@disjoint_base
class StringIO(TextIOBase, _TextIOBase, TextIO): # type: ignore[misc] # incompatible definitions of write in the base classes
def __init__(self, initial_value: str | None = "", newline: str | None = "\n") -> None: ...
# StringIO does not contain a "name" field. This workaround is necessary
@@ -246,6 +284,7 @@ class StringIO(TextIOBase, _TextIOBase, TextIO): # type: ignore[misc] # incomp
def seek(self, pos: int, whence: int = 0, /) -> int: ...
def truncate(self, pos: int | None = None, /) -> int: ...
@disjoint_base
class IncrementalNewlineDecoder:
def __init__(self, decoder: codecs.IncrementalDecoder | None, translate: bool, errors: str = "strict") -> None: ...
def decode(self, input: ReadableBuffer | str, final: bool = False) -> str: ...
+2
View File
@@ -3,7 +3,9 @@ from _typeshed import structseq
from collections.abc import Callable
from types import CodeType
from typing import Any, Final, final
from typing_extensions import disjoint_base
@disjoint_base
class Profiler:
def __init__(
self, timer: Callable[[], float] | None = None, timeunit: float = 0.0, subcalls: bool = True, builtins: bool = True
+5
View File
@@ -2,6 +2,7 @@ from _typeshed import ReadableBuffer
from codecs import _ReadableStream, _WritableStream
from collections.abc import Iterable
from typing import final, type_check_only
from typing_extensions import disjoint_base
# This class is not exposed. It calls itself _multibytecodec.MultibyteCodec.
@final
@@ -10,6 +11,7 @@ class _MultibyteCodec:
def decode(self, input: ReadableBuffer, errors: str | None = None) -> str: ...
def encode(self, input: str, errors: str | None = None) -> bytes: ...
@disjoint_base
class MultibyteIncrementalDecoder:
errors: str
def __init__(self, errors: str = "strict") -> None: ...
@@ -18,6 +20,7 @@ class MultibyteIncrementalDecoder:
def reset(self) -> None: ...
def setstate(self, state: tuple[bytes, int], /) -> None: ...
@disjoint_base
class MultibyteIncrementalEncoder:
errors: str
def __init__(self, errors: str = "strict") -> None: ...
@@ -26,6 +29,7 @@ class MultibyteIncrementalEncoder:
def reset(self) -> None: ...
def setstate(self, state: int, /) -> None: ...
@disjoint_base
class MultibyteStreamReader:
errors: str
stream: _ReadableStream
@@ -35,6 +39,7 @@ class MultibyteStreamReader:
def readlines(self, sizehintobj: int | None = None, /) -> list[str]: ...
def reset(self) -> None: ...
@disjoint_base
class MultibyteStreamWriter:
errors: str
stream: _WritableStream
+3 -1
View File
@@ -2,7 +2,7 @@ from _typeshed import ReadableBuffer, SupportsWrite
from collections.abc import Callable, Iterable, Iterator, Mapping
from pickle import PickleBuffer as PickleBuffer
from typing import Any, Protocol, type_check_only
from typing_extensions import TypeAlias
from typing_extensions import TypeAlias, disjoint_base
@type_check_only
class _ReadableFileobj(Protocol):
@@ -57,6 +57,7 @@ class PicklerMemoProxy:
def clear(self, /) -> None: ...
def copy(self, /) -> dict[int, tuple[int, Any]]: ...
@disjoint_base
class Pickler:
fast: bool
dispatch_table: Mapping[type, Callable[[Any], _ReducedType]]
@@ -84,6 +85,7 @@ class UnpicklerMemoProxy:
def clear(self, /) -> None: ...
def copy(self, /) -> dict[int, tuple[int, Any]]: ...
@disjoint_base
class Unpickler:
def __init__(
self,
+2
View File
@@ -1,10 +1,12 @@
from types import GenericAlias
from typing import Any, Generic, TypeVar
from typing_extensions import disjoint_base
_T = TypeVar("_T")
class Empty(Exception): ...
@disjoint_base
class SimpleQueue(Generic[_T]):
def __init__(self) -> None: ...
def empty(self) -> bool: ...
+2 -1
View File
@@ -1,9 +1,10 @@
import sys
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
# Actually Tuple[(int,) * 625]
_State: TypeAlias = tuple[int, ...]
@disjoint_base
class Random:
if sys.version_info >= (3, 10):
def __init__(self, seed: object = ..., /) -> None: ...
+2 -1
View File
@@ -3,7 +3,7 @@ from _typeshed import ReadableBuffer, WriteableBuffer
from collections.abc import Iterable
from socket import error as error, gaierror as gaierror, herror as herror, timeout as timeout
from typing import Any, Final, SupportsIndex, overload
from typing_extensions import CapsuleType, TypeAlias
from typing_extensions import CapsuleType, TypeAlias, disjoint_base
_CMSG: TypeAlias = tuple[int, int, bytes]
_CMSGArg: TypeAlias = tuple[int, int, ReadableBuffer]
@@ -731,6 +731,7 @@ if sys.platform != "win32" and sys.platform != "darwin":
# ===== Classes =====
@disjoint_base
class socket:
@property
def family(self) -> int: ...
+2 -2
View File
@@ -13,7 +13,7 @@ from ssl import (
SSLZeroReturnError as SSLZeroReturnError,
)
from typing import Any, ClassVar, Final, Literal, TypedDict, final, overload, type_check_only
from typing_extensions import NotRequired, Self, TypeAlias, deprecated
from typing_extensions import NotRequired, Self, TypeAlias, deprecated, disjoint_base
_PasswordType: TypeAlias = Callable[[], str | bytes | bytearray] | str | bytes | bytearray
_PCTRTT: TypeAlias = tuple[tuple[str, str], ...]
@@ -67,7 +67,7 @@ if sys.platform == "win32":
def txt2obj(txt: str, name: bool = False) -> tuple[int, str, str, str]: ...
def nid2obj(nid: int, /) -> tuple[int, str, str, str]: ...
@disjoint_base
class _SSLContext:
check_hostname: bool
keylog_filename: str | None
+2 -1
View File
@@ -1,6 +1,7 @@
from _typeshed import ReadableBuffer, WriteableBuffer
from collections.abc import Iterator
from typing import Any
from typing_extensions import disjoint_base
def pack(fmt: str | bytes, /, *v: Any) -> bytes: ...
def pack_into(fmt: str | bytes, buffer: WriteableBuffer, offset: int, /, *v: Any) -> None: ...
@@ -8,7 +9,7 @@ def unpack(format: str | bytes, buffer: ReadableBuffer, /) -> tuple[Any, ...]: .
def unpack_from(format: str | bytes, /, buffer: ReadableBuffer, offset: int = 0) -> tuple[Any, ...]: ...
def iter_unpack(format: str | bytes, buffer: ReadableBuffer, /) -> Iterator[tuple[Any, ...]]: ...
def calcsize(format: str | bytes, /) -> int: ...
@disjoint_base
class Struct:
@property
def format(self) -> str: ...
+2 -1
View File
@@ -5,7 +5,7 @@ from collections.abc import Callable
from threading import Thread
from types import TracebackType
from typing import Any, Final, NoReturn, final, overload
from typing_extensions import TypeVarTuple, Unpack
from typing_extensions import TypeVarTuple, Unpack, disjoint_base
_Ts = TypeVarTuple("_Ts")
@@ -110,6 +110,7 @@ if sys.version_info >= (3, 12):
if sys.version_info >= (3, 14):
def set_name(name: str) -> None: ...
@disjoint_base
class _local:
def __getattribute__(self, name: str, /) -> Any: ...
def __setattr__(self, name: str, value: Any, /) -> None: ...
+3 -3
View File
@@ -46,7 +46,7 @@ class ZstdCompressor:
FLUSH_BLOCK: Final = 1
FLUSH_FRAME: Final = 2
def __new__(
self, level: int | None = None, options: Mapping[int, int] | None = None, zstd_dict: ZstdDict | None = None
cls, level: int | None = None, options: Mapping[int, int] | None = None, zstd_dict: ZstdDict | None = None
) -> Self: ...
def compress(
self, /, data: ReadableBuffer, mode: _ZstdCompressorContinue | _ZstdCompressorFlushBlock | _ZstdCompressorFlushFrame = 0
@@ -58,7 +58,7 @@ class ZstdCompressor:
@final
class ZstdDecompressor:
def __new__(self, zstd_dict: ZstdDict | None = None, options: Mapping[int, int] | None = None) -> Self: ...
def __new__(cls, zstd_dict: ZstdDict | None = None, options: Mapping[int, int] | None = None) -> Self: ...
def decompress(self, /, data: ReadableBuffer, max_length: int = -1) -> bytes: ...
@property
def eof(self) -> bool: ...
@@ -69,7 +69,7 @@ class ZstdDecompressor:
@final
class ZstdDict:
def __new__(self, dict_content: bytes, /, *, is_raw: bool = False) -> Self: ...
def __new__(cls, dict_content: bytes, /, *, is_raw: bool = False) -> Self: ...
def __len__(self, /) -> int: ...
@property
def as_digested_dict(self) -> tuple[Self, int]: ...
+2 -1
View File
@@ -3,7 +3,7 @@ from _typeshed import ReadableBuffer, SupportsRead, SupportsWrite
from collections.abc import Iterable, MutableSequence
from types import GenericAlias
from typing import Any, ClassVar, Literal, SupportsIndex, TypeVar, overload
from typing_extensions import Self, TypeAlias, deprecated
from typing_extensions import Self, TypeAlias, deprecated, disjoint_base
_IntTypeCode: TypeAlias = Literal["b", "B", "h", "H", "i", "I", "l", "L", "q", "Q"]
_FloatTypeCode: TypeAlias = Literal["f", "d"]
@@ -17,6 +17,7 @@ _T = TypeVar("_T", int, float, str)
typecodes: str
@disjoint_base
class array(MutableSequence[_T]):
@property
def typecode(self) -> _TypeCode: ...
+17 -9
View File
@@ -11,7 +11,7 @@ from _ast import (
from _typeshed import ReadableBuffer, Unused
from collections.abc import Iterable, Iterator, Sequence
from typing import Any, ClassVar, Generic, Literal, TypedDict, TypeVar as _TypeVar, overload, type_check_only
from typing_extensions import Self, Unpack, deprecated
from typing_extensions import Self, Unpack, deprecated, disjoint_base
if sys.version_info >= (3, 13):
from _ast import PyCF_OPTIMIZED_AST as PyCF_OPTIMIZED_AST
@@ -30,16 +30,24 @@ class _Attributes(TypedDict, Generic[_EndPositionT], total=False):
# The various AST classes are implemented in C, and imported from _ast at runtime,
# but they consider themselves to live in the ast module,
# so we'll define the stubs in this file.
class AST:
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 12):
@disjoint_base
class AST:
__match_args__ = ()
_attributes: ClassVar[tuple[str, ...]]
_fields: ClassVar[tuple[str, ...]]
if sys.version_info >= (3, 13):
_field_types: ClassVar[dict[str, Any]]
_attributes: ClassVar[tuple[str, ...]]
_fields: ClassVar[tuple[str, ...]]
if sys.version_info >= (3, 13):
_field_types: ClassVar[dict[str, Any]]
if sys.version_info >= (3, 14):
def __replace__(self) -> Self: ...
if sys.version_info >= (3, 14):
def __replace__(self) -> Self: ...
else:
class AST:
if sys.version_info >= (3, 10):
__match_args__ = ()
_attributes: ClassVar[tuple[str, ...]]
_fields: ClassVar[tuple[str, ...]]
class mod(AST): ...
+19 -17
View File
@@ -1,26 +1,28 @@
import sys
from _typeshed import SupportsWrite
from asyncio import Future
from dataclasses import dataclass
from types import FrameType
from typing import Any, overload
__all__ = ("capture_call_graph", "format_call_graph", "print_call_graph", "FrameCallGraphEntry", "FutureCallGraph")
if sys.version_info >= (3, 14):
__all__ = ("capture_call_graph", "format_call_graph", "print_call_graph", "FrameCallGraphEntry", "FutureCallGraph")
@dataclass(frozen=True)
class FrameCallGraphEntry:
frame: FrameType
@dataclass(frozen=True, slots=True)
class FrameCallGraphEntry:
frame: FrameType
@dataclass(frozen=True)
class FutureCallGraph:
future: Future[Any]
call_stack: tuple[FrameCallGraphEntry, ...]
awaited_by: tuple[FutureCallGraph, ...]
@dataclass(frozen=True, slots=True)
class FutureCallGraph:
future: Future[Any]
call_stack: tuple[FrameCallGraphEntry, ...]
awaited_by: tuple[FutureCallGraph, ...]
@overload
def capture_call_graph(future: None = None, /, *, depth: int = 1, limit: int | None = None) -> FutureCallGraph | None: ...
@overload
def capture_call_graph(future: Future[Any], /, *, depth: int = 1, limit: int | None = None) -> FutureCallGraph | None: ...
def format_call_graph(future: Future[Any] | None = None, /, *, depth: int = 1, limit: int | None = None) -> str: ...
def print_call_graph(
future: Future[Any] | None = None, /, *, file: SupportsWrite[str] | None = None, depth: int = 1, limit: int | None = None
) -> None: ...
@overload
def capture_call_graph(future: None = None, /, *, depth: int = 1, limit: int | None = None) -> FutureCallGraph | None: ...
@overload
def capture_call_graph(future: Future[Any], /, *, depth: int = 1, limit: int | None = None) -> FutureCallGraph | None: ...
def format_call_graph(future: Future[Any] | None = None, /, *, depth: int = 1, limit: int | None = None) -> str: ...
def print_call_graph(
future: Future[Any] | None = None, /, *, file: SupportsWrite[str] | None = None, depth: int = 1, limit: int | None = None
) -> None: ...
+1 -1
View File
@@ -116,6 +116,6 @@ if sys.platform == "win32":
if sys.version_info >= (3, 14):
_DefaultEventLoopPolicy = _WindowsProactorEventLoopPolicy
else:
DefaultEventLoopPolicy = WindowsSelectorEventLoopPolicy
DefaultEventLoopPolicy = WindowsProactorEventLoopPolicy
if sys.version_info >= (3, 13):
EventLoop = ProactorEventLoop
+46 -6
View File
@@ -71,6 +71,7 @@ from typing_extensions import ( # noqa: Y023
TypeIs,
TypeVarTuple,
deprecated,
disjoint_base,
)
if sys.version_info >= (3, 14):
@@ -103,6 +104,7 @@ _StopT_co = TypeVar("_StopT_co", covariant=True, default=_StartT_co) # slice[A
# FIXME: https://github.com/python/typing/issues/213 (replace step=start|stop with step=start&stop)
_StepT_co = TypeVar("_StepT_co", covariant=True, default=_StartT_co | _StopT_co) # slice[A,B] -> slice[A, B, A|B]
@disjoint_base
class object:
__doc__: str | None
__dict__: dict[str, Any]
@@ -138,6 +140,7 @@ class object:
@classmethod
def __subclasshook__(cls, subclass: type, /) -> bool: ...
@disjoint_base
class staticmethod(Generic[_P, _R_co]):
@property
def __func__(self) -> Callable[_P, _R_co]: ...
@@ -158,6 +161,7 @@ class staticmethod(Generic[_P, _R_co]):
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
__annotate__: AnnotateFunc | None
@disjoint_base
class classmethod(Generic[_T, _P, _R_co]):
@property
def __func__(self) -> Callable[Concatenate[type[_T], _P], _R_co]: ...
@@ -177,6 +181,7 @@ class classmethod(Generic[_T, _P, _R_co]):
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
__annotate__: AnnotateFunc | None
@disjoint_base
class type:
# object.__base__ is None. Otherwise, it would be a type.
@property
@@ -229,6 +234,7 @@ class type:
if sys.version_info >= (3, 14):
__annotate__: AnnotateFunc | None
@disjoint_base
class super:
@overload
def __init__(self, t: Any, obj: Any, /) -> None: ...
@@ -241,6 +247,7 @@ _PositiveInteger: TypeAlias = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
_NegativeInteger: TypeAlias = Literal[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20]
_LiteralInteger = _PositiveInteger | _NegativeInteger | Literal[0] # noqa: Y026 # TODO: Use TypeAlias once mypy bugs are fixed
@disjoint_base
class int:
@overload
def __new__(cls, x: ConvertibleToInt = ..., /) -> Self: ...
@@ -351,6 +358,7 @@ class int:
def __index__(self) -> int: ...
def __format__(self, format_spec: str, /) -> str: ...
@disjoint_base
class float:
def __new__(cls, x: ConvertibleToFloat = ..., /) -> Self: ...
def as_integer_ratio(self) -> tuple[int, int]: ...
@@ -416,6 +424,7 @@ class float:
@classmethod
def from_number(cls, number: float | SupportsIndex | SupportsFloat, /) -> Self: ...
@disjoint_base
class complex:
# Python doesn't currently accept SupportsComplex for the second argument
@overload
@@ -463,6 +472,7 @@ class _FormatMapMapping(Protocol):
class _TranslateTable(Protocol):
def __getitem__(self, key: int, /) -> str | int | None: ...
@disjoint_base
class str(Sequence[str]):
@overload
def __new__(cls, object: object = ...) -> Self: ...
@@ -647,6 +657,7 @@ class str(Sequence[str]):
def __getnewargs__(self) -> tuple[str]: ...
def __format__(self, format_spec: str, /) -> str: ...
@disjoint_base
class bytes(Sequence[int]):
@overload
def __new__(cls, o: Iterable[SupportsIndex] | SupportsIndex | SupportsBytes | ReadableBuffer, /) -> Self: ...
@@ -745,6 +756,7 @@ class bytes(Sequence[int]):
def __buffer__(self, flags: int, /) -> memoryview: ...
@disjoint_base
class bytearray(MutableSequence[int]):
@overload
def __init__(self) -> None: ...
@@ -1009,6 +1021,8 @@ class slice(Generic[_StartT_co, _StopT_co, _StepT_co]):
def indices(self, len: SupportsIndex, /) -> tuple[int, int, int]: ...
# Making this a disjoint_base upsets pyright
# @disjoint_base
class tuple(Sequence[_T_co]):
def __new__(cls, iterable: Iterable[_T_co] = ..., /) -> Self: ...
def __len__(self) -> int: ...
@@ -1085,6 +1099,7 @@ class function:
# mypy uses `builtins.function.__get__` to represent methods, properties, and getset_descriptors so we type the return as Any.
def __get__(self, instance: object, owner: type | None = None, /) -> Any: ...
@disjoint_base
class list(MutableSequence[_T]):
@overload
def __init__(self) -> None: ...
@@ -1139,6 +1154,7 @@ class list(MutableSequence[_T]):
def __eq__(self, value: object, /) -> bool: ...
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
@disjoint_base
class dict(MutableMapping[_KT, _VT]):
# __init__ should be kept roughly in line with `collections.UserDict.__init__`, which has similar semantics
# Also multiprocessing.managers.SyncManager.dict()
@@ -1221,6 +1237,7 @@ class dict(MutableMapping[_KT, _VT]):
@overload
def __ior__(self, value: Iterable[tuple[_KT, _VT]], /) -> Self: ...
@disjoint_base
class set(MutableSet[_T]):
@overload
def __init__(self) -> None: ...
@@ -1260,6 +1277,7 @@ class set(MutableSet[_T]):
__hash__: ClassVar[None] # type: ignore[assignment]
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
@disjoint_base
class frozenset(AbstractSet[_T_co]):
@overload
def __new__(cls) -> Self: ...
@@ -1288,6 +1306,7 @@ class frozenset(AbstractSet[_T_co]):
def __hash__(self) -> int: ...
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
@disjoint_base
class enumerate(Generic[_T]):
def __new__(cls, iterable: Iterable[_T], start: int = 0) -> Self: ...
def __iter__(self) -> Self: ...
@@ -1319,6 +1338,7 @@ class range(Sequence[int]):
def __getitem__(self, key: slice, /) -> range: ...
def __reversed__(self) -> Iterator[int]: ...
@disjoint_base
class property:
fget: Callable[[Any], Any] | None
fset: Callable[[Any, Any], None] | None
@@ -1482,6 +1502,7 @@ else:
exit: _sitebuiltins.Quitter
@disjoint_base
class filter(Generic[_T]):
@overload
def __new__(cls, function: None, iterable: Iterable[_T | None], /) -> Self: ...
@@ -1545,7 +1566,7 @@ def len(obj: Sized, /) -> int: ...
license: _sitebuiltins._Printer
def locals() -> dict[str, Any]: ...
@disjoint_base
class map(Generic[_S]):
# 3.14 adds `strict` argument.
if sys.version_info >= (3, 14):
@@ -1852,6 +1873,7 @@ def pow(base: _SupportsSomeKindOfPow, exp: complex, mod: None = None) -> complex
quit: _sitebuiltins.Quitter
@disjoint_base
class reversed(Generic[_T]):
@overload
def __new__(cls, sequence: Reversible[_T], /) -> Iterator[_T]: ... # type: ignore[misc]
@@ -1915,7 +1937,7 @@ def sum(iterable: Iterable[_AddableT1], /, start: _AddableT2) -> _AddableT1 | _A
def vars(object: type, /) -> types.MappingProxyType[str, Any]: ...
@overload
def vars(object: Any = ..., /) -> dict[str, Any]: ...
@disjoint_base
class zip(Generic[_T_co]):
if sys.version_info >= (3, 10):
@overload
@@ -2019,6 +2041,7 @@ else:
Ellipsis: ellipsis
@disjoint_base
class BaseException:
args: tuple[Any, ...]
__cause__: BaseException | None
@@ -2037,14 +2060,17 @@ class BaseException:
class GeneratorExit(BaseException): ...
class KeyboardInterrupt(BaseException): ...
@disjoint_base
class SystemExit(BaseException):
code: sys._ExitCode
class Exception(BaseException): ...
@disjoint_base
class StopIteration(Exception):
value: Any
@disjoint_base
class OSError(Exception):
errno: int | None
strerror: str | None
@@ -2062,15 +2088,20 @@ if sys.platform == "win32":
class ArithmeticError(Exception): ...
class AssertionError(Exception): ...
class AttributeError(Exception):
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 10):
@disjoint_base
class AttributeError(Exception):
def __init__(self, *args: object, name: str | None = ..., obj: object = ...) -> None: ...
name: str
obj: object
else:
class AttributeError(Exception): ...
class BufferError(Exception): ...
class EOFError(Exception): ...
@disjoint_base
class ImportError(Exception):
def __init__(self, *args: object, name: str | None = ..., path: str | None = ...) -> None: ...
name: str | None
@@ -2082,15 +2113,20 @@ class ImportError(Exception):
class LookupError(Exception): ...
class MemoryError(Exception): ...
class NameError(Exception):
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 10):
@disjoint_base
class NameError(Exception):
def __init__(self, *args: object, name: str | None = ...) -> None: ...
name: str
else:
class NameError(Exception): ...
class ReferenceError(Exception): ...
class RuntimeError(Exception): ...
class StopAsyncIteration(Exception): ...
@disjoint_base
class SyntaxError(Exception):
msg: str
filename: str | None
@@ -2154,6 +2190,7 @@ class IndentationError(SyntaxError): ...
class TabError(IndentationError): ...
class UnicodeError(ValueError): ...
@disjoint_base
class UnicodeDecodeError(UnicodeError):
encoding: str
object: bytes
@@ -2162,6 +2199,7 @@ class UnicodeDecodeError(UnicodeError):
reason: str
def __init__(self, encoding: str, object: ReadableBuffer, start: int, end: int, reason: str, /) -> None: ...
@disjoint_base
class UnicodeEncodeError(UnicodeError):
encoding: str
object: str
@@ -2170,6 +2208,7 @@ class UnicodeEncodeError(UnicodeError):
reason: str
def __init__(self, encoding: str, object: str, start: int, end: int, reason: str, /) -> None: ...
@disjoint_base
class UnicodeTranslateError(UnicodeError):
encoding: None
object: str
@@ -2200,6 +2239,7 @@ if sys.version_info >= (3, 11):
_ExceptionT = TypeVar("_ExceptionT", bound=Exception)
# See `check_exception_group.py` for use-cases and comments.
@disjoint_base
class BaseExceptionGroup(BaseException, Generic[_BaseExceptionT_co]):
def __new__(cls, message: str, exceptions: Sequence[_BaseExceptionT_co], /) -> Self: ...
def __init__(self, message: str, exceptions: Sequence[_BaseExceptionT_co], /) -> None: ...
+60 -28
View File
@@ -1,10 +1,11 @@
import sys
import types
from _codecs import *
from _typeshed import ReadableBuffer
from abc import abstractmethod
from collections.abc import Callable, Generator, Iterable
from typing import Any, BinaryIO, ClassVar, Final, Literal, Protocol, TextIO, overload, type_check_only
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
__all__ = [
"register",
@@ -122,33 +123,64 @@ class _IncrementalDecoder(Protocol):
class _BufferedIncrementalDecoder(Protocol):
def __call__(self, errors: str = ...) -> BufferedIncrementalDecoder: ...
class CodecInfo(tuple[_Encoder, _Decoder, _StreamReader, _StreamWriter]):
_is_text_encoding: bool
@property
def encode(self) -> _Encoder: ...
@property
def decode(self) -> _Decoder: ...
@property
def streamreader(self) -> _StreamReader: ...
@property
def streamwriter(self) -> _StreamWriter: ...
@property
def incrementalencoder(self) -> _IncrementalEncoder: ...
@property
def incrementaldecoder(self) -> _IncrementalDecoder: ...
name: str
def __new__(
cls,
encode: _Encoder,
decode: _Decoder,
streamreader: _StreamReader | None = None,
streamwriter: _StreamWriter | None = None,
incrementalencoder: _IncrementalEncoder | None = None,
incrementaldecoder: _IncrementalDecoder | None = None,
name: str | None = None,
*,
_is_text_encoding: bool | None = None,
) -> Self: ...
if sys.version_info >= (3, 12):
class CodecInfo(tuple[_Encoder, _Decoder, _StreamReader, _StreamWriter]):
_is_text_encoding: bool
@property
def encode(self) -> _Encoder: ...
@property
def decode(self) -> _Decoder: ...
@property
def streamreader(self) -> _StreamReader: ...
@property
def streamwriter(self) -> _StreamWriter: ...
@property
def incrementalencoder(self) -> _IncrementalEncoder: ...
@property
def incrementaldecoder(self) -> _IncrementalDecoder: ...
name: str
def __new__(
cls,
encode: _Encoder,
decode: _Decoder,
streamreader: _StreamReader | None = None,
streamwriter: _StreamWriter | None = None,
incrementalencoder: _IncrementalEncoder | None = None,
incrementaldecoder: _IncrementalDecoder | None = None,
name: str | None = None,
*,
_is_text_encoding: bool | None = None,
) -> Self: ...
else:
@disjoint_base
class CodecInfo(tuple[_Encoder, _Decoder, _StreamReader, _StreamWriter]):
_is_text_encoding: bool
@property
def encode(self) -> _Encoder: ...
@property
def decode(self) -> _Decoder: ...
@property
def streamreader(self) -> _StreamReader: ...
@property
def streamwriter(self) -> _StreamWriter: ...
@property
def incrementalencoder(self) -> _IncrementalEncoder: ...
@property
def incrementaldecoder(self) -> _IncrementalDecoder: ...
name: str
def __new__(
cls,
encode: _Encoder,
decode: _Decoder,
streamreader: _StreamReader | None = None,
streamwriter: _StreamWriter | None = None,
incrementalencoder: _IncrementalEncoder | None = None,
incrementaldecoder: _IncrementalDecoder | None = None,
name: str | None = None,
*,
_is_text_encoding: bool | None = None,
) -> Self: ...
def getencoder(encoding: str) -> _Encoder: ...
def getdecoder(encoding: str) -> _Decoder: ...
+13 -4
View File
@@ -3,7 +3,7 @@ from _collections_abc import dict_items, dict_keys, dict_values
from _typeshed import SupportsItems, SupportsKeysAndGetItem, SupportsRichComparison, SupportsRichComparisonT
from types import GenericAlias
from typing import Any, ClassVar, Generic, NoReturn, SupportsIndex, TypeVar, final, overload, type_check_only
from typing_extensions import Self
from typing_extensions import Self, disjoint_base
if sys.version_info >= (3, 10):
from collections.abc import (
@@ -231,6 +231,7 @@ class UserString(Sequence[UserString]):
def upper(self) -> Self: ...
def zfill(self, width: int) -> Self: ...
@disjoint_base
class deque(MutableSequence[_T]):
@property
def maxlen(self) -> int | None: ...
@@ -356,6 +357,7 @@ class _odict_items(dict_items[_KT_co, _VT_co]): # type: ignore[misc] # pyright
class _odict_values(dict_values[_KT_co, _VT_co]): # type: ignore[misc] # pyright: ignore[reportGeneralTypeIssues]
def __reversed__(self) -> Iterator[_VT_co]: ...
@disjoint_base
class OrderedDict(dict[_KT, _VT]):
def popitem(self, last: bool = True) -> tuple[_KT, _VT]: ...
def move_to_end(self, key: _KT, last: bool = True) -> None: ...
@@ -395,6 +397,7 @@ class OrderedDict(dict[_KT, _VT]):
@overload
def __ror__(self, value: dict[_T1, _T2], /) -> OrderedDict[_KT | _T1, _VT | _T2]: ... # type: ignore[misc]
@disjoint_base
class defaultdict(dict[_KT, _VT]):
default_factory: Callable[[], _VT] | None
@overload
@@ -477,9 +480,15 @@ class ChainMap(MutableMapping[_KT, _VT]):
__copy__ = copy
# All arguments to `fromkeys` are passed to `dict.fromkeys` at runtime,
# so the signature should be kept in line with `dict.fromkeys`.
@classmethod
@overload
def fromkeys(cls, iterable: Iterable[_T]) -> ChainMap[_T, Any | None]: ...
if sys.version_info >= (3, 13):
@classmethod
@overload
def fromkeys(cls, iterable: Iterable[_T], /) -> ChainMap[_T, Any | None]: ...
else:
@classmethod
@overload
def fromkeys(cls, iterable: Iterable[_T]) -> ChainMap[_T, Any | None]: ...
@classmethod
@overload
# Special-case None: the user probably wants to add non-None values later.
+7 -1
View File
@@ -1,5 +1,6 @@
import sys
from typing import Final, NamedTuple, type_check_only
from typing_extensions import disjoint_base
if sys.platform != "win32":
@type_check_only
@@ -9,7 +10,12 @@ if sys.platform != "win32":
salt_chars: int
total_size: int
class _Method(_MethodBase): ...
if sys.version_info >= (3, 12):
class _Method(_MethodBase): ...
else:
@disjoint_base
class _Method(_MethodBase): ...
METHOD_CRYPT: Final[_Method]
METHOD_MD5: Final[_Method]
METHOD_SHA256: Final[_Method]
+5 -1
View File
@@ -2,7 +2,7 @@ import sys
from abc import abstractmethod
from time import struct_time
from typing import ClassVar, Final, NoReturn, SupportsIndex, final, overload, type_check_only
from typing_extensions import CapsuleType, Self, TypeAlias, deprecated
from typing_extensions import CapsuleType, Self, TypeAlias, deprecated, disjoint_base
if sys.version_info >= (3, 11):
__all__ = ("date", "datetime", "time", "timedelta", "timezone", "tzinfo", "MINYEAR", "MAXYEAR", "UTC")
@@ -51,6 +51,7 @@ class _IsoCalendarDate(tuple[int, int, int]):
@property
def weekday(self) -> int: ...
@disjoint_base
class date:
min: ClassVar[date]
max: ClassVar[date]
@@ -112,6 +113,7 @@ class date:
def isoweekday(self) -> int: ...
def isocalendar(self) -> _IsoCalendarDate: ...
@disjoint_base
class time:
min: ClassVar[time]
max: ClassVar[time]
@@ -191,6 +193,7 @@ class time:
_Date: TypeAlias = date
_Time: TypeAlias = time
@disjoint_base
class timedelta:
min: ClassVar[timedelta]
max: ClassVar[timedelta]
@@ -239,6 +242,7 @@ class timedelta:
def __bool__(self) -> bool: ...
def __hash__(self) -> int: ...
@disjoint_base
class datetime(date):
min: ClassVar[datetime]
max: ClassVar[datetime]
+3 -1
View File
@@ -27,7 +27,7 @@ from _decimal import (
from collections.abc import Container, Sequence
from types import TracebackType
from typing import Any, ClassVar, Literal, NamedTuple, final, overload, type_check_only
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
if sys.version_info >= (3, 14):
from _decimal import IEEE_CONTEXT_MAX_BITS as IEEE_CONTEXT_MAX_BITS, IEEEContext as IEEEContext
@@ -68,6 +68,7 @@ class Overflow(Inexact, Rounded): ...
class Underflow(Inexact, Rounded, Subnormal): ...
class FloatOperation(DecimalException, TypeError): ...
@disjoint_base
class Decimal:
def __new__(cls, value: _DecimalNew = "0", context: Context | None = None) -> Self: ...
if sys.version_info >= (3, 14):
@@ -173,6 +174,7 @@ class Decimal:
def __deepcopy__(self, memo: Any, /) -> Self: ...
def __format__(self, specifier: str, context: Context | None = None, /) -> str: ...
@disjoint_base
class Context:
# TODO: Context doesn't allow you to delete *any* attributes from instances of the class at runtime,
# even settable attributes like `prec` and `rounding`,
+39 -33
View File
@@ -3,7 +3,7 @@ import types
from collections.abc import Callable, Iterator
from opcode import * # `dis` re-exports it as a part of public API
from typing import IO, Any, Final, NamedTuple
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
__all__ = [
"code_info",
@@ -88,39 +88,45 @@ else:
starts_line: int | None
is_jump_target: bool
class Instruction(_Instruction):
if sys.version_info < (3, 13):
if sys.version_info >= (3, 12):
class Instruction(_Instruction):
if sys.version_info < (3, 13):
def _disassemble(self, lineno_width: int = 3, mark_as_current: bool = False, offset_width: int = 4) -> str: ...
if sys.version_info >= (3, 13):
@property
def oparg(self) -> int: ...
@property
def baseopcode(self) -> int: ...
@property
def baseopname(self) -> str: ...
@property
def cache_offset(self) -> int: ...
@property
def end_offset(self) -> int: ...
@property
def jump_target(self) -> int: ...
@property
def is_jump_target(self) -> bool: ...
if sys.version_info >= (3, 14):
@staticmethod
def make(
opname: str,
arg: int | None,
argval: Any,
argrepr: str,
offset: int,
start_offset: int,
starts_line: bool,
line_number: int | None,
label: int | None = None,
positions: Positions | None = None,
cache_info: list[tuple[str, int, Any]] | None = None,
) -> Instruction: ...
else:
@disjoint_base
class Instruction(_Instruction):
def _disassemble(self, lineno_width: int = 3, mark_as_current: bool = False, offset_width: int = 4) -> str: ...
if sys.version_info >= (3, 13):
@property
def oparg(self) -> int: ...
@property
def baseopcode(self) -> int: ...
@property
def baseopname(self) -> str: ...
@property
def cache_offset(self) -> int: ...
@property
def end_offset(self) -> int: ...
@property
def jump_target(self) -> int: ...
@property
def is_jump_target(self) -> bool: ...
if sys.version_info >= (3, 14):
@staticmethod
def make(
opname: str,
arg: int | None,
argval: Any,
argrepr: str,
offset: int,
start_offset: int,
starts_line: bool,
line_number: int | None,
label: int | None = None,
positions: Positions | None = None,
cache_info: list[tuple[str, int, Any]] | None = None,
) -> Instruction: ...
class Bytecode:
codeobj: types.CodeType
+34 -11
View File
@@ -5,7 +5,7 @@ from _typeshed import SupportsKeysAndGetItem, Unused
from builtins import property as _builtins_property
from collections.abc import Callable, Iterable, Iterator, Mapping
from typing import Any, Final, Generic, Literal, TypeVar, overload
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
__all__ = ["EnumMeta", "Enum", "IntEnum", "Flag", "IntFlag", "auto", "unique"]
@@ -228,16 +228,25 @@ class Enum(metaclass=EnumMeta):
if sys.version_info >= (3, 11):
class ReprEnum(Enum): ...
if sys.version_info >= (3, 11):
_IntEnumBase = ReprEnum
else:
_IntEnumBase = Enum
if sys.version_info >= (3, 12):
class IntEnum(int, ReprEnum):
_value_: int
@_magic_enum_attr
def value(self) -> int: ...
def __new__(cls, value: int) -> Self: ...
class IntEnum(int, _IntEnumBase):
_value_: int
@_magic_enum_attr
def value(self) -> int: ...
def __new__(cls, value: int) -> Self: ...
else:
if sys.version_info >= (3, 11):
_IntEnumBase = ReprEnum
else:
_IntEnumBase = Enum
@disjoint_base
class IntEnum(int, _IntEnumBase):
_value_: int
@_magic_enum_attr
def value(self) -> int: ...
def __new__(cls, value: int) -> Self: ...
def unique(enumeration: _EnumerationT) -> _EnumerationT: ...
@@ -301,7 +310,7 @@ if sys.version_info >= (3, 11):
def global_enum_repr(self: Enum) -> str: ...
def global_flag_repr(self: Flag) -> str: ...
if sys.version_info >= (3, 11):
if sys.version_info >= (3, 12):
# The body of the class is the same, but the base classes are different.
class IntFlag(int, ReprEnum, Flag, boundary=KEEP): # type: ignore[misc] # complaints about incompatible bases
def __new__(cls, value: int) -> Self: ...
@@ -313,7 +322,21 @@ if sys.version_info >= (3, 11):
__rand__ = __and__
__rxor__ = __xor__
elif sys.version_info >= (3, 11):
# The body of the class is the same, but the base classes are different.
@disjoint_base
class IntFlag(int, ReprEnum, Flag, boundary=KEEP): # type: ignore[misc] # complaints about incompatible bases
def __new__(cls, value: int) -> Self: ...
def __or__(self, other: int) -> Self: ...
def __and__(self, other: int) -> Self: ...
def __xor__(self, other: int) -> Self: ...
def __invert__(self) -> Self: ...
__ror__ = __or__
__rand__ = __and__
__rxor__ = __xor__
else:
@disjoint_base
class IntFlag(int, Flag): # type: ignore[misc] # complaints about incompatible bases
def __new__(cls, value: int) -> Self: ...
def __or__(self, other: int) -> Self: ...
+2 -2
View File
@@ -4,7 +4,7 @@ from _typeshed import SupportsAllComparisons, SupportsItems
from collections.abc import Callable, Hashable, Iterable, Sized
from types import GenericAlias
from typing import Any, Final, Generic, Literal, NamedTuple, TypedDict, TypeVar, final, overload, type_check_only
from typing_extensions import ParamSpec, Self, TypeAlias
from typing_extensions import ParamSpec, Self, TypeAlias, disjoint_base
__all__ = [
"update_wrapper",
@@ -150,7 +150,7 @@ else:
def total_ordering(cls: type[_T]) -> type[_T]: ...
def cmp_to_key(mycmp: Callable[[_T, _T], int]) -> Callable[[_T], SupportsAllComparisons]: ...
@disjoint_base
class partial(Generic[_T]):
@property
def func(self) -> Callable[..., _T]: ...
+44 -18
View File
@@ -11,7 +11,7 @@ from os import PathLike
from pathlib import Path
from re import Pattern
from typing import Any, ClassVar, Generic, NamedTuple, TypeVar, overload
from typing_extensions import Self, TypeAlias, deprecated
from typing_extensions import Self, TypeAlias, deprecated, disjoint_base
_T = TypeVar("_T")
_KT = TypeVar("_KT")
@@ -59,23 +59,21 @@ else:
value: str
group: str
class EntryPoint(_EntryPointBase):
pattern: ClassVar[Pattern[str]]
if sys.version_info >= (3, 11):
if sys.version_info >= (3, 11):
class EntryPoint(_EntryPointBase):
pattern: ClassVar[Pattern[str]]
name: str
value: str
group: str
def __init__(self, name: str, value: str, group: str) -> None: ...
def load(self) -> Any: ... # Callable[[], Any] or an importable module
@property
def extras(self) -> list[str]: ...
@property
def module(self) -> str: ...
@property
def attr(self) -> str: ...
if sys.version_info >= (3, 10):
def load(self) -> Any: ... # Callable[[], Any] or an importable module
@property
def extras(self) -> list[str]: ...
@property
def module(self) -> str: ...
@property
def attr(self) -> str: ...
dist: ClassVar[Distribution | None]
def matches(
self,
@@ -87,12 +85,38 @@ class EntryPoint(_EntryPointBase):
attr: str = ...,
extras: list[str] = ...,
) -> bool: ... # undocumented
def __hash__(self) -> int: ...
if sys.version_info >= (3, 11):
def __hash__(self) -> int: ...
def __eq__(self, other: object) -> bool: ...
def __lt__(self, other: object) -> bool: ...
if sys.version_info < (3, 12):
if sys.version_info < (3, 12):
def __iter__(self) -> Iterator[Any]: ... # result of iter((str, Self)), really
else:
@disjoint_base
class EntryPoint(_EntryPointBase):
pattern: ClassVar[Pattern[str]]
def load(self) -> Any: ... # Callable[[], Any] or an importable module
@property
def extras(self) -> list[str]: ...
@property
def module(self) -> str: ...
@property
def attr(self) -> str: ...
if sys.version_info >= (3, 10):
dist: ClassVar[Distribution | None]
def matches(
self,
*,
name: str = ...,
value: str = ...,
group: str = ...,
module: str = ...,
attr: str = ...,
extras: list[str] = ...,
) -> bool: ... # undocumented
def __hash__(self) -> int: ...
def __iter__(self) -> Iterator[Any]: ... # result of iter((str, Self)), really
if sys.version_info >= (3, 12):
@@ -115,10 +139,12 @@ if sys.version_info >= (3, 12):
def groups(self) -> set[str]: ...
elif sys.version_info >= (3, 10):
class DeprecatedList(list[_T]): ...
class DeprecatedList(list[_T]):
__slots__ = ()
class EntryPoints(DeprecatedList[EntryPoint]): # use as list is deprecated since 3.10
# int argument is deprecated since 3.10
__slots__ = ()
def __getitem__(self, name: int | str) -> EntryPoint: ... # type: ignore[override]
def select(
self,
+58 -27
View File
@@ -26,7 +26,7 @@ from types import (
WrapperDescriptorType,
)
from typing import Any, ClassVar, Final, Literal, NamedTuple, Protocol, TypeVar, overload, type_check_only
from typing_extensions import ParamSpec, Self, TypeAlias, TypeGuard, TypeIs, deprecated
from typing_extensions import ParamSpec, Self, TypeAlias, TypeGuard, TypeIs, deprecated, disjoint_base
if sys.version_info >= (3, 14):
from annotationlib import Format
@@ -570,19 +570,6 @@ if sys.version_info >= (3, 11):
code_context: list[str] | None
index: int | None # type: ignore[assignment]
class Traceback(_Traceback):
positions: dis.Positions | None
def __new__(
cls,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
class _FrameInfo(NamedTuple):
frame: FrameType
filename: str
@@ -591,19 +578,63 @@ if sys.version_info >= (3, 11):
code_context: list[str] | None
index: int | None # type: ignore[assignment]
class FrameInfo(_FrameInfo):
positions: dis.Positions | None
def __new__(
cls,
frame: FrameType,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
if sys.version_info >= (3, 12):
class Traceback(_Traceback):
positions: dis.Positions | None
def __new__(
cls,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
class FrameInfo(_FrameInfo):
positions: dis.Positions | None
def __new__(
cls,
frame: FrameType,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
else:
@disjoint_base
class Traceback(_Traceback):
positions: dis.Positions | None
def __new__(
cls,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
@disjoint_base
class FrameInfo(_FrameInfo):
positions: dis.Positions | None
def __new__(
cls,
frame: FrameType,
filename: str,
lineno: int,
function: str,
code_context: list[str] | None,
index: int | None,
*,
positions: dis.Positions | None = None,
) -> Self: ...
else:
class Traceback(NamedTuple):
+20 -2
View File
@@ -3,7 +3,7 @@ from _typeshed import MaybeNone
from collections.abc import Callable, Iterable, Iterator
from types import GenericAlias
from typing import Any, Generic, Literal, SupportsComplex, SupportsFloat, SupportsIndex, SupportsInt, TypeVar, overload
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
_T = TypeVar("_T")
_S = TypeVar("_S")
@@ -27,6 +27,7 @@ _Predicate: TypeAlias = Callable[[_T], object]
# Technically count can take anything that implements a number protocol and has an add method
# but we can't enforce the add method
@disjoint_base
class count(Generic[_N]):
@overload
def __new__(cls) -> count[int]: ...
@@ -37,11 +38,13 @@ class count(Generic[_N]):
def __next__(self) -> _N: ...
def __iter__(self) -> Self: ...
@disjoint_base
class cycle(Generic[_T]):
def __new__(cls, iterable: Iterable[_T], /) -> Self: ...
def __next__(self) -> _T: ...
def __iter__(self) -> Self: ...
@disjoint_base
class repeat(Generic[_T]):
@overload
def __new__(cls, object: _T) -> Self: ...
@@ -51,6 +54,7 @@ class repeat(Generic[_T]):
def __iter__(self) -> Self: ...
def __length_hint__(self) -> int: ...
@disjoint_base
class accumulate(Generic[_T]):
@overload
def __new__(cls, iterable: Iterable[_T], func: None = None, *, initial: _T | None = ...) -> Self: ...
@@ -59,6 +63,7 @@ class accumulate(Generic[_T]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
@disjoint_base
class chain(Generic[_T]):
def __new__(cls, *iterables: Iterable[_T]) -> Self: ...
def __next__(self) -> _T: ...
@@ -68,21 +73,25 @@ class chain(Generic[_T]):
def from_iterable(cls: type[Any], iterable: Iterable[Iterable[_S]], /) -> chain[_S]: ...
def __class_getitem__(cls, item: Any, /) -> GenericAlias: ...
@disjoint_base
class compress(Generic[_T]):
def __new__(cls, data: Iterable[_T], selectors: Iterable[Any]) -> Self: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
@disjoint_base
class dropwhile(Generic[_T]):
def __new__(cls, predicate: _Predicate[_T], iterable: Iterable[_T], /) -> Self: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
@disjoint_base
class filterfalse(Generic[_T]):
def __new__(cls, function: _Predicate[_T] | None, iterable: Iterable[_T], /) -> Self: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
@disjoint_base
class groupby(Generic[_T_co, _S_co]):
@overload
def __new__(cls, iterable: Iterable[_T1], key: None = None) -> groupby[_T1, _T1]: ...
@@ -91,6 +100,7 @@ class groupby(Generic[_T_co, _S_co]):
def __iter__(self) -> Self: ...
def __next__(self) -> tuple[_T_co, Iterator[_S_co]]: ...
@disjoint_base
class islice(Generic[_T]):
@overload
def __new__(cls, iterable: Iterable[_T], stop: int | None, /) -> Self: ...
@@ -99,18 +109,20 @@ class islice(Generic[_T]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
@disjoint_base
class starmap(Generic[_T_co]):
def __new__(cls, function: Callable[..., _T], iterable: Iterable[Iterable[Any]], /) -> starmap[_T]: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
@disjoint_base
class takewhile(Generic[_T]):
def __new__(cls, predicate: _Predicate[_T], iterable: Iterable[_T], /) -> Self: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T: ...
def tee(iterable: Iterable[_T], n: int = 2, /) -> tuple[Iterator[_T], ...]: ...
@disjoint_base
class zip_longest(Generic[_T_co]):
# one iterable (fillvalue doesn't matter)
@overload
@@ -189,6 +201,7 @@ class zip_longest(Generic[_T_co]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
@disjoint_base
class product(Generic[_T_co]):
@overload
def __new__(cls, iter1: Iterable[_T1], /) -> product[tuple[_T1]]: ...
@@ -274,6 +287,7 @@ class product(Generic[_T_co]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
@disjoint_base
class permutations(Generic[_T_co]):
@overload
def __new__(cls, iterable: Iterable[_T], r: Literal[2]) -> permutations[tuple[_T, _T]]: ...
@@ -288,6 +302,7 @@ class permutations(Generic[_T_co]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
@disjoint_base
class combinations(Generic[_T_co]):
@overload
def __new__(cls, iterable: Iterable[_T], r: Literal[2]) -> combinations[tuple[_T, _T]]: ...
@@ -302,6 +317,7 @@ class combinations(Generic[_T_co]):
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
@disjoint_base
class combinations_with_replacement(Generic[_T_co]):
@overload
def __new__(cls, iterable: Iterable[_T], r: Literal[2]) -> combinations_with_replacement[tuple[_T, _T]]: ...
@@ -317,12 +333,14 @@ class combinations_with_replacement(Generic[_T_co]):
def __next__(self) -> _T_co: ...
if sys.version_info >= (3, 10):
@disjoint_base
class pairwise(Generic[_T_co]):
def __new__(cls, iterable: Iterable[_T], /) -> pairwise[tuple[_T, _T]]: ...
def __iter__(self) -> Self: ...
def __next__(self) -> _T_co: ...
if sys.version_info >= (3, 12):
@disjoint_base
class batched(Generic[_T_co]):
if sys.version_info >= (3, 13):
def __new__(cls, iterable: Iterable[_T_co], n: int, *, strict: bool = False) -> Self: ...
+15 -6
View File
@@ -5,7 +5,7 @@ from configparser import RawConfigParser
from re import Pattern
from threading import Thread
from typing import IO, Any, Final, Literal, SupportsIndex, TypedDict, overload, type_check_only
from typing_extensions import Required, TypeAlias
from typing_extensions import Required, TypeAlias, disjoint_base
from . import Filter, Filterer, Formatter, Handler, Logger, _FilterType, _FormatStyle, _Level
@@ -100,11 +100,20 @@ class ConvertingList(list[Any], ConvertingMixin): # undocumented
def __getitem__(self, key: slice) -> Any: ...
def pop(self, idx: SupportsIndex = -1) -> Any: ...
class ConvertingTuple(tuple[Any, ...], ConvertingMixin): # undocumented
@overload
def __getitem__(self, key: SupportsIndex) -> Any: ...
@overload
def __getitem__(self, key: slice) -> Any: ...
if sys.version_info >= (3, 12):
class ConvertingTuple(tuple[Any, ...], ConvertingMixin): # undocumented
@overload
def __getitem__(self, key: SupportsIndex) -> Any: ...
@overload
def __getitem__(self, key: slice) -> Any: ...
else:
@disjoint_base
class ConvertingTuple(tuple[Any, ...], ConvertingMixin): # undocumented
@overload
def __getitem__(self, key: SupportsIndex) -> Any: ...
@overload
def __getitem__(self, key: slice) -> Any: ...
class BaseConfigurator:
CONVERT_PATTERN: Pattern[str]
+2 -1
View File
@@ -3,7 +3,7 @@ import sys
from _typeshed import ReadableBuffer, Unused
from collections.abc import Iterator
from typing import Final, Literal, NoReturn, overload
from typing_extensions import Self
from typing_extensions import Self, disjoint_base
ACCESS_DEFAULT: Final = 0
ACCESS_READ: Final = 1
@@ -31,6 +31,7 @@ if sys.platform != "win32":
PAGESIZE: Final[int]
@disjoint_base
class mmap:
if sys.platform == "win32":
def __new__(self, fileno: int, length: int, tagname: str | None = None, access: int = 0, offset: int = 0) -> Self: ...
+1
View File
@@ -146,6 +146,7 @@ class Path(PurePath):
__slots__ = ()
else:
__slots__ = ("_accessor",)
if sys.version_info >= (3, 12):
def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ... # pyright: ignore[reportInconsistentConstructor]
else:
+16 -6
View File
@@ -1,6 +1,6 @@
import sys
from typing import NamedTuple, type_check_only
from typing_extensions import Self, deprecated
from typing_extensions import Self, deprecated, disjoint_base
def libc_ver(executable: str | None = None, lib: str = "", version: str = "", chunksize: int = 16384) -> tuple[str, str]: ...
def win32_ver(release: str = "", version: str = "", csd: str = "", ptype: str = "") -> tuple[str, str, str, str]: ...
@@ -46,13 +46,23 @@ class _uname_result_base(NamedTuple):
# uname_result emulates a 6-field named tuple, but the processor field
# is lazily evaluated rather than being passed in to the constructor.
class uname_result(_uname_result_base):
if sys.version_info >= (3, 10):
if sys.version_info >= (3, 12):
class uname_result(_uname_result_base):
__match_args__ = ("system", "node", "release", "version", "machine") # pyright: ignore[reportAssignmentType]
def __new__(_cls, system: str, node: str, release: str, version: str, machine: str) -> Self: ...
@property
def processor(self) -> str: ...
def __new__(_cls, system: str, node: str, release: str, version: str, machine: str) -> Self: ...
@property
def processor(self) -> str: ...
else:
@disjoint_base
class uname_result(_uname_result_base):
if sys.version_info >= (3, 10):
__match_args__ = ("system", "node", "release", "version", "machine") # pyright: ignore[reportAssignmentType]
def __new__(_cls, system: str, node: str, release: str, version: str, machine: str) -> Self: ...
@property
def processor(self) -> str: ...
def uname() -> uname_result: ...
def system() -> str: ...
+4 -1
View File
@@ -63,7 +63,7 @@ from sqlite3.dbapi2 import (
)
from types import TracebackType
from typing import Any, Literal, Protocol, SupportsIndex, TypeVar, final, overload, type_check_only
from typing_extensions import Self, TypeAlias
from typing_extensions import Self, TypeAlias, disjoint_base
if sys.version_info < (3, 14):
from sqlite3.dbapi2 import version_info as version_info
@@ -268,6 +268,7 @@ class OperationalError(DatabaseError): ...
class ProgrammingError(DatabaseError): ...
class Warning(Exception): ...
@disjoint_base
class Connection:
@property
def DataError(self) -> type[DataError]: ...
@@ -405,6 +406,7 @@ class Connection:
self, type: type[BaseException] | None, value: BaseException | None, traceback: TracebackType | None, /
) -> Literal[False]: ...
@disjoint_base
class Cursor:
arraysize: int
@property
@@ -436,6 +438,7 @@ class Cursor:
class PrepareProtocol:
def __init__(self, *args: object, **kwargs: object) -> None: ...
@disjoint_base
class Row(Sequence[Any]):
def __new__(cls, cursor: Cursor, data: tuple[Any, ...], /) -> Self: ...
def keys(self) -> list[str]: ...
+11 -4
View File
@@ -1,15 +1,22 @@
import sys
from re import error as error
from typing import Final
from typing_extensions import Self
from typing_extensions import Self, disjoint_base
MAXGROUPS: Final[int]
MAGIC: Final[int]
class _NamedIntConstant(int):
name: str
def __new__(cls, value: int, name: str) -> Self: ...
if sys.version_info >= (3, 12):
class _NamedIntConstant(int):
name: str
def __new__(cls, value: int, name: str) -> Self: ...
else:
@disjoint_base
class _NamedIntConstant(int):
name: str
def __new__(cls, value: int, name: str) -> Self: ...
MAXREPEAT: Final[_NamedIntConstant]
OPCODES: list[_NamedIntConstant]
+22
View File
@@ -744,6 +744,28 @@ def tar_filter(member: TarInfo, dest_path: str) -> TarInfo: ...
def data_filter(member: TarInfo, dest_path: str) -> TarInfo: ...
class TarInfo:
__slots__ = (
"name",
"mode",
"uid",
"gid",
"size",
"mtime",
"chksum",
"type",
"linkname",
"uname",
"gname",
"devmajor",
"devminor",
"offset",
"offset_data",
"pax_headers",
"sparse",
"_tarfile",
"_sparse_structs",
"_link_target",
)
name: str
path: str
size: int
+6 -2
View File
@@ -6,7 +6,7 @@ from tkinter.constants import *
from tkinter.font import _FontDescription
from types import GenericAlias, TracebackType
from typing import Any, ClassVar, Final, Generic, Literal, NamedTuple, Protocol, TypedDict, TypeVar, overload, type_check_only
from typing_extensions import TypeAlias, TypeVarTuple, Unpack, deprecated
from typing_extensions import TypeAlias, TypeVarTuple, Unpack, deprecated, disjoint_base
if sys.version_info >= (3, 11):
from enum import StrEnum
@@ -198,7 +198,11 @@ if sys.version_info >= (3, 11):
releaselevel: str
serial: int
class _VersionInfoType(_VersionInfoTypeBase): ...
if sys.version_info >= (3, 12):
class _VersionInfoType(_VersionInfoTypeBase): ...
else:
@disjoint_base
class _VersionInfoType(_VersionInfoTypeBase): ...
if sys.version_info >= (3, 11):
class EventType(StrEnum):
+11 -4
View File
@@ -4,7 +4,7 @@ from collections.abc import Callable, Generator, Iterable, Sequence
from re import Pattern
from token import *
from typing import Any, Final, NamedTuple, TextIO, type_check_only
from typing_extensions import TypeAlias
from typing_extensions import TypeAlias, disjoint_base
if sys.version_info < (3, 12):
# Avoid double assignment to Final name by imports, which pyright objects to.
@@ -115,9 +115,16 @@ class _TokenInfo(NamedTuple):
end: _Position
line: str
class TokenInfo(_TokenInfo):
@property
def exact_type(self) -> int: ...
if sys.version_info >= (3, 12):
class TokenInfo(_TokenInfo):
@property
def exact_type(self) -> int: ...
else:
@disjoint_base
class TokenInfo(_TokenInfo):
@property
def exact_type(self) -> int: ...
# Backwards compatible tokens can be sequences of a shorter length too
_Token: TypeAlias = TokenInfo | Sequence[int | str | _Position]
+29 -13
View File
@@ -4,7 +4,7 @@ from collections.abc import Callable, Generator, Sequence
from contextlib import contextmanager
from tkinter import Canvas, Frame, Misc, PhotoImage, Scrollbar
from typing import Any, ClassVar, Literal, TypedDict, overload, type_check_only
from typing_extensions import Self, TypeAlias, deprecated
from typing_extensions import Self, TypeAlias, deprecated, disjoint_base
__all__ = [
"ScrolledCanvas",
@@ -163,18 +163,34 @@ class _PenState(TypedDict):
_Speed: TypeAlias = str | float
_PolygonCoords: TypeAlias = Sequence[tuple[float, float]]
class Vec2D(tuple[float, float]):
def __new__(cls, x: float, y: float) -> Self: ...
def __add__(self, other: tuple[float, float]) -> Vec2D: ... # type: ignore[override]
@overload # type: ignore[override]
def __mul__(self, other: Vec2D) -> float: ...
@overload
def __mul__(self, other: float) -> Vec2D: ...
def __rmul__(self, other: float) -> Vec2D: ... # type: ignore[override]
def __sub__(self, other: tuple[float, float]) -> Vec2D: ...
def __neg__(self) -> Vec2D: ...
def __abs__(self) -> float: ...
def rotate(self, angle: float) -> Vec2D: ...
if sys.version_info >= (3, 12):
class Vec2D(tuple[float, float]):
def __new__(cls, x: float, y: float) -> Self: ...
def __add__(self, other: tuple[float, float]) -> Vec2D: ... # type: ignore[override]
@overload # type: ignore[override]
def __mul__(self, other: Vec2D) -> float: ...
@overload
def __mul__(self, other: float) -> Vec2D: ...
def __rmul__(self, other: float) -> Vec2D: ... # type: ignore[override]
def __sub__(self, other: tuple[float, float]) -> Vec2D: ...
def __neg__(self) -> Vec2D: ...
def __abs__(self) -> float: ...
def rotate(self, angle: float) -> Vec2D: ...
else:
@disjoint_base
class Vec2D(tuple[float, float]):
def __new__(cls, x: float, y: float) -> Self: ...
def __add__(self, other: tuple[float, float]) -> Vec2D: ... # type: ignore[override]
@overload # type: ignore[override]
def __mul__(self, other: Vec2D) -> float: ...
@overload
def __mul__(self, other: float) -> Vec2D: ...
def __rmul__(self, other: float) -> Vec2D: ... # type: ignore[override]
def __sub__(self, other: tuple[float, float]) -> Vec2D: ...
def __neg__(self) -> Vec2D: ...
def __abs__(self) -> float: ...
def rotate(self, angle: float) -> Vec2D: ...
# Does not actually inherit from Canvas, but dynamically gets all methods of Canvas
class ScrolledCanvas(Canvas, Frame): # type: ignore[misc]
+28 -14
View File
@@ -17,7 +17,7 @@ from collections.abc import (
)
from importlib.machinery import ModuleSpec
from typing import Any, ClassVar, Literal, TypeVar, final, overload
from typing_extensions import ParamSpec, Self, TypeAliasType, TypeVarTuple, deprecated
from typing_extensions import ParamSpec, Self, TypeAliasType, TypeVarTuple, deprecated, disjoint_base
if sys.version_info >= (3, 14):
from _typeshed import AnnotateFunc
@@ -331,20 +331,34 @@ class MappingProxyType(Mapping[_KT, _VT_co]):
def __or__(self, value: Mapping[_T1, _T2], /) -> dict[_KT | _T1, _VT_co | _T2]: ...
def __ror__(self, value: Mapping[_T1, _T2], /) -> dict[_KT | _T1, _VT_co | _T2]: ...
class SimpleNamespace:
__hash__: ClassVar[None] # type: ignore[assignment]
if sys.version_info >= (3, 13):
def __init__(self, mapping_or_iterable: Mapping[str, Any] | Iterable[tuple[str, Any]] = (), /, **kwargs: Any) -> None: ...
else:
if sys.version_info >= (3, 12):
@disjoint_base
class SimpleNamespace:
__hash__: ClassVar[None] # type: ignore[assignment]
if sys.version_info >= (3, 13):
def __init__(
self, mapping_or_iterable: Mapping[str, Any] | Iterable[tuple[str, Any]] = (), /, **kwargs: Any
) -> None: ...
else:
def __init__(self, **kwargs: Any) -> None: ...
def __eq__(self, value: object, /) -> bool: ...
def __getattribute__(self, name: str, /) -> Any: ...
def __setattr__(self, name: str, value: Any, /) -> None: ...
def __delattr__(self, name: str, /) -> None: ...
if sys.version_info >= (3, 13):
def __replace__(self, **kwargs: Any) -> Self: ...
else:
class SimpleNamespace:
__hash__: ClassVar[None] # type: ignore[assignment]
def __init__(self, **kwargs: Any) -> None: ...
def __eq__(self, value: object, /) -> bool: ...
def __getattribute__(self, name: str, /) -> Any: ...
def __setattr__(self, name: str, value: Any, /) -> None: ...
def __delattr__(self, name: str, /) -> None: ...
def __eq__(self, value: object, /) -> bool: ...
def __getattribute__(self, name: str, /) -> Any: ...
def __setattr__(self, name: str, value: Any, /) -> None: ...
def __delattr__(self, name: str, /) -> None: ...
if sys.version_info >= (3, 13):
def __replace__(self, **kwargs: Any) -> Self: ...
@disjoint_base
class ModuleType:
__name__: str
__file__: str | None
@@ -661,7 +675,7 @@ _P = ParamSpec("_P")
def coroutine(func: Callable[_P, Generator[Any, Any, _R]]) -> Callable[_P, Awaitable[_R]]: ...
@overload
def coroutine(func: _Fn) -> _Fn: ...
@disjoint_base
class GenericAlias:
@property
def __origin__(self) -> type | TypeAliasType: ...
+1
View File
@@ -726,6 +726,7 @@ class MutableSet(AbstractSet[_T]):
def __isub__(self, it: AbstractSet[Any]) -> typing_extensions.Self: ...
class MappingView(Sized):
__slots__ = ("_mapping",)
def __init__(self, mapping: Sized) -> None: ... # undocumented
def __len__(self) -> int: ...
+7
View File
@@ -408,36 +408,43 @@ else:
@runtime_checkable
class SupportsInt(Protocol, metaclass=abc.ABCMeta):
__slots__ = ()
@abc.abstractmethod
def __int__(self) -> int: ...
@runtime_checkable
class SupportsFloat(Protocol, metaclass=abc.ABCMeta):
__slots__ = ()
@abc.abstractmethod
def __float__(self) -> float: ...
@runtime_checkable
class SupportsComplex(Protocol, metaclass=abc.ABCMeta):
__slots__ = ()
@abc.abstractmethod
def __complex__(self) -> complex: ...
@runtime_checkable
class SupportsBytes(Protocol, metaclass=abc.ABCMeta):
__slots__ = ()
@abc.abstractmethod
def __bytes__(self) -> bytes: ...
@runtime_checkable
class SupportsIndex(Protocol, metaclass=abc.ABCMeta):
__slots__ = ()
@abc.abstractmethod
def __index__(self) -> int: ...
@runtime_checkable
class SupportsAbs(Protocol[_T_co]):
__slots__ = ()
@abc.abstractmethod
def __abs__(self) -> _T_co: ...
@runtime_checkable
class SupportsRound(Protocol[_T_co]):
__slots__ = ()
@overload
@abc.abstractmethod
def __round__(self) -> int: ...
+61 -24
View File
@@ -4,7 +4,7 @@ from collections.abc import Awaitable, Callable, Coroutine, Iterable, Mapping, S
from contextlib import _GeneratorContextManager
from types import TracebackType
from typing import Any, ClassVar, Final, Generic, Literal, TypeVar, overload, type_check_only
from typing_extensions import ParamSpec, Self, TypeAlias
from typing_extensions import ParamSpec, Self, TypeAlias, disjoint_base
_T = TypeVar("_T")
_TT = TypeVar("_TT", bound=type[Any])
@@ -68,29 +68,66 @@ _ArgsKwargs: TypeAlias = tuple[tuple[Any, ...], Mapping[str, Any]]
_NameArgsKwargs: TypeAlias = tuple[str, tuple[Any, ...], Mapping[str, Any]]
_CallValue: TypeAlias = str | tuple[Any, ...] | Mapping[str, Any] | _ArgsKwargs | _NameArgsKwargs
class _Call(tuple[Any, ...]):
def __new__(
cls, value: _CallValue = (), name: str | None = "", parent: _Call | None = None, two: bool = False, from_kall: bool = True
) -> Self: ...
def __init__(
self,
value: _CallValue = (),
name: str | None = None,
parent: _Call | None = None,
two: bool = False,
from_kall: bool = True,
) -> None: ...
__hash__: ClassVar[None] # type: ignore[assignment]
def __eq__(self, other: object) -> bool: ...
def __ne__(self, value: object, /) -> bool: ...
def __call__(self, *args: Any, **kwargs: Any) -> _Call: ...
def __getattr__(self, attr: str) -> Any: ...
def __getattribute__(self, attr: str) -> Any: ...
@property
def args(self) -> tuple[Any, ...]: ...
@property
def kwargs(self) -> Mapping[str, Any]: ...
def call_list(self) -> Any: ...
if sys.version_info >= (3, 12):
class _Call(tuple[Any, ...]):
def __new__(
cls,
value: _CallValue = (),
name: str | None = "",
parent: _Call | None = None,
two: bool = False,
from_kall: bool = True,
) -> Self: ...
def __init__(
self,
value: _CallValue = (),
name: str | None = None,
parent: _Call | None = None,
two: bool = False,
from_kall: bool = True,
) -> None: ...
__hash__: ClassVar[None] # type: ignore[assignment]
def __eq__(self, other: object) -> bool: ...
def __ne__(self, value: object, /) -> bool: ...
def __call__(self, *args: Any, **kwargs: Any) -> _Call: ...
def __getattr__(self, attr: str) -> Any: ...
def __getattribute__(self, attr: str) -> Any: ...
@property
def args(self) -> tuple[Any, ...]: ...
@property
def kwargs(self) -> Mapping[str, Any]: ...
def call_list(self) -> Any: ...
else:
@disjoint_base
class _Call(tuple[Any, ...]):
def __new__(
cls,
value: _CallValue = (),
name: str | None = "",
parent: _Call | None = None,
two: bool = False,
from_kall: bool = True,
) -> Self: ...
def __init__(
self,
value: _CallValue = (),
name: str | None = None,
parent: _Call | None = None,
two: bool = False,
from_kall: bool = True,
) -> None: ...
__hash__: ClassVar[None] # type: ignore[assignment]
def __eq__(self, other: object) -> bool: ...
def __ne__(self, value: object, /) -> bool: ...
def __call__(self, *args: Any, **kwargs: Any) -> _Call: ...
def __getattr__(self, attr: str) -> Any: ...
def __getattribute__(self, attr: str) -> Any: ...
@property
def args(self) -> tuple[Any, ...]: ...
@property
def kwargs(self) -> Mapping[str, Any]: ...
def call_list(self) -> Any: ...
call: _Call
+2 -1
View File
@@ -4,7 +4,7 @@ from _weakrefset import WeakSet as WeakSet
from collections.abc import Callable, Iterable, Iterator, Mapping, MutableMapping
from types import GenericAlias
from typing import Any, ClassVar, Generic, TypeVar, final, overload
from typing_extensions import ParamSpec, Self
from typing_extensions import ParamSpec, Self, disjoint_base
__all__ = [
"ref",
@@ -52,6 +52,7 @@ class ProxyType(Generic[_T]): # "weakproxy"
def __getattr__(self, attr: str) -> Any: ...
__hash__: ClassVar[None] # type: ignore[assignment]
@disjoint_base
class ReferenceType(Generic[_T]): # "weakref"
__callback__: Callable[[Self], Any]
def __new__(cls, o: _T, callback: Callable[[Self], Any] | None = ..., /) -> Self: ...
+4 -1
View File
@@ -3,7 +3,7 @@ from _collections_abc import dict_keys
from _typeshed import FileDescriptorOrPath, ReadableBuffer, SupportsRead, SupportsWrite
from collections.abc import Callable, Generator, ItemsView, Iterable, Iterator, Mapping, Sequence
from typing import Any, Final, Generic, Literal, Protocol, SupportsIndex, TypeVar, overload, type_check_only
from typing_extensions import TypeAlias, TypeGuard, deprecated
from typing_extensions import TypeAlias, TypeGuard, deprecated, disjoint_base
from xml.parsers.expat import XMLParserType
__all__ = [
@@ -84,6 +84,7 @@ _ElementCallable: TypeAlias = Callable[..., Element[_ElementCallable]]
_Tag = TypeVar("_Tag", default=str, bound=str | _ElementCallable)
_OtherTag = TypeVar("_OtherTag", default=str, bound=str | _ElementCallable)
@disjoint_base
class Element(Generic[_Tag]):
tag: _Tag
attrib: dict[str, str]
@@ -286,6 +287,7 @@ def fromstringlist(sequence: Sequence[str | ReadableBuffer], parser: XMLParser |
# elementfactories.
_ElementFactory: TypeAlias = Callable[[Any, dict[Any, Any]], Element]
@disjoint_base
class TreeBuilder:
# comment_factory can take None because passing None to Comment is not an error
def __init__(
@@ -351,6 +353,7 @@ _E = TypeVar("_E", default=Element)
# The default target is TreeBuilder, which returns Element.
# C14NWriterTarget does not implement a close method, so using it results
# in a type of XMLParser[None].
@disjoint_base
class XMLParser(Generic[_E]):
parser: XMLParserType
target: _Target
+2 -1
View File
@@ -1,7 +1,7 @@
import sys
from collections.abc import Iterable
from datetime import datetime, timedelta, tzinfo
from typing_extensions import Self
from typing_extensions import Self, disjoint_base
from zoneinfo._common import ZoneInfoNotFoundError as ZoneInfoNotFoundError, _IOBytes
from zoneinfo._tzpath import (
TZPATH as TZPATH,
@@ -12,6 +12,7 @@ from zoneinfo._tzpath import (
__all__ = ["ZoneInfo", "reset_tzpath", "available_timezones", "TZPATH", "ZoneInfoNotFoundError", "InvalidTZPathWarning"]
@disjoint_base
class ZoneInfo(tzinfo):
@property
def key(self) -> str: ...