Sync typeshed (#21665)
Source commit:
https://github.com/python/typeshed/commit/b9090e99745ac1511d8efd828622b11a9a3623e8
diff --git a/mypy/typeshed/stdlib/VERSIONS b/mypy/typeshed/stdlib/VERSIONS
index e9c8d91..96eb981 100644
--- a/mypy/typeshed/stdlib/VERSIONS
+++ b/mypy/typeshed/stdlib/VERSIONS
@@ -245,8 +245,6 @@
pprint: 3.0-
profile: 3.0-
profiling: 3.15-
-profiling.sampling: 3.15-
-profiling.tracing: 3.15-
pstats: 3.0-
pty: 3.0-
pwd: 3.0-
diff --git a/mypy/typeshed/stdlib/_curses.pyi b/mypy/typeshed/stdlib/_curses.pyi
index 449cf75..fcd0da4 100644
--- a/mypy/typeshed/stdlib/_curses.pyi
+++ b/mypy/typeshed/stdlib/_curses.pyi
@@ -423,7 +423,7 @@
def chgat(self, y: int, x: int, num: int, attr: int) -> None: ...
def clear(self) -> None: ...
- def clearok(self, yes: int) -> None: ...
+ def clearok(self, flag: bool, /) -> None: ...
def clrtobot(self) -> None: ...
def clrtoeol(self) -> None: ...
def cursyncup(self) -> None: ...
@@ -480,9 +480,9 @@
@overload
def hline(self, y: int, x: int, ch: _ChType, n: int) -> None: ...
- def idcok(self, flag: bool) -> None: ...
- def idlok(self, yes: bool) -> None: ...
- def immedok(self, flag: bool) -> None: ...
+ def idcok(self, flag: bool, /) -> None: ...
+ def idlok(self, flag: bool, /) -> None: ...
+ def immedok(self, flag: bool, /) -> None: ...
@overload
def inch(self) -> int: ...
@@ -494,7 +494,7 @@
@overload
def insch(self, y: int, x: int, ch: _ChType, attr: int = ...) -> None: ...
- def insdelln(self, nlines: int) -> None: ...
+ def insdelln(self, nlines: int, /) -> None: ...
def insertln(self) -> None: ...
@overload
@@ -514,13 +514,13 @@
def is_linetouched(self, line: int, /) -> bool: ...
def is_wintouched(self) -> bool: ...
- def keypad(self, yes: bool, /) -> None: ...
- def leaveok(self, yes: bool) -> None: ...
- def move(self, new_y: int, new_x: int) -> None: ...
- def mvderwin(self, y: int, x: int) -> None: ...
- def mvwin(self, new_y: int, new_x: int) -> None: ...
- def nodelay(self, yes: bool) -> None: ...
- def notimeout(self, yes: bool) -> None: ...
+ def keypad(self, flag: bool, /) -> None: ...
+ def leaveok(self, flag: bool, /) -> None: ...
+ def move(self, new_y: int, new_x: int, /) -> None: ...
+ def mvderwin(self, y: int, x: int, /) -> None: ...
+ def mvwin(self, new_y: int, new_x: int, /) -> None: ...
+ def nodelay(self, flag: bool, /) -> None: ...
+ def notimeout(self, flag: bool, /) -> None: ...
@overload
def noutrefresh(self) -> None: ...
@@ -550,9 +550,9 @@
@overload
def refresh(self, pminrow: int, pmincol: int, sminrow: int, smincol: int, smaxrow: int, smaxcol: int) -> None: ...
- def resize(self, nlines: int, ncols: int) -> None: ...
+ def resize(self, nlines: int, ncols: int, /) -> None: ...
def scroll(self, lines: int = 1) -> None: ...
- def scrollok(self, flag: bool) -> None: ...
+ def scrollok(self, flag: bool, /) -> None: ...
def setscrreg(self, top: int, bottom: int, /) -> None: ...
def standend(self) -> None: ...
def standout(self) -> None: ...
@@ -568,9 +568,9 @@
def subwin(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> window: ...
def syncdown(self) -> None: ...
- def syncok(self, flag: bool) -> None: ...
+ def syncok(self, flag: bool, /) -> None: ...
def syncup(self) -> None: ...
- def timeout(self, delay: int) -> None: ...
+ def timeout(self, delay: int, /) -> None: ...
def touchline(self, start: int, count: int, changed: bool = True) -> None: ...
def touchwin(self) -> None: ...
def untouchwin(self) -> None: ...
diff --git a/mypy/typeshed/stdlib/ast.pyi b/mypy/typeshed/stdlib/ast.pyi
index 14a98b9..a199377 100644
--- a/mypy/typeshed/stdlib/ast.pyi
+++ b/mypy/typeshed/stdlib/ast.pyi
@@ -956,14 +956,27 @@
else:
value: expr
generators: list[comprehension]
- if sys.version_info >= (3, 13):
+ if sys.version_info >= (3, 15):
+ def __init__(
+ self, key: expr, value: expr | None = None, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]
+ ) -> None: ...
+ elif sys.version_info >= (3, 13):
def __init__(
self, key: expr, value: expr, generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]
) -> None: ...
else:
def __init__(self, key: expr, value: expr, generators: list[comprehension], **kwargs: Unpack[_Attributes]) -> None: ...
- if sys.version_info >= (3, 14):
+ if sys.version_info >= (3, 15):
+ def __replace__(
+ self,
+ *,
+ key: expr = ...,
+ value: expr | None = ...,
+ generators: list[comprehension] = ...,
+ **kwargs: Unpack[_Attributes],
+ ) -> Self: ...
+ elif sys.version_info >= (3, 14):
def __replace__(
self, *, key: expr = ..., value: expr = ..., generators: list[comprehension] = ..., **kwargs: Unpack[_Attributes]
) -> Self: ...
@@ -2147,6 +2160,10 @@
def visit_TypeVarTuple(self, node: TypeVarTuple) -> Any: ...
def visit_TypeAlias(self, node: TypeAlias) -> Any: ...
+ if sys.version_info >= (3, 14):
+ def visit_TemplateStr(self, node: TemplateStr) -> Any: ...
+ def visit_Interpolation(self, node: Interpolation) -> Any: ...
+
# visit methods for deprecated nodes
def visit_ExtSlice(self, node: ExtSlice) -> Any: ...
def visit_Index(self, node: Index) -> Any: ...
diff --git a/mypy/typeshed/stdlib/builtins.pyi b/mypy/typeshed/stdlib/builtins.pyi
index d773f98..7b659e5 100644
--- a/mypy/typeshed/stdlib/builtins.pyi
+++ b/mypy/typeshed/stdlib/builtins.pyi
@@ -33,7 +33,7 @@
from collections.abc import Awaitable, Callable, Iterable, Iterator, MutableSet, Reversible, Set as AbstractSet, Sized
from io import BufferedRandom, BufferedReader, BufferedWriter, FileIO, TextIOWrapper
from os import PathLike
-from types import CellType, CodeType, EllipsisType, GenericAlias, NotImplementedType, TracebackType
+from types import CellType, CodeType, EllipsisType, GenericAlias, NotImplementedType, TracebackType, UnionType
# mypy crashes if any of {ByteString, Sequence, MutableSequence, Mapping, MutableMapping}
# are imported from collections.abc in builtins.pyi
@@ -2080,11 +2080,13 @@
class sentinel:
__name__: str
__module__: str
- def __new__(cls, name: str, /, *, repr: str | None = None) -> Self: ...
- def __copy__(self, /) -> Self: ...
- def __deepcopy__(self, memo: Any, /) -> Self: ...
- def __or__(self, other: Any, /) -> Any: ...
- def __ror__(self, other: Any, /) -> Any: ...
+ def __new__(cls, name: str, /, *, repr: str | None = None) -> sentinel: ...
+ def __copy__(self, /) -> sentinel: ...
+ def __deepcopy__(self, memo: Any, /) -> sentinel: ...
+ # `other` can be any legal form for unions.
+ # `x | x` creates a `sentinel` instance if `x` is a sentinel, not a `UnionType` instance.
+ def __or__(self, other: Any, /) -> UnionType | sentinel: ...
+ def __ror__(self, other: Any, /) -> UnionType | sentinel: ...
@overload
def sorted(
diff --git a/mypy/typeshed/stdlib/fnmatch.pyi b/mypy/typeshed/stdlib/fnmatch.pyi
index 345c457..018139d 100644
--- a/mypy/typeshed/stdlib/fnmatch.pyi
+++ b/mypy/typeshed/stdlib/fnmatch.pyi
@@ -1,15 +1,16 @@
import sys
from collections.abc import Iterable
+from os import PathLike
from typing import AnyStr
__all__ = ["filter", "fnmatch", "fnmatchcase", "translate"]
if sys.version_info >= (3, 14):
__all__ += ["filterfalse"]
-def fnmatch(name: AnyStr, pat: AnyStr) -> bool: ...
+def fnmatch(name: AnyStr | PathLike[AnyStr], pat: AnyStr | PathLike[AnyStr]) -> bool: ...
def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ...
-def filter(names: Iterable[AnyStr], pat: AnyStr) -> list[AnyStr]: ...
+def filter(names: Iterable[AnyStr | PathLike[AnyStr]], pat: AnyStr | PathLike[AnyStr]) -> list[AnyStr]: ...
def translate(pat: str) -> str: ...
if sys.version_info >= (3, 14):
- def filterfalse(names: Iterable[AnyStr], pat: AnyStr) -> list[AnyStr]: ...
+ def filterfalse(names: Iterable[AnyStr | PathLike[AnyStr]], pat: AnyStr | PathLike[AnyStr]) -> list[AnyStr]: ...
diff --git a/mypy/typeshed/stdlib/html/__init__.pyi b/mypy/typeshed/stdlib/html/__init__.pyi
index 8ad72f1..71e971d 100644
--- a/mypy/typeshed/stdlib/html/__init__.pyi
+++ b/mypy/typeshed/stdlib/html/__init__.pyi
@@ -1,4 +1,7 @@
+import re
+
__all__ = ["escape", "unescape"]
def escape(s: str, quote: bool = True) -> str: ...
def unescape(s: str) -> str: ...
+def _replace_charref(s: re.Match[str]) -> str: ...
diff --git a/mypy/typeshed/stdlib/inspect.pyi b/mypy/typeshed/stdlib/inspect.pyi
index 003ecc1..1bd2b9d 100644
--- a/mypy/typeshed/stdlib/inspect.pyi
+++ b/mypy/typeshed/stdlib/inspect.pyi
@@ -38,7 +38,7 @@
overload,
type_check_only,
)
-from typing_extensions import Self, TypeIs, deprecated, disjoint_base
+from typing_extensions import Never, Self, TypeIs, deprecated, disjoint_base
if sys.version_info >= (3, 14):
from annotationlib import Format
@@ -217,7 +217,7 @@
def getmodulename(path: StrPath) -> str | None: ...
def ismodule(object: object) -> TypeIs[ModuleType]: ...
-def isclass(object: object) -> TypeIs[type[Any]]: ...
+def isclass(object: object) -> TypeIs[type[object]]: ...
def ismethod(object: object) -> TypeIs[MethodType]: ...
if sys.version_info >= (3, 14):
@@ -245,7 +245,7 @@
@overload
def iscoroutinefunction(obj: object) -> TypeGuard[Callable[..., CoroutineType[Any, Any, Any]]]: ...
-def isgenerator(object: object) -> TypeIs[GeneratorType[Any, Any, Any]]: ...
+def isgenerator(object: object) -> TypeIs[GeneratorType[object, Never, object]]: ...
def iscoroutine(object: object) -> TypeIs[CoroutineType[Any, Any, Any]]: ...
def isawaitable(object: object) -> TypeIs[Awaitable[Any]]: ...
@@ -264,7 +264,7 @@
class _SupportsDelete(Protocol[_T_contra]):
def __delete__(self, instance: _T_contra, /) -> None: ...
-def isasyncgen(object: object) -> TypeIs[AsyncGeneratorType[Any, Any]]: ...
+def isasyncgen(object: object) -> TypeIs[AsyncGeneratorType[object, Never]]: ...
def istraceback(object: object) -> TypeIs[TracebackType]: ...
def isframe(object: object) -> TypeIs[FrameType]: ...
def iscode(object: object) -> TypeIs[CodeType]: ...
@@ -289,7 +289,7 @@
def ismemberdescriptor(object: object) -> TypeIs[MemberDescriptorType]: ...
def isabstract(object: object) -> bool: ...
def isgetsetdescriptor(object: object) -> TypeIs[GetSetDescriptorType]: ...
-def isdatadescriptor(object: object) -> TypeIs[_SupportsSet[Any, Any] | _SupportsDelete[Any]]: ...
+def isdatadescriptor(object: object) -> TypeIs[_SupportsSet[Never, Never] | _SupportsDelete[Never]]: ...
#
# Retrieving source code
diff --git a/mypy/typeshed/stdlib/profiling/sampling/gecko_collector.pyi b/mypy/typeshed/stdlib/profiling/sampling/gecko_collector.pyi
index 6072d4f..666fd42 100644
--- a/mypy/typeshed/stdlib/profiling/sampling/gecko_collector.pyi
+++ b/mypy/typeshed/stdlib/profiling/sampling/gecko_collector.pyi
@@ -1,11 +1,109 @@
-from _typeshed import StrOrBytesPath
-from collections.abc import Sequence
+from _typeshed import Incomplete, StrOrBytesPath, StrPath
+from collections.abc import Generator, Sequence
+from tempfile import TemporaryDirectory
+from typing import Any, ClassVar, Final, TypedDict, type_check_only
from _remote_debugging import AwaitedInfo, InterpreterInfo
from .collector import Collector, _Timestamps
+@type_check_only
+class _GeckoCategory(TypedDict):
+ name: str
+ color: str
+ subcategories: list[str]
+
+THREAD_STATUS_HAS_GIL: Final[int]
+THREAD_STATUS_ON_CPU: Final[int]
+THREAD_STATUS_UNKNOWN: Final[int]
+THREAD_STATUS_GIL_REQUESTED: Final[int]
+THREAD_STATUS_HAS_EXCEPTION: Final[int]
+THREAD_STATUS_MAIN_THREAD: Final[int]
+
+GECKO_CATEGORIES: Final[list[_GeckoCategory]]
+
+CATEGORY_OTHER: Final = 0
+CATEGORY_PYTHON: Final = 1
+CATEGORY_NATIVE: Final = 2
+CATEGORY_GC: Final = 3
+CATEGORY_GIL: Final = 4
+CATEGORY_CPU: Final = 5
+CATEGORY_CODE_TYPE: Final = 6
+CATEGORY_OPCODES: Final = 7
+CATEGORY_EXCEPTION: Final = 8
+
+DEFAULT_SUBCATEGORY: Final = 0
+
+GECKO_FORMAT_VERSION: Final = 32
+GECKO_PREPROCESSED_VERSION: Final = 57
+
+RESOURCE_TYPE_LIBRARY: Final = 1
+
+FRAME_ADDRESS_NONE: Final = -1
+FRAME_INLINE_DEPTH_ROOT: Final = 0
+
+PROCESS_TYPE_MAIN: Final = 0
+STACKWALK_DISABLED: Final = 0
+
+DEFAULT_SPILL_BUFFER_BYTES: Final[int]
+
+class SpillColumn:
+ path: str
+ buffer: bytearray
+
+ def __init__(self, directory: StrPath, basename: StrPath, *, buffer_bytes: int | None = None) -> None: ...
+ # "value" accepts the same types as json.JSONEncoder.encode()
+ def append(self, value: Any) -> None: ...
+ def flush(self) -> None: ...
+ def iter_tokens(self) -> Generator[str]: ...
+
+class GeckoThreadSpill:
+ sample_count: int
+ marker_count: int
+ def __init__(self, directory: StrPath, tid: int) -> None: ...
+ def append_sample(self, stack_index: int, time_ms: float) -> None: ...
+ def append_marker(
+ self, name_idx: int, start_time: float, end_time: float, phase: int, category: int, data: dict[str, Any]
+ ) -> None: ...
+ def prepare_read(self) -> None: ...
+
class GeckoCollector(Collector):
+ aggregating: ClassVar[bool]
+
+ sample_interval_usec: int
+ skip_idle: bool
+ opcodes_enabled: bool
+ start_time: float
+
+ global_strings: list[str]
+ global_string_map: dict[str, int]
+
+ threads: dict[int, dict[str, Any]]
+ spill_dir: TemporaryDirectory[str] | None
+ exported: bool
+
+ libs: list[Incomplete]
+
+ sample_count: int
+ last_sample_time: float
+ interval: float
+
+ has_gil_start: dict[Incomplete, Incomplete]
+ no_gil_start: dict[Incomplete, Incomplete]
+ on_cpu_start: dict[Incomplete, Incomplete]
+ off_cpu_start: dict[Incomplete, Incomplete]
+ python_code_start: dict[Incomplete, Incomplete]
+ native_code_start: dict[Incomplete, Incomplete]
+ gil_wait_start: dict[Incomplete, Incomplete]
+ exception_start: dict[Incomplete, Incomplete]
+ no_exception_start: dict[Incomplete, Incomplete]
+
+ gc_start_per_thread: dict[int, float]
+
+ initialized_threads: set[Incomplete]
+
+ opcode_state: dict[int, tuple[Incomplete, int, int, str, str, float]]
+
def __init__(self, sample_interval_usec: int, *, skip_idle: bool = False, opcodes: bool = False) -> None: ...
def collect(
self, stack_frames: Sequence[InterpreterInfo] | Sequence[AwaitedInfo], timestamps_us: _Timestamps = None
diff --git a/mypy/typeshed/stdlib/types.pyi b/mypy/typeshed/stdlib/types.pyi
index b9771ff..68b6b3f 100644
--- a/mypy/typeshed/stdlib/types.pyi
+++ b/mypy/typeshed/stdlib/types.pyi
@@ -703,8 +703,10 @@
@property
def __typing_unpacked_tuple_args__(self) -> tuple[Any, ...] | None: ...
- def __or__(self, value: Any, /) -> UnionType: ...
- def __ror__(self, value: Any, /) -> UnionType: ...
+ # `other` can be any legal form for unions.
+ # `list[int] | list[int]` creates a `GenericAlias` instance, not a `UnionType` instance
+ def __or__(self, value: Any, /) -> UnionType | GenericAlias: ...
+ def __ror__(self, value: Any, /) -> UnionType | GenericAlias: ...
# GenericAlias delegates attr access to `__origin__`
def __getattr__(self, name: str) -> Any: ...
diff --git a/mypy/typeshed/stdlib/typing_extensions.pyi b/mypy/typeshed/stdlib/typing_extensions.pyi
index fdbba49..8034117 100644
--- a/mypy/typeshed/stdlib/typing_extensions.pyi
+++ b/mypy/typeshed/stdlib/typing_extensions.pyi
@@ -59,7 +59,6 @@
Tuple as Tuple,
Type as Type,
TypeAlias as TypeAlias,
- TypedDict as TypedDict,
TypeGuard as TypeGuard,
TypeVar as _TypeVar,
Union as Union,
@@ -72,6 +71,9 @@
type_check_only,
)
+if sys.version_info >= (3, 14):
+ from _typeshed import EvaluateFunc
+
# Please keep order the same as at runtime.
__all__ = [
# Super-special typing primitives.
@@ -143,6 +145,7 @@
"override",
"Protocol",
"Sentinel",
+ "sentinel",
"reveal_type",
"runtime",
"runtime_checkable",
@@ -232,6 +235,11 @@
def IntVar(name: str) -> Any: ... # returns a new TypeVar
+# Kept as a distinct symbol to `typing.TypedDict` so that type checkers can more easily
+# distinguish between the two on Python 3.14, on which `typing_extensions.TypedDict`
+# exposes `__closed__` and `__extra_items__` but `typing.TypedDict` does not
+TypedDict: _SpecialForm
+
# Internal mypy fallback type for all typed dicts (does not exist at runtime)
# N.B. Keep this mostly in sync with typing._TypedDict/mypy_extensions._TypedDict
@type_check_only
@@ -456,7 +464,6 @@
ReadOnly as ReadOnly,
TypeIs as TypeIs,
TypeVar as TypeVar,
- TypeVarTuple as TypeVarTuple,
get_protocol_members as get_protocol_members,
is_protocol as is_protocol,
)
@@ -545,19 +552,58 @@
def has_default(self) -> bool: ...
def __typing_prepare_subst__(self, alias: Any, args: Any) -> tuple[Any, ...]: ...
+ ReadOnly: _SpecialForm
+ TypeIs: _SpecialForm
+
+if sys.version_info >= (3, 15):
+ from typing import TypeVarTuple as TypeVarTuple
+else:
@final
class TypeVarTuple:
@property
def __name__(self) -> str: ...
@property
+ def __bound__(self) -> AnnotationForm | None: ...
+ @property
+ def __covariant__(self) -> bool: ...
+ @property
+ def __contravariant__(self) -> bool: ...
+ @property
+ def __infer_variance__(self) -> bool: ...
+ @property
def __default__(self) -> AnnotationForm: ...
- def __init__(self, name: str, *, default: AnnotationForm = ...) -> None: ...
+ if sys.version_info >= (3, 11):
+ def __new__(
+ cls,
+ name: str,
+ *,
+ bound: AnnotationForm | None = None,
+ covariant: bool = False,
+ contravariant: bool = False,
+ infer_variance: bool = False,
+ default: AnnotationForm = ...,
+ ) -> Self: ...
+ else:
+ def __init__(
+ self,
+ name: str,
+ *,
+ bound: AnnotationForm | None = None,
+ covariant: bool = False,
+ contravariant: bool = False,
+ infer_variance: bool = False,
+ default: AnnotationForm = ...,
+ ) -> None: ...
+
def __iter__(self) -> Any: ... # Unpack[Self]
def has_default(self) -> bool: ...
- def __typing_prepare_subst__(self, alias: Any, args: Any) -> tuple[Any, ...]: ...
+ if sys.version_info >= (3, 11):
+ def __typing_subst__(self, arg: Never, /) -> Never: ...
- ReadOnly: _SpecialForm
- TypeIs: _SpecialForm
+ def __typing_prepare_subst__(self, alias: Any, args: Any, /) -> tuple[Any, ...]: ...
+ if sys.version_info >= (3, 14):
+ @property
+ def evaluate_default(self) -> EvaluateFunc | None: ...
# TypeAliasType was added in Python 3.12, but had significant changes in 3.14.
if sys.version_info >= (3, 14):
@@ -680,11 +726,21 @@
def type_repr(value: object) -> str: ...
# PEP 661
-class Sentinel:
- def __init__(self, name: str, repr: str | None = None) -> None: ...
- if sys.version_info >= (3, 14):
- def __or__(self, other: Any) -> UnionType: ... # other can be any type form legal for unions
- def __ror__(self, other: Any) -> UnionType: ... # other can be any type form legal for unions
- else:
- def __or__(self, other: Any) -> _SpecialForm: ... # other can be any type form legal for unions
- def __ror__(self, other: Any) -> _SpecialForm: ... # other can be any type form legal for unions
+if sys.version_info >= (3, 15):
+ from builtins import sentinel as sentinel
+else:
+ class sentinel:
+ def __init__(self, name: str, /, *, repr: str | None = None) -> None: ...
+ __name__: str
+ __module__: str
+ if sys.version_info >= (3, 14):
+ # `other`` can be any type form legal for unions.
+ # `x | x` creates a `sentinel` instance if `x` is a sentinel, not a `UnionType` instance
+ def __or__(self, other: Any) -> UnionType | sentinel: ...
+ def __ror__(self, other: Any) -> UnionType | sentinel: ...
+ else:
+ # other can be any type form legal for unions
+ def __or__(self, other: Any) -> _SpecialForm: ...
+ def __ror__(self, other: Any) -> _SpecialForm: ...
+
+Sentinel = sentinel