diff --git a/stdlib/_typeshed/__init__.pyi b/stdlib/_typeshed/__init__.pyi index 69d1c7c16..cf67751f8 100644 --- a/stdlib/_typeshed/__init__.pyi +++ b/stdlib/_typeshed/__init__.pyi @@ -37,6 +37,10 @@ class SupportsDivMod(Protocol[_T_contra, _T_co]): class SupportsRDivMod(Protocol[_T_contra, _T_co]): def __rdivmod__(self, __other: _T_contra) -> _T_co: ... +class SupportsLenAndGetItem(Protocol[_T_co]): + def __len__(self) -> int: ... + def __getitem__(self, __k: int) -> _T_co: ... + # Mapping-like protocols # stable diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index d898a3629..80584667b 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -11,6 +11,7 @@ from _typeshed import ( StrOrBytesPath, SupportsDivMod, SupportsKeysAndGetItem, + SupportsLenAndGetItem, SupportsLessThan, SupportsLessThanT, SupportsRDivMod, @@ -1286,10 +1287,10 @@ else: def quit(code: object = ...) -> NoReturn: ... class reversed(Iterator[_T], Generic[_T]): - @overload - def __init__(self, __sequence: Sequence[_T]) -> None: ... @overload def __init__(self, __sequence: Reversible[_T]) -> None: ... + @overload + def __init__(self, __sequence: SupportsLenAndGetItem[_T]) -> None: ... def __iter__(self) -> Iterator[_T]: ... def __next__(self) -> _T: ... diff --git a/stubs/annoy/annoy/__init__.pyi b/stubs/annoy/annoy/__init__.pyi index 74d9ad6e0..87ecc5c57 100644 --- a/stubs/annoy/annoy/__init__.pyi +++ b/stubs/annoy/annoy/__init__.pyi @@ -1,8 +1,8 @@ -from typing import Sized, overload -from typing_extensions import Literal, Protocol +from _typeshed import SupportsLenAndGetItem +from typing import overload +from typing_extensions import Literal -class _Vector(Protocol, Sized): - def __getitem__(self, i: int) -> float: ... +_Vector = SupportsLenAndGetItem[float] class AnnoyIndex: f: int