diff --git a/stdlib/_ctypes.pyi b/stdlib/_ctypes.pyi index 5313195a0ba8..942a9cc45159 100644 --- a/stdlib/_ctypes.pyi +++ b/stdlib/_ctypes.pyi @@ -96,7 +96,7 @@ class _Pointer(_PointerLike, _CData, Generic[_CT]): @overload def __getitem__(self, key: int, /) -> Any: ... @overload - def __getitem__(self, key: slice, /) -> list[Any]: ... + def __getitem__(self, key: slice[int | None, int | None, int | None], /) -> list[Any]: ... def __setitem__(self, key: int, value: Any, /) -> None: ... def POINTER(type: type[_CT], /) -> type[_Pointer[_CT]]: ... @@ -190,11 +190,11 @@ class Array(_CData, Generic[_CT]): @overload def __getitem__(self, key: int, /) -> Any: ... @overload - def __getitem__(self, key: slice, /) -> list[Any]: ... + def __getitem__(self, key: slice[int | None, int | None, int | None], /) -> 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: slice[int | None, int | None, int | None], 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 1b0083f4e274..0d5230719ab3 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 typing import Any, AnyStr, Generic, Protocol, SupportsAbs, SupportsIndex, TypeVar, final, overload from typing_extensions import ParamSpec, TypeAlias, TypeIs, TypeVarTuple, Unpack @@ -77,18 +77,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..6d0d18a7d265 100644 --- a/stdlib/_typeshed/__init__.pyi +++ b/stdlib/_typeshed/__init__.pyi @@ -281,7 +281,7 @@ WriteableBuffer: TypeAlias = Buffer ReadableBuffer: TypeAlias = Buffer # stable class SliceableBuffer(Buffer, Protocol): - def __getitem__(self, slice: slice, /) -> Sequence[int]: ... + def __getitem__(self, slice: slice[int | None, int | None, int | None], /) -> Sequence[int]: ... class IndexableBuffer(Buffer, Protocol): def __getitem__(self, i: int, /) -> int: ... @@ -289,7 +289,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: slice[int | None, int | None, int | None], /) -> Sequence[int]: ... @overload def __getitem__(self, i: int, /) -> int: ... @@ -353,6 +353,8 @@ class DataclassInstance(Protocol): ConvertibleToInt: TypeAlias = str | ReadableBuffer | SupportsInt | SupportsIndex | SupportsTrunc ConvertibleToFloat: TypeAlias = str | ReadableBuffer | SupportsFloat | SupportsIndex +IndexSlice: TypeAlias = slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None] + # A few classes updated from Foo(str, Enum) to Foo(StrEnum). This is a convenience so these # can be accurate on all python versions without getting too wordy if sys.version_info >= (3, 11): diff --git a/stdlib/array.pyi b/stdlib/array.pyi index 878d8d8cb808..6e63a14d6eac 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 @@ -66,12 +66,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 f70e3d6db1b1..a290cb5508dd 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -9,6 +9,7 @@ from _typeshed import ( ConvertibleToFloat, ConvertibleToInt, FileDescriptorOrPath, + IndexSlice, OpenBinaryMode, OpenBinaryModeReading, OpenBinaryModeUpdating, @@ -89,6 +90,9 @@ _T2 = TypeVar("_T2") _T3 = TypeVar("_T3") _T4 = TypeVar("_T4") _T5 = TypeVar("_T5") +_StartT = TypeVar("_StartT", covariant=True, default=Any) +_StopT = TypeVar("_StopT", covariant=True, default=Any) +_StepT = TypeVar("_StepT", covariant=True, default=Any) _SupportsNextT = TypeVar("_SupportsNextT", bound=SupportsNext[Any], covariant=True) _SupportsAnextT = TypeVar("_SupportsAnextT", bound=SupportsAnext[Any], covariant=True) _AwaitableT = TypeVar("_AwaitableT", bound=Awaitable[Any]) @@ -589,7 +593,7 @@ class str(Sequence[str]): def __contains__(self, key: str, /) -> bool: ... # type: ignore[override] def __eq__(self, value: object, /) -> bool: ... def __ge__(self, value: str, /) -> bool: ... - def __getitem__(self, key: SupportsIndex | slice, /) -> str: ... + def __getitem__(self, key: SupportsIndex | IndexSlice, /) -> str: ... def __gt__(self, value: str, /) -> bool: ... def __hash__(self) -> int: ... @overload @@ -695,7 +699,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: ... @@ -801,12 +805,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] @@ -872,14 +876,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: SupportsIndex, /) -> None: ... if sys.version_info >= (3, 10): @@ -928,17 +932,17 @@ class bool(int): def __invert__(self) -> int: ... @final -class slice: +class slice(Generic[_StartT, _StopT, _StepT]): @property - def start(self) -> Any: ... + def start(self) -> _StartT: ... @property - def step(self) -> Any: ... + def step(self) -> _StepT: ... @property - def stop(self) -> Any: ... + def stop(self) -> _StopT: ... @overload - def __new__(cls, stop: Any, /) -> Self: ... + def __new__(cls, stop: _T, /) -> slice[None, _T, None]: ... @overload - def __new__(cls, start: Any, stop: Any, step: Any = ..., /) -> Self: ... + def __new__(cls, start: _T1, stop: _T2, step: _T3 = ..., /) -> slice[_T1, _T2, _T3]: ... def __eq__(self, value: object, /) -> bool: ... __hash__: ClassVar[None] # type: ignore[assignment] def indices(self, len: SupportsIndex, /) -> tuple[int, int, int]: ... @@ -950,7 +954,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: ... @@ -1027,12 +1031,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]: ... @@ -1233,7 +1237,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 b2ed53e4427e..d5449a35f734 100644 --- a/stdlib/collections/__init__.pyi +++ b/stdlib/collections/__init__.pyi @@ -1,6 +1,12 @@ 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, Generic, NoReturn, SupportsIndex, TypeVar, final, overload from typing_extensions import Self @@ -130,12 +136,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 +181,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/lib2to3/btm_matcher.pyi b/stdlib/lib2to3/btm_matcher.pyi index 4c87b664eb20..e5381c68e87b 100644 --- a/stdlib/lib2to3/btm_matcher.pyi +++ b/stdlib/lib2to3/btm_matcher.pyi @@ -21,7 +21,7 @@ class BottomMatcher: logger: Incomplete def __init__(self) -> None: ... def add_fixer(self, fixer: BaseFix) -> None: ... - def add(self, pattern: SupportsGetItem[int | slice, Incomplete] | None, start: BMNode) -> list[BMNode]: ... + def add(self, pattern: SupportsGetItem[int | slice[int | None, int | None, int | None], Incomplete] | None, start: BMNode) -> list[BMNode]: ... def run(self, leaves: Iterable[Leaf]) -> defaultdict[BaseFix, list[Node | Leaf]]: ... def print_ac(self) -> None: ... diff --git a/stdlib/lib2to3/pytree.pyi b/stdlib/lib2to3/pytree.pyi index 138333bd58af..613f21657835 100644 --- a/stdlib/lib2to3/pytree.pyi +++ b/stdlib/lib2to3/pytree.pyi @@ -113,5 +113,5 @@ class NegatedPattern(BasePattern): def __init__(self, content: str | None = None) -> None: ... def generate_matches( - patterns: SupportsGetItem[int | slice, BasePattern] | None, nodes: SupportsGetItem[int | slice, _NL] + patterns: SupportsGetItem[int | slice[int | None, int | None, int | None], BasePattern] | None, nodes: SupportsGetItem[int | slice[int | None, int | None, int | None], _NL] ) -> Iterator[tuple[int, _Results]]: ... diff --git a/stdlib/logging/config.pyi b/stdlib/logging/config.pyi index 83fe7461cb5c..eb8eea9164a6 100644 --- a/stdlib/logging/config.pyi +++ b/stdlib/logging/config.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import StrOrBytesPath +from _typeshed import IndexSlice, StrOrBytesPath from collections.abc import Callable, Hashable, Iterable, Sequence from configparser import RawConfigParser from re import Pattern @@ -92,14 +92,14 @@ class ConvertingList(list[Any], ConvertingMixin): # undocumented @overload def __getitem__(self, key: SupportsIndex) -> Any: ... @overload - def __getitem__(self, key: slice) -> Any: ... + def __getitem__(self, key: IndexSlice) -> 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: ... + def __getitem__(self, key: IndexSlice) -> Any: ... class BaseConfigurator: # undocumented CONVERT_PATTERN: Pattern[str] diff --git a/stdlib/mmap.pyi b/stdlib/mmap.pyi index a0c150d6e7e8..8bbcf9ff6c6f 100644 --- a/stdlib/mmap.pyi +++ b/stdlib/mmap.pyi @@ -60,12 +60,12 @@ class mmap(Iterable[int], Sized): @overload def __getitem__(self, key: int, /) -> int: ... @overload - def __getitem__(self, key: slice, /) -> bytes: ... - def __delitem__(self, key: int | slice, /) -> NoReturn: ... + def __getitem__(self, key: slice[int | None, int | None, int | None], /) -> bytes: ... + def __delitem__(self, key: int | slice[int | None, int | None, int | None], /) -> NoReturn: ... @overload def __setitem__(self, key: int, value: int, /) -> None: ... @overload - def __setitem__(self, key: slice, value: ReadableBuffer, /) -> None: ... + def __setitem__(self, key: slice[int | None, int | None, int | None], value: ReadableBuffer, /) -> None: ... # Doesn't actually exist, but the object actually supports "in" because it has __getitem__, # so we claim that there is also a __contains__ to help type checkers. def __contains__(self, o: object, /) -> bool: ... diff --git a/stdlib/multiprocessing/managers.pyi b/stdlib/multiprocessing/managers.pyi index 5d5b9cdcb913..afa9a60c18e2 100644 --- a/stdlib/multiprocessing/managers.pyi +++ b/stdlib/multiprocessing/managers.pyi @@ -1,7 +1,7 @@ import queue import sys import threading -from _typeshed import SupportsKeysAndGetItem, SupportsRichComparison, SupportsRichComparisonT +from _typeshed import IndexSlice, SupportsKeysAndGetItem, SupportsRichComparison, SupportsRichComparisonT from collections.abc import Callable, Iterable, Iterator, Mapping, MutableMapping, MutableSequence, Sequence from types import TracebackType from typing import Any, AnyStr, ClassVar, Generic, SupportsIndex, TypeVar, overload @@ -90,15 +90,15 @@ class BaseListProxy(BaseProxy, MutableSequence[_T]): __builtins__: ClassVar[dict[str, Any]] def __len__(self) -> int: ... def __add__(self, x: list[_T], /) -> list[_T]: ... - def __delitem__(self, i: SupportsIndex | slice, /) -> None: ... + def __delitem__(self, i: SupportsIndex | IndexSlice, /) -> None: ... @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, i: SupportsIndex, o: _T, /) -> None: ... @overload - def __setitem__(self, s: slice, o: Iterable[_T], /) -> None: ... + def __setitem__(self, s: IndexSlice, o: Iterable[_T], /) -> None: ... def __mul__(self, n: SupportsIndex, /) -> list[_T]: ... def __rmul__(self, n: SupportsIndex, /) -> list[_T]: ... def __reversed__(self) -> Iterator[_T]: ... diff --git a/stdlib/multiprocessing/sharedctypes.pyi b/stdlib/multiprocessing/sharedctypes.pyi index 2b0498abc2c6..e37b50e64e29 100644 --- a/stdlib/multiprocessing/sharedctypes.pyi +++ b/stdlib/multiprocessing/sharedctypes.pyi @@ -102,11 +102,11 @@ class Synchronized(SynchronizedBase[_SimpleCData[_T]], Generic[_T]): class SynchronizedArray(SynchronizedBase[ctypes.Array[_SimpleCData[_T]]], Generic[_T]): def __len__(self) -> int: ... @overload - def __getitem__(self, i: slice) -> list[_T]: ... + def __getitem__(self, i: slice[int | None, int | None, int | None]) -> list[_T]: ... @overload def __getitem__(self, i: int) -> _T: ... @overload - def __setitem__(self, i: slice, value: Iterable[_T]) -> None: ... + def __setitem__(self, i: slice[int | None, int | None, int | None], value: Iterable[_T]) -> None: ... @overload def __setitem__(self, i: int, value: _T) -> None: ... def __getslice__(self, start: int, stop: int) -> list[_T]: ... @@ -114,11 +114,11 @@ class SynchronizedArray(SynchronizedBase[ctypes.Array[_SimpleCData[_T]]], Generi class SynchronizedString(SynchronizedArray[bytes]): @overload # type: ignore[override] - def __getitem__(self, i: slice) -> bytes: ... + def __getitem__(self, i: slice[int | None, int | None, int | None]) -> bytes: ... @overload def __getitem__(self, i: int) -> bytes: ... @overload # type: ignore[override] - def __setitem__(self, i: slice, value: bytes) -> None: ... + def __setitem__(self, i: slice[int | None, int | None, int | None], value: bytes) -> None: ... @overload def __setitem__(self, i: int, value: bytes) -> None: ... def __getslice__(self, start: int, stop: int) -> bytes: ... # type: ignore[override] diff --git a/stdlib/sqlite3/dbapi2.pyi b/stdlib/sqlite3/dbapi2.pyi index 0ee511df4e37..d8f785354998 100644 --- a/stdlib/sqlite3/dbapi2.pyi +++ b/stdlib/sqlite3/dbapi2.pyi @@ -1,6 +1,6 @@ import sqlite3 import sys -from _typeshed import ReadableBuffer, StrOrBytesPath, SupportsLenAndGetItem, Unused +from _typeshed import IndexSlice, ReadableBuffer, StrOrBytesPath, SupportsLenAndGetItem, Unused from collections.abc import Callable, Generator, Iterable, Iterator, Mapping from datetime import date, datetime, time from types import TracebackType @@ -528,7 +528,7 @@ class Row: @overload def __getitem__(self, key: int | str, /) -> Any: ... @overload - def __getitem__(self, key: slice, /) -> tuple[Any, ...]: ... + def __getitem__(self, key: slice[int | None, int | None, int | None], /) -> tuple[Any, ...]: ... def __hash__(self) -> int: ... def __iter__(self) -> Iterator[Any]: ... def __len__(self) -> int: ... @@ -557,5 +557,5 @@ if sys.version_info >= (3, 11): def __len__(self) -> int: ... def __enter__(self) -> Self: ... def __exit__(self, type: object, val: object, tb: object, /) -> Literal[False]: ... - def __getitem__(self, key: SupportsIndex | slice, /) -> int: ... - def __setitem__(self, key: SupportsIndex | slice, value: int, /) -> None: ... + def __getitem__(self, key: SupportsIndex | IndexSlice, /) -> int: ... + def __setitem__(self, key: SupportsIndex | IndexSlice, value: int, /) -> None: ... diff --git a/stdlib/sre_parse.pyi b/stdlib/sre_parse.pyi index c242bd2a065f..861d17500037 100644 --- a/stdlib/sre_parse.pyi +++ b/stdlib/sre_parse.pyi @@ -52,9 +52,9 @@ class SubPattern: def __init__(self, state: State, data: list[_CodeType] | None = None) -> None: ... def dump(self, level: int = 0) -> None: ... def __len__(self) -> int: ... - def __delitem__(self, index: int | slice) -> None: ... - def __getitem__(self, index: int | slice) -> SubPattern | _CodeType: ... - def __setitem__(self, index: int | slice, code: _CodeType) -> None: ... + def __delitem__(self, index: int | slice[int | None, int | None, int | None]) -> None: ... + def __getitem__(self, index: int | slice[int | None, int | None, int | None]) -> SubPattern | _CodeType: ... + def __setitem__(self, index: int | slice[int | None, int | None, int | None], code: _CodeType) -> None: ... def insert(self, index: int, code: _CodeType) -> None: ... def append(self, code: _CodeType) -> None: ... def getwidth(self) -> tuple[int, int]: ... diff --git a/stdlib/tracemalloc.pyi b/stdlib/tracemalloc.pyi index e721e414138b..d23471c60e91 100644 --- a/stdlib/tracemalloc.pyi +++ b/stdlib/tracemalloc.pyi @@ -1,5 +1,6 @@ import sys from _tracemalloc import * +from _typeshed import IndexSlice from collections.abc import Sequence from typing import Any, SupportsIndex, overload from typing_extensions import TypeAlias @@ -97,7 +98,7 @@ class Traceback(Sequence[Frame]): @overload def __getitem__(self, index: SupportsIndex) -> Frame: ... @overload - def __getitem__(self, index: slice) -> Sequence[Frame]: ... + def __getitem__(self, index: IndexSlice) -> Sequence[Frame]: ... def __contains__(self, frame: Frame) -> bool: ... # type: ignore[override] def __len__(self) -> int: ... def __eq__(self, other: object) -> bool: ... diff --git a/stdlib/typing.pyi b/stdlib/typing.pyi index cadd06358d4a..a9c72ffb699a 100644 --- a/stdlib/typing.pyi +++ b/stdlib/typing.pyi @@ -581,7 +581,7 @@ class Sequence(Collection[_T_co], Reversible[_T_co]): def __getitem__(self, index: int) -> _T_co: ... @overload @abstractmethod - def __getitem__(self, index: slice) -> Sequence[_T_co]: ... + def __getitem__(self, index: slice[int | None, int | None, int | None]) -> Sequence[_T_co]: ... # Mixin methods def index(self, value: Any, start: int = 0, stop: int = ...) -> int: ... def count(self, value: Any) -> int: ... @@ -597,19 +597,19 @@ class MutableSequence(Sequence[_T]): def __getitem__(self, index: int) -> _T: ... @overload @abstractmethod - def __getitem__(self, index: slice) -> MutableSequence[_T]: ... + def __getitem__(self, index: slice[int | None, int | None, int | None]) -> 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: slice[int | None, int | None, int | None], value: Iterable[_T]) -> None: ... @overload @abstractmethod def __delitem__(self, index: int) -> None: ... @overload @abstractmethod - def __delitem__(self, index: slice) -> None: ... + def __delitem__(self, index: slice[int | None, int | None, int | None]) -> None: ... # Mixin methods def append(self, value: _T) -> None: ... def clear(self) -> None: ... diff --git a/stdlib/xml/etree/ElementTree.pyi b/stdlib/xml/etree/ElementTree.pyi index 64ebbd3ee63f..6e2b8ef73728 100644 --- a/stdlib/xml/etree/ElementTree.pyi +++ b/stdlib/xml/etree/ElementTree.pyi @@ -1,6 +1,6 @@ import sys from _collections_abc import dict_keys -from _typeshed import FileDescriptorOrPath, ReadableBuffer, SupportsRead, SupportsWrite +from _typeshed import FileDescriptorOrPath, IndexSlice, ReadableBuffer, SupportsRead, SupportsWrite from collections.abc import Callable, Generator, ItemsView, Iterable, Iterator, Mapping, Sequence from typing import Any, Final, Literal, SupportsIndex, TypeVar, overload from typing_extensions import TypeAlias, TypeGuard, deprecated @@ -109,18 +109,18 @@ class Element: def set(self, key: str, value: str, /) -> None: ... def __copy__(self) -> Element: ... # returns the type of self in Python impl, but not in C impl def __deepcopy__(self, memo: Any, /) -> Element: ... # Only exists in C impl - def __delitem__(self, key: SupportsIndex | slice, /) -> None: ... + def __delitem__(self, key: SupportsIndex | IndexSlice, /) -> None: ... @overload def __getitem__(self, key: SupportsIndex, /) -> Element: ... @overload - def __getitem__(self, key: slice, /) -> list[Element]: ... + def __getitem__(self, key: IndexSlice, /) -> list[Element]: ... def __len__(self) -> int: ... # Doesn't actually exist at runtime, but instance of the class are indeed iterable due to __getitem__. def __iter__(self) -> Iterator[Element]: ... @overload def __setitem__(self, key: SupportsIndex, value: Element, /) -> None: ... @overload - def __setitem__(self, key: slice, value: Iterable[Element], /) -> None: ... + def __setitem__(self, key: IndexSlice, value: Iterable[Element], /) -> None: ... # Doesn't really exist in earlier versions, where __len__ is called implicitly instead @deprecated("Testing an element's truth value is deprecated.") diff --git a/stubs/JACK-Client/jack/__init__.pyi b/stubs/JACK-Client/jack/__init__.pyi index 4f8d61bd4de0..c901c026ea94 100644 --- a/stubs/JACK-Client/jack/__init__.pyi +++ b/stubs/JACK-Client/jack/__init__.pyi @@ -38,11 +38,11 @@ class _CBufferType: @overload def __getitem__(self, key: int) -> str: ... @overload - def __getitem__(self, key: slice) -> bytes: ... + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> bytes: ... @overload def __setitem__(self, key: int, val: str) -> None: ... @overload - def __setitem__(self, key: slice, val: bytes) -> None: ... + def __setitem__(self, key: slice[int | None, int | None, int | None], val: bytes) -> None: ... def __len__(self) -> int: ... def __bytes__(self) -> bytes: ... diff --git a/stubs/Markdown/markdown/util.pyi b/stubs/Markdown/markdown/util.pyi index 2a0d9fdd0485..35052d450ae5 100644 --- a/stubs/Markdown/markdown/util.pyi +++ b/stubs/Markdown/markdown/util.pyi @@ -55,7 +55,7 @@ class Registry(Generic[_T]): def __contains__(self, item: str | _T) -> bool: ... def __iter__(self) -> Iterator[_T]: ... @overload - def __getitem__(self, key: slice) -> Registry[_T]: ... + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> Registry[_T]: ... @overload def __getitem__(self, key: str | int) -> _T: ... def __len__(self) -> int: ... diff --git a/stubs/SQLAlchemy/sqlalchemy/cresultproxy.pyi b/stubs/SQLAlchemy/sqlalchemy/cresultproxy.pyi new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/stubs/cffi/_cffi_backend.pyi b/stubs/cffi/_cffi_backend.pyi index 8acbc0c50493..23a9a4ff0b15 100644 --- a/stubs/cffi/_cffi_backend.pyi +++ b/stubs/cffi/_cffi_backend.pyi @@ -1,6 +1,6 @@ import sys import types -from _typeshed import Incomplete, ReadableBuffer, WriteableBuffer +from _typeshed import Incomplete, IndexSlice, ReadableBuffer, WriteableBuffer from collections.abc import Callable, Hashable from typing import Any, ClassVar, Literal, Protocol, SupportsIndex, TypeVar, final, overload from typing_extensions import TypeAlias @@ -72,7 +72,7 @@ class _CDataBase: def __exit__(self, type: type[BaseException] | None, value: BaseException | None, traceback: types.TracebackType | None): ... def __float__(self) -> float: ... def __ge__(self, other): ... - def __getitem__(self, index: SupportsIndex | slice): ... + def __getitem__(self, index: SupportsIndex | IndexSlice): ... def __gt__(self, other): ... def __hash__(self) -> int: ... def __int__(self) -> int: ... @@ -83,7 +83,7 @@ class _CDataBase: def __ne__(self, other): ... def __radd__(self, other): ... def __rsub__(self, other): ... - def __setitem__(self, index: SupportsIndex | slice, object) -> None: ... + def __setitem__(self, index: SupportsIndex | IndexSlice, object) -> None: ... def __sub__(self, other): ... @final diff --git a/stubs/docutils/docutils/nodes.pyi b/stubs/docutils/docutils/nodes.pyi index f9a15b5a936a..48d1b786e9c2 100644 --- a/stubs/docutils/docutils/nodes.pyi +++ b/stubs/docutils/docutils/nodes.pyi @@ -128,14 +128,14 @@ class Element(Node): @overload def __getitem__(self, key: int) -> Node: ... @overload - def __getitem__(self, key: slice) -> list[Node]: ... + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> list[Node]: ... @overload def __setitem__(self, key: str, item: Any) -> None: ... @overload def __setitem__(self, key: int, item: Node) -> None: ... @overload - def __setitem__(self, key: slice, item: Iterable[Node]) -> None: ... - def __delitem__(self, key: str | int | slice) -> None: ... + def __setitem__(self, key: slice[int | None, int | None, int | None], item: Iterable[Node]) -> None: ... + def __delitem__(self, key: str | int | slice[int | None, int | None, int | None]) -> None: ... def __add__(self, other: list[Node]) -> list[Node]: ... def __radd__(self, other: list[Node]) -> list[Node]: ... def __iadd__(self, other: Node | Iterable[Node]) -> Self: ... diff --git a/stubs/netaddr/netaddr/eui/__init__.pyi b/stubs/netaddr/netaddr/eui/__init__.pyi index 38a5e3fd5d29..32fc8e5f7fe5 100644 --- a/stubs/netaddr/netaddr/eui/__init__.pyi +++ b/stubs/netaddr/netaddr/eui/__init__.pyi @@ -1,5 +1,5 @@ from _typeshed import ConvertibleToInt -from typing import ClassVar, Literal, overload +from typing import Any, ClassVar, Literal, overload from typing_extensions import Self from netaddr.core import DictDotLookup @@ -55,9 +55,9 @@ class EUI(BaseIdentifier): @overload def __getitem__(self, idx: int) -> int: ... @overload - def __getitem__(self, idx: slice) -> list[int]: ... + def __getitem__(self, idx: slice[int | None, int | None, int | None]) -> list[int]: ... @overload - def __getitem__(self, idx: int | slice) -> int | list[int]: ... + def __getitem__(self, idx: int | slice[int | None, int | None, int | None]) -> int | list[int]: ... def __setitem__(self, idx: int, value: int) -> None: ... def __hash__(self) -> int: ... def __eq__(self, other: object) -> bool: ... diff --git a/stubs/netaddr/netaddr/ip/__init__.pyi b/stubs/netaddr/netaddr/ip/__init__.pyi index de1e752cbc2a..df282ae61aac 100644 --- a/stubs/netaddr/netaddr/ip/__init__.pyi +++ b/stubs/netaddr/netaddr/ip/__init__.pyi @@ -1,7 +1,7 @@ -from _typeshed import ConvertibleToInt, Unused +from _typeshed import ConvertibleToInt, IndexSlice, Unused from abc import abstractmethod from collections.abc import Iterable, Iterator -from typing import Literal, SupportsIndex, SupportsInt, overload +from typing import Any, Literal, SupportsIndex, SupportsInt, overload from typing_extensions import Self, TypeAlias from netaddr.core import DictDotLookup @@ -86,9 +86,9 @@ class IPListMixin: @overload def __getitem__(self, index: SupportsIndex) -> IPAddress: ... @overload - def __getitem__(self, index: slice) -> Iterator[IPAddress]: ... + def __getitem__(self, index: IndexSlice) -> Iterator[IPAddress]: ... @overload - def __getitem__(self, index: SupportsIndex | slice) -> IPAddress | Iterator[IPAddress]: ... + def __getitem__(self, index: SupportsIndex | IndexSlice) -> IPAddress | Iterator[IPAddress]: ... def __contains__(self, other: BaseIP | _IPAddressAddr) -> bool: ... def __bool__(self) -> Literal[True]: ... diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index 42b34079c884..4ebdadcff342 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -92,7 +92,7 @@ class Worksheet(_WorkbookChild): def __getitem__(self, key: int) -> tuple[Cell, ...]: ... # A slice is necessarily a row or rows, even if targetting a single cell @overload - def __getitem__(self, key: slice) -> tuple[Any, ...]: ... # tuple[AnyOf[Cell, tuple[Cell, ...]]] + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> tuple[Any, ...]: ... # tuple[AnyOf[Cell, tuple[Cell, ...]]] # A str could be an individual cell, row, column or full range @overload def __getitem__(self, key: str) -> Any: ... # AnyOf[Cell, tuple[Cell, ...], tuple[tuple[Cell, ...], ...]] diff --git a/stubs/protobuf/google/protobuf/internal/containers.pyi b/stubs/protobuf/google/protobuf/internal/containers.pyi index aaa970439216..e2b183d588aa 100644 --- a/stubs/protobuf/google/protobuf/internal/containers.pyi +++ b/stubs/protobuf/google/protobuf/internal/containers.pyi @@ -1,3 +1,4 @@ +from _typeshed import IndexSlice from collections.abc import Callable, Iterable, Iterator, MutableMapping, Sequence from typing import Any, Protocol, SupportsIndex, TypeVar, overload @@ -26,7 +27,7 @@ class BaseContainer(Sequence[_T]): @overload def __getitem__(self, key: SupportsIndex) -> _T: ... @overload - def __getitem__(self, key: slice) -> list[_T]: ... + def __getitem__(self, key: IndexSlice) -> list[_T]: ... class RepeatedScalarFieldContainer(BaseContainer[_ScalarV]): def __init__(self, message_listener: MessageListener, type_checker: _ValueChecker[_ScalarV]) -> None: ... @@ -39,8 +40,8 @@ class RepeatedScalarFieldContainer(BaseContainer[_ScalarV]): @overload def __setitem__(self, key: int, value: _ScalarV) -> None: ... @overload - def __setitem__(self, key: slice, value: Iterable[_ScalarV]) -> None: ... - def __delitem__(self, key: int | slice) -> None: ... + def __setitem__(self, key: slice[int | None, int | None, int | None], value: Iterable[_ScalarV]) -> None: ... + def __delitem__(self, key: int | slice[int | None, int | None, int | None]) -> None: ... def __eq__(self, other: object) -> bool: ... class RepeatedCompositeFieldContainer(BaseContainer[_MessageV]): @@ -52,7 +53,7 @@ class RepeatedCompositeFieldContainer(BaseContainer[_MessageV]): def MergeFrom(self: _M, other: _M | Iterable[_MessageV]) -> None: ... def remove(self, elem: _MessageV) -> None: ... def pop(self, key: int = -1) -> _MessageV: ... - def __delitem__(self, key: int | slice) -> None: ... + def __delitem__(self, key: int | slice[int | None, int | None, int | None]) -> None: ... def __eq__(self, other: object) -> bool: ... class ScalarMap(MutableMapping[_K, _ScalarV]): diff --git a/stubs/pyinstaller/PyInstaller/building/datastruct.pyi b/stubs/pyinstaller/PyInstaller/building/datastruct.pyi index cfb1cf70b6d3..6895058b651e 100644 --- a/stubs/pyinstaller/PyInstaller/building/datastruct.pyi +++ b/stubs/pyinstaller/PyInstaller/building/datastruct.pyi @@ -18,7 +18,7 @@ class TOC(list[_TOCTuple]): def __sub__(self, other: Iterable[_TOCTuple]) -> TOC: ... def __rsub__(self, other: Iterable[_TOCTuple]) -> TOC: ... # slicing a TOC is not supported, but has a special case for slice(None, None, None) - def __setitem__(self, key: int | slice, value: Iterable[_TOCTuple]) -> None: ... # type: ignore[override] + def __setitem__(self, key: int | slice[None, None, None], value: Iterable[_TOCTuple]) -> None: ... # type: ignore[override] class Target: invcnum: ClassVar[int] diff --git a/stubs/python-xlib/Xlib/protocol/display.pyi b/stubs/python-xlib/Xlib/protocol/display.pyi index 1808ea6002d8..c59a5011ff5d 100644 --- a/stubs/python-xlib/Xlib/protocol/display.pyi +++ b/stubs/python-xlib/Xlib/protocol/display.pyi @@ -18,7 +18,7 @@ class bytesview: @overload def __init__(self, data: _BufferWithLen, offset: int = 0, size: int | None = None) -> None: ... @overload - def __getitem__(self, key: slice) -> bytes: ... + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> bytes: ... @overload def __getitem__(self, key: int) -> int: ... def __len__(self) -> int: ... diff --git a/stubs/tensorflow/tensorflow/__init__.pyi b/stubs/tensorflow/tensorflow/__init__.pyi index 21c8df673cbd..2463e8918d0b 100644 --- a/stubs/tensorflow/tensorflow/__init__.pyi +++ b/stubs/tensorflow/tensorflow/__init__.pyi @@ -217,7 +217,7 @@ class TensorShape(metaclass=ABCMeta): @overload def __getitem__(self, key: int) -> int | None: ... @overload - def __getitem__(self, key: slice) -> TensorShape: ... + def __getitem__(self, key: slice[int | None, int | None, int | None]) -> TensorShape: ... def __iter__(self) -> Iterator[int | None]: ... def __len__(self) -> int: ... def __add__(self, other: Iterable[int | None]) -> TensorShape: ...