diff --git a/stdlib/_typeshed/__init__.pyi b/stdlib/_typeshed/__init__.pyi index baaa5e3c0..d5e0c691e 100644 --- a/stdlib/_typeshed/__init__.pyi +++ b/stdlib/_typeshed/__init__.pyi @@ -64,12 +64,27 @@ class SupportsAllComparisons(SupportsDunderLT, SupportsDunderGT, SupportsDunderL SupportsRichComparison: TypeAlias = SupportsDunderLT | SupportsDunderGT SupportsRichComparisonT = TypeVar("SupportsRichComparisonT", bound=SupportsRichComparison) # noqa: Y001 +# Dunder protocols + +class SupportsAdd(Protocol): + def __add__(self, __x: Any) -> Any: ... + class SupportsDivMod(Protocol[_T_contra, _T_co]): def __divmod__(self, __other: _T_contra) -> _T_co: ... class SupportsRDivMod(Protocol[_T_contra, _T_co]): def __rdivmod__(self, __other: _T_contra) -> _T_co: ... +# This protocol is generic over the iterator type, while Iterable is +# generic over the type that is iterated over. +class SupportsIter(Protocol[_T_co]): + def __iter__(self) -> _T_co: ... + +# This protocol is generic over the iterator type, while AsyncIterable is +# generic over the type that is iterated over. +class SupportsAiter(Protocol[_T_co]): + def __aiter__(self) -> _T_co: ... + class SupportsLenAndGetItem(Protocol[_T_co]): def __len__(self) -> int: ... def __getitem__(self, __k: int) -> _T_co: ... diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 88ec36de5..a5b4ba071 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -11,8 +11,11 @@ from _typeshed import ( ReadableBuffer, Self, StrOrBytesPath, + SupportsAdd, + SupportsAiter, SupportsAnext, SupportsDivMod, + SupportsIter, SupportsKeysAndGetItem, SupportsLenAndGetItem, SupportsNext, @@ -71,12 +74,6 @@ _SupportsAnextT = TypeVar("_SupportsAnextT", bound=SupportsAnext[Any], covariant _AwaitableT = TypeVar("_AwaitableT", bound=Awaitable[Any]) _AwaitableT_co = TypeVar("_AwaitableT_co", bound=Awaitable[Any], covariant=True) -class _SupportsIter(Protocol[_T_co]): - def __iter__(self) -> _T_co: ... - -class _SupportsAiter(Protocol[_T_co]): - def __aiter__(self) -> _T_co: ... - class object: __doc__: str | None __dict__: dict[str, Any] @@ -1094,7 +1091,7 @@ class _PathLike(Protocol[_AnyStr_co]): def __fspath__(self) -> _AnyStr_co: ... if sys.version_info >= (3, 10): - def aiter(__async_iterable: _SupportsAiter[_SupportsAnextT]) -> _SupportsAnextT: ... + def aiter(__async_iterable: SupportsAiter[_SupportsAnextT]) -> _SupportsAnextT: ... class _SupportsSynchronousAnext(Protocol[_AwaitableT_co]): def __anext__(self) -> _AwaitableT_co: ... @@ -1186,7 +1183,7 @@ def hex(__number: int | SupportsIndex) -> str: ... def id(__obj: object) -> int: ... def input(__prompt: object = ...) -> str: ... @overload -def iter(__iterable: _SupportsIter[_SupportsNextT]) -> _SupportsNextT: ... +def iter(__iterable: SupportsIter[_SupportsNextT]) -> _SupportsNextT: ... @overload def iter(__function: Callable[[], _T | None], __sentinel: None) -> Iterator[_T]: ... @overload @@ -1503,11 +1500,8 @@ def sorted( @overload def sorted(__iterable: Iterable[_T], *, key: Callable[[_T], SupportsRichComparison], reverse: bool = ...) -> list[_T]: ... -class _SupportsSum(Protocol): - def __add__(self, __x: Any) -> Any: ... - -_SumT = TypeVar("_SumT", bound=_SupportsSum) -_SumS = TypeVar("_SumS", bound=_SupportsSum) +_SumT = TypeVar("_SumT", bound=SupportsAdd) +_SumS = TypeVar("_SumS", bound=SupportsAdd) @overload def sum(__iterable: Iterable[_SumT]) -> _SumT | Literal[0]: ...