diff --git a/stdlib/_ctypes.pyi b/stdlib/_ctypes.pyi index 0ce1cb39eff6..a85c976aa05a 100644 --- a/stdlib/_ctypes.pyi +++ b/stdlib/_ctypes.pyi @@ -1,6 +1,6 @@ import _typeshed import sys -from _typeshed import ReadableBuffer, StrOrBytesPath, WriteableBuffer +from _typeshed import IndexSlice, ReadableBuffer, StrOrBytesPath, WriteableBuffer from abc import abstractmethod from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence from ctypes import CDLL, ArgumentError as ArgumentError, c_void_p @@ -130,7 +130,7 @@ class _Pointer(_PointerLike, _CData, Generic[_CT], metaclass=_PyCPointerType): @overload def __getitem__(self, key: int, /) -> Any: ... @overload - def __getitem__(self, key: slice, /) -> list[Any]: ... + def __getitem__(self, key: IndexSlice, /) -> list[Any]: ... def __setitem__(self, key: int, value: Any, /) -> None: ... @overload @@ -308,11 +308,11 @@ class Array(_CData, Generic[_CT], metaclass=_PyCArrayType): @overload def __getitem__(self, key: int, /) -> Any: ... @overload - def __getitem__(self, key: slice, /) -> list[Any]: ... + def __getitem__(self, key: IndexSlice, /) -> list[Any]: ... @overload def __setitem__(self, key: int, value: Any, /) -> None: ... @overload - def __setitem__(self, key: slice, value: Iterable[Any], /) -> None: ... + def __setitem__(self, key: IndexSlice, value: Iterable[Any], /) -> None: ... def __iter__(self) -> Iterator[Any]: ... # Can't inherit from Sized because the metaclass conflict between # Sized and _CData prevents using _CDataMeta. diff --git a/stdlib/_operator.pyi b/stdlib/_operator.pyi index 967215d8fa21..e72922976521 100644 --- a/stdlib/_operator.pyi +++ b/stdlib/_operator.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import SupportsGetItem +from _typeshed import IndexSlice, SupportsGetItem from collections.abc import Callable, Container, Iterable, MutableMapping, MutableSequence, Sequence from operator import attrgetter as attrgetter, itemgetter as itemgetter, methodcaller as methodcaller from typing import Any, AnyStr, Protocol, SupportsAbs, SupportsIndex, TypeVar, overload @@ -75,18 +75,18 @@ def countOf(a: Iterable[object], b: object, /) -> int: ... @overload def delitem(a: MutableSequence[Any], b: SupportsIndex, /) -> None: ... @overload -def delitem(a: MutableSequence[Any], b: slice, /) -> None: ... +def delitem(a: MutableSequence[Any], b: IndexSlice, /) -> None: ... @overload def delitem(a: MutableMapping[_K, Any], b: _K, /) -> None: ... @overload -def getitem(a: Sequence[_T], b: slice, /) -> Sequence[_T]: ... +def getitem(a: Sequence[_T], b: IndexSlice, /) -> Sequence[_T]: ... @overload def getitem(a: SupportsGetItem[_K, _V], b: _K, /) -> _V: ... def indexOf(a: Iterable[_T], b: _T, /) -> int: ... @overload def setitem(a: MutableSequence[_T], b: SupportsIndex, c: _T, /) -> None: ... @overload -def setitem(a: MutableSequence[_T], b: slice, c: Sequence[_T], /) -> None: ... +def setitem(a: MutableSequence[_T], b: IndexSlice, c: Sequence[_T], /) -> None: ... @overload def setitem(a: MutableMapping[_K, _V], b: _K, c: _V, /) -> None: ... def length_hint(obj: object, default: int = 0, /) -> int: ... diff --git a/stdlib/_typeshed/__init__.pyi b/stdlib/_typeshed/__init__.pyi index 7201819b25ed..28844f209446 100644 --- a/stdlib/_typeshed/__init__.pyi +++ b/stdlib/_typeshed/__init__.pyi @@ -70,6 +70,9 @@ MaybeNone: TypeAlias = Any # stable # def foo(x: int | None | _SentinelType = ...) -> None: ... sentinel: Any +IndexSlice: TypeAlias = slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None] +IntSlice: TypeAlias = slice[int | None, int | None, int | None] + # stable class IdentityFunction(Protocol): def __call__(self, x: _T, /) -> _T: ... @@ -281,7 +284,7 @@ WriteableBuffer: TypeAlias = Buffer ReadableBuffer: TypeAlias = Buffer # stable class SliceableBuffer(Buffer, Protocol): - def __getitem__(self, slice: slice, /) -> Sequence[int]: ... + def __getitem__(self, slice: IndexSlice, /) -> Sequence[int]: ... class IndexableBuffer(Buffer, Protocol): def __getitem__(self, i: int, /) -> int: ... @@ -289,7 +292,7 @@ class IndexableBuffer(Buffer, Protocol): class SupportsGetItemBuffer(SliceableBuffer, IndexableBuffer, Protocol): def __contains__(self, x: Any, /) -> bool: ... @overload - def __getitem__(self, slice: slice, /) -> Sequence[int]: ... + def __getitem__(self, slice: IndexSlice, /) -> Sequence[int]: ... @overload def __getitem__(self, i: int, /) -> int: ... diff --git a/stdlib/array.pyi b/stdlib/array.pyi index 19ec8c1e78f9..3419e1cc1e8e 100644 --- a/stdlib/array.pyi +++ b/stdlib/array.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import ReadableBuffer, SupportsRead, SupportsWrite +from _typeshed import IndexSlice, ReadableBuffer, SupportsRead, SupportsWrite from collections.abc import Iterable # pytype crashes if array inherits from collections.abc.MutableSequence instead of typing.MutableSequence @@ -69,12 +69,12 @@ class array(MutableSequence[_T]): @overload def __getitem__(self, key: SupportsIndex, /) -> _T: ... @overload - def __getitem__(self, key: slice, /) -> array[_T]: ... + def __getitem__(self, key: IndexSlice, /) -> array[_T]: ... @overload # type: ignore[override] def __setitem__(self, key: SupportsIndex, value: _T, /) -> None: ... @overload - def __setitem__(self, key: slice, value: array[_T], /) -> None: ... - def __delitem__(self, key: SupportsIndex | slice, /) -> None: ... + def __setitem__(self, key: IndexSlice, value: array[_T], /) -> None: ... + def __delitem__(self, key: SupportsIndex | IndexSlice, /) -> None: ... def __add__(self, value: array[_T], /) -> array[_T]: ... def __eq__(self, value: object, /) -> bool: ... def __ge__(self, value: array[_T], /) -> bool: ... diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index b0912b8872d7..c97c99207fe6 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -10,6 +10,7 @@ from _typeshed import ( ConvertibleToFloat, ConvertibleToInt, FileDescriptorOrPath, + IndexSlice, MaybeNone, OpenBinaryMode, OpenBinaryModeReading, @@ -594,9 +595,9 @@ class str(Sequence[str]): def __eq__(self, value: object, /) -> bool: ... def __ge__(self, value: str, /) -> bool: ... @overload - def __getitem__(self: LiteralString, key: SupportsIndex | slice, /) -> LiteralString: ... + def __getitem__(self: LiteralString, key: SupportsIndex | IndexSlice, /) -> LiteralString: ... @overload - def __getitem__(self, key: SupportsIndex | slice, /) -> str: ... # type: ignore[misc] + def __getitem__(self, key: SupportsIndex | IndexSlice, /) -> str: ... # type: ignore[misc] def __gt__(self, value: str, /) -> bool: ... def __hash__(self) -> int: ... @overload @@ -702,7 +703,7 @@ class bytes(Sequence[int]): @overload def __getitem__(self, key: SupportsIndex, /) -> int: ... @overload - def __getitem__(self, key: slice, /) -> bytes: ... + def __getitem__(self, key: IndexSlice, /) -> bytes: ... def __add__(self, value: ReadableBuffer, /) -> bytes: ... def __mul__(self, value: SupportsIndex, /) -> bytes: ... def __rmul__(self, value: SupportsIndex, /) -> bytes: ... @@ -808,12 +809,12 @@ class bytearray(MutableSequence[int]): @overload def __getitem__(self, key: SupportsIndex, /) -> int: ... @overload - def __getitem__(self, key: slice, /) -> bytearray: ... + def __getitem__(self, key: IndexSlice, /) -> bytearray: ... @overload def __setitem__(self, key: SupportsIndex, value: SupportsIndex, /) -> None: ... @overload - def __setitem__(self, key: slice, value: Iterable[SupportsIndex] | bytes, /) -> None: ... - def __delitem__(self, key: SupportsIndex | slice, /) -> None: ... + def __setitem__(self, key: IndexSlice, value: Iterable[SupportsIndex] | bytes, /) -> None: ... + def __delitem__(self, key: SupportsIndex | IndexSlice, /) -> None: ... def __add__(self, value: ReadableBuffer, /) -> bytearray: ... # The superclass wants us to accept Iterable[int], but that fails at runtime. def __iadd__(self, value: ReadableBuffer, /) -> Self: ... # type: ignore[override] @@ -879,14 +880,14 @@ class memoryview(Sequence[_I]): @overload def __getitem__(self, key: SupportsIndex | tuple[SupportsIndex, ...], /) -> _I: ... @overload - def __getitem__(self, key: slice, /) -> memoryview[_I]: ... + def __getitem__(self, key: IndexSlice, /) -> memoryview[_I]: ... def __contains__(self, x: object, /) -> bool: ... def __iter__(self) -> Iterator[_I]: ... def __len__(self) -> int: ... def __eq__(self, value: object, /) -> bool: ... def __hash__(self) -> int: ... @overload - def __setitem__(self, key: slice, value: ReadableBuffer, /) -> None: ... + def __setitem__(self, key: IndexSlice, value: ReadableBuffer, /) -> None: ... @overload def __setitem__(self, key: SupportsIndex | tuple[SupportsIndex, ...], value: _I, /) -> None: ... if sys.version_info >= (3, 10): @@ -974,7 +975,7 @@ class tuple(Sequence[_T_co]): @overload def __getitem__(self, key: SupportsIndex, /) -> _T_co: ... @overload - def __getitem__(self, key: slice, /) -> tuple[_T_co, ...]: ... + def __getitem__(self, key: IndexSlice, /) -> tuple[_T_co, ...]: ... def __iter__(self) -> Iterator[_T_co]: ... def __lt__(self, value: tuple[_T_co, ...], /) -> bool: ... def __le__(self, value: tuple[_T_co, ...], /) -> bool: ... @@ -1051,12 +1052,12 @@ class list(MutableSequence[_T]): @overload def __getitem__(self, i: SupportsIndex, /) -> _T: ... @overload - def __getitem__(self, s: slice, /) -> list[_T]: ... + def __getitem__(self, s: IndexSlice, /) -> list[_T]: ... @overload def __setitem__(self, key: SupportsIndex, value: _T, /) -> None: ... @overload - def __setitem__(self, key: slice, value: Iterable[_T], /) -> None: ... - def __delitem__(self, key: SupportsIndex | slice, /) -> None: ... + def __setitem__(self, key: IndexSlice, value: Iterable[_T], /) -> None: ... + def __delitem__(self, key: SupportsIndex | IndexSlice, /) -> None: ... # Overloading looks unnecessary, but is needed to work around complex mypy problems @overload def __add__(self, value: list[_T], /) -> list[_T]: ... @@ -1257,7 +1258,7 @@ class range(Sequence[int]): @overload def __getitem__(self, key: SupportsIndex, /) -> int: ... @overload - def __getitem__(self, key: slice, /) -> range: ... + def __getitem__(self, key: IndexSlice, /) -> range: ... def __reversed__(self) -> Iterator[int]: ... class property: diff --git a/stdlib/collections/__init__.pyi b/stdlib/collections/__init__.pyi index 0f99b5c3c67e..f0facf263cb4 100644 --- a/stdlib/collections/__init__.pyi +++ b/stdlib/collections/__init__.pyi @@ -1,6 +1,6 @@ import sys from _collections_abc import dict_items, dict_keys, dict_values -from _typeshed import SupportsItems, SupportsKeysAndGetItem, SupportsRichComparison, SupportsRichComparisonT +from _typeshed import IndexSlice, SupportsItems, SupportsKeysAndGetItem, SupportsRichComparison, SupportsRichComparisonT from typing import Any, ClassVar, Generic, NoReturn, SupportsIndex, TypeVar, final, overload from typing_extensions import Self @@ -130,12 +130,12 @@ class UserList(MutableSequence[_T]): @overload def __getitem__(self, i: SupportsIndex) -> _T: ... @overload - def __getitem__(self, i: slice) -> Self: ... + def __getitem__(self, i: IndexSlice) -> Self: ... @overload def __setitem__(self, i: SupportsIndex, item: _T) -> None: ... @overload - def __setitem__(self, i: slice, item: Iterable[_T]) -> None: ... - def __delitem__(self, i: SupportsIndex | slice) -> None: ... + def __setitem__(self, i: IndexSlice, item: Iterable[_T]) -> None: ... + def __delitem__(self, i: SupportsIndex | IndexSlice) -> None: ... def __add__(self, other: Iterable[_T]) -> Self: ... def __radd__(self, other: Iterable[_T]) -> Self: ... def __iadd__(self, other: Iterable[_T]) -> Self: ... @@ -175,7 +175,7 @@ class UserString(Sequence[UserString]): def __hash__(self) -> int: ... def __contains__(self, char: object) -> bool: ... def __len__(self) -> int: ... - def __getitem__(self, index: SupportsIndex | slice) -> Self: ... + def __getitem__(self, index: SupportsIndex | IndexSlice) -> Self: ... def __iter__(self) -> Iterator[Self]: ... def __reversed__(self) -> Iterator[Self]: ... def __add__(self, other: object) -> Self: ... diff --git a/stdlib/typing.pyi b/stdlib/typing.pyi index 7c1b171a730b..81a00f4616b6 100644 --- a/stdlib/typing.pyi +++ b/stdlib/typing.pyi @@ -6,7 +6,7 @@ import collections # noqa: F401 # pyright: ignore[reportUnusedImport] import sys import typing_extensions from _collections_abc import dict_items, dict_keys, dict_values -from _typeshed import IdentityFunction, ReadableBuffer, SupportsKeysAndGetItem +from _typeshed import IdentityFunction, IndexSlice, ReadableBuffer, SupportsKeysAndGetItem from abc import ABCMeta, abstractmethod from re import Match as Match, Pattern as Pattern from types import ( @@ -586,7 +586,7 @@ class Sequence(Reversible[_T_co], Collection[_T_co]): def __getitem__(self, index: int) -> _T_co: ... @overload @abstractmethod - def __getitem__(self, index: slice) -> Sequence[_T_co]: ... + def __getitem__(self, index: IndexSlice) -> Sequence[_T_co]: ... # Mixin methods def index(self, value: Any, start: int = 0, stop: int = ...) -> int: ... def count(self, value: Any) -> int: ... @@ -602,19 +602,19 @@ class MutableSequence(Sequence[_T]): def __getitem__(self, index: int) -> _T: ... @overload @abstractmethod - def __getitem__(self, index: slice) -> MutableSequence[_T]: ... + def __getitem__(self, index: IndexSlice) -> MutableSequence[_T]: ... @overload @abstractmethod def __setitem__(self, index: int, value: _T) -> None: ... @overload @abstractmethod - def __setitem__(self, index: slice, value: Iterable[_T]) -> None: ... + def __setitem__(self, index: IndexSlice, value: Iterable[_T]) -> None: ... @overload @abstractmethod def __delitem__(self, index: int) -> None: ... @overload @abstractmethod - def __delitem__(self, index: slice) -> None: ... + def __delitem__(self, index: IndexSlice) -> None: ... # Mixin methods def append(self, value: _T) -> None: ... def clear(self) -> None: ...