Skip to content

Commit 5c49b1f

Browse files
Specialize plain slice type hints (#13007)
1 parent 2ff920f commit 5c49b1f

File tree

15 files changed

+69
-69
lines changed

15 files changed

+69
-69
lines changed

stdlib/_ctypes.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ from abc import abstractmethod
66
from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
77
from ctypes import CDLL, ArgumentError as ArgumentError, c_void_p
88
from types import GenericAlias
9-
from typing import Any, ClassVar, Final, Generic, Literal, TypeVar, final, overload, type_check_only
9+
from typing import Any, ClassVar, Final, Generic, Literal, SupportsIndex, TypeVar, final, overload, type_check_only
1010
from typing_extensions import Self, TypeAlias
1111

1212
_T = TypeVar("_T")
@@ -134,7 +134,7 @@ class _Pointer(_PointerLike, _CData, Generic[_CT], metaclass=_PyCPointerType):
134134
@overload
135135
def __getitem__(self, key: int, /) -> Any: ...
136136
@overload
137-
def __getitem__(self, key: slice, /) -> list[Any]: ...
137+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> list[Any]: ...
138138
def __setitem__(self, key: int, value: Any, /) -> None: ...
139139

140140
if sys.version_info < (3, 14):
@@ -342,11 +342,11 @@ class Array(_CData, Generic[_CT], metaclass=_PyCArrayType):
342342
@overload
343343
def __getitem__(self, key: int, /) -> Any: ...
344344
@overload
345-
def __getitem__(self, key: slice, /) -> list[Any]: ...
345+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> list[Any]: ...
346346
@overload
347347
def __setitem__(self, key: int, value: Any, /) -> None: ...
348348
@overload
349-
def __setitem__(self, key: slice, value: Iterable[Any], /) -> None: ...
349+
def __setitem__(self, key: slice[SupportsIndex | None], value: Iterable[Any], /) -> None: ...
350350
def __iter__(self) -> Iterator[Any]: ...
351351
# Can't inherit from Sized because the metaclass conflict between
352352
# Sized and _CData prevents using _CDataMeta.

stdlib/_operator.pyi

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,20 @@ def concat(a: Sequence[_T], b: Sequence[_T], /) -> Sequence[_T]: ...
8080
def contains(a: Container[object], b: object, /) -> bool: ...
8181
def countOf(a: Iterable[object], b: object, /) -> int: ...
8282
@overload
83-
def delitem(a: MutableSequence[Any], b: SupportsIndex, /) -> None: ...
83+
def delitem(a: MutableSequence[Any], b: int, /) -> None: ...
8484
@overload
85-
def delitem(a: MutableSequence[Any], b: slice, /) -> None: ...
85+
def delitem(a: MutableSequence[Any], b: slice[int | None], /) -> None: ...
8686
@overload
8787
def delitem(a: MutableMapping[_K, Any], b: _K, /) -> None: ...
8888
@overload
89-
def getitem(a: Sequence[_T], b: slice, /) -> Sequence[_T]: ...
89+
def getitem(a: Sequence[_T], b: slice[int | None], /) -> Sequence[_T]: ...
9090
@overload
9191
def getitem(a: SupportsGetItem[_K, _V], b: _K, /) -> _V: ...
9292
def indexOf(a: Iterable[_T], b: _T, /) -> int: ...
9393
@overload
94-
def setitem(a: MutableSequence[_T], b: SupportsIndex, c: _T, /) -> None: ...
94+
def setitem(a: MutableSequence[_T], b: int, c: _T, /) -> None: ...
9595
@overload
96-
def setitem(a: MutableSequence[_T], b: slice, c: Sequence[_T], /) -> None: ...
96+
def setitem(a: MutableSequence[_T], b: slice[int | None], c: Sequence[_T], /) -> None: ...
9797
@overload
9898
def setitem(a: MutableMapping[_K, _V], b: _K, c: _V, /) -> None: ...
9999
def length_hint(obj: object, default: int = 0, /) -> int: ...

stdlib/_typeshed/__init__.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,15 +300,15 @@ WriteableBuffer: TypeAlias = Buffer
300300
ReadableBuffer: TypeAlias = Buffer # stable
301301

302302
class SliceableBuffer(Buffer, Protocol):
303-
def __getitem__(self, slice: slice, /) -> Sequence[int]: ...
303+
def __getitem__(self, slice: slice[SupportsIndex | None], /) -> Sequence[int]: ...
304304

305305
class IndexableBuffer(Buffer, Protocol):
306306
def __getitem__(self, i: int, /) -> int: ...
307307

308308
class SupportsGetItemBuffer(SliceableBuffer, IndexableBuffer, Protocol):
309309
def __contains__(self, x: Any, /) -> bool: ...
310310
@overload
311-
def __getitem__(self, slice: slice, /) -> Sequence[int]: ...
311+
def __getitem__(self, slice: slice[SupportsIndex | None], /) -> Sequence[int]: ...
312312
@overload
313313
def __getitem__(self, i: int, /) -> int: ...
314314

stdlib/array.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ class array(MutableSequence[_T]):
8080
@overload
8181
def __getitem__(self, key: SupportsIndex, /) -> _T: ...
8282
@overload
83-
def __getitem__(self, key: slice, /) -> array[_T]: ...
83+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> array[_T]: ...
8484
@overload # type: ignore[override]
8585
def __setitem__(self, key: SupportsIndex, value: _T, /) -> None: ...
8686
@overload
87-
def __setitem__(self, key: slice, value: array[_T], /) -> None: ...
88-
def __delitem__(self, key: SupportsIndex | slice, /) -> None: ...
87+
def __setitem__(self, key: slice[SupportsIndex | None], value: array[_T], /) -> None: ...
88+
def __delitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> None: ...
8989
def __add__(self, value: array[_T], /) -> array[_T]: ...
9090
def __eq__(self, value: object, /) -> bool: ...
9191
def __ge__(self, value: array[_T], /) -> bool: ...

stdlib/builtins.pyi

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -633,9 +633,9 @@ class str(Sequence[str]):
633633
def __eq__(self, value: object, /) -> bool: ...
634634
def __ge__(self, value: str, /) -> bool: ...
635635
@overload
636-
def __getitem__(self: LiteralString, key: SupportsIndex | slice, /) -> LiteralString: ...
636+
def __getitem__(self: LiteralString, key: SupportsIndex | slice[SupportsIndex | None], /) -> LiteralString: ...
637637
@overload
638-
def __getitem__(self, key: SupportsIndex | slice, /) -> str: ... # type: ignore[misc]
638+
def __getitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> str: ... # type: ignore[misc]
639639
def __gt__(self, value: str, /) -> bool: ...
640640
def __hash__(self) -> int: ...
641641
@overload
@@ -746,7 +746,7 @@ class bytes(Sequence[int]):
746746
@overload
747747
def __getitem__(self, key: SupportsIndex, /) -> int: ...
748748
@overload
749-
def __getitem__(self, key: slice, /) -> bytes: ...
749+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> bytes: ...
750750
def __add__(self, value: ReadableBuffer, /) -> bytes: ...
751751
def __mul__(self, value: SupportsIndex, /) -> bytes: ...
752752
def __rmul__(self, value: SupportsIndex, /) -> bytes: ...
@@ -856,12 +856,12 @@ class bytearray(MutableSequence[int]):
856856
@overload
857857
def __getitem__(self, key: SupportsIndex, /) -> int: ...
858858
@overload
859-
def __getitem__(self, key: slice, /) -> bytearray: ...
859+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> bytearray: ...
860860
@overload
861861
def __setitem__(self, key: SupportsIndex, value: SupportsIndex, /) -> None: ...
862862
@overload
863-
def __setitem__(self, key: slice, value: Iterable[SupportsIndex] | bytes, /) -> None: ...
864-
def __delitem__(self, key: SupportsIndex | slice, /) -> None: ...
863+
def __setitem__(self, key: slice[SupportsIndex | None], value: Iterable[SupportsIndex] | bytes, /) -> None: ...
864+
def __delitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> None: ...
865865
def __add__(self, value: ReadableBuffer, /) -> bytearray: ...
866866
# The superclass wants us to accept Iterable[int], but that fails at runtime.
867867
def __iadd__(self, value: ReadableBuffer, /) -> Self: ... # type: ignore[override]
@@ -933,14 +933,14 @@ class memoryview(Sequence[_I]):
933933
@overload
934934
def __getitem__(self, key: SupportsIndex | tuple[SupportsIndex, ...], /) -> _I: ...
935935
@overload
936-
def __getitem__(self, key: slice, /) -> memoryview[_I]: ...
936+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> memoryview[_I]: ...
937937
def __contains__(self, x: object, /) -> bool: ...
938938
def __iter__(self) -> Iterator[_I]: ...
939939
def __len__(self) -> int: ...
940940
def __eq__(self, value: object, /) -> bool: ...
941941
def __hash__(self) -> int: ...
942942
@overload
943-
def __setitem__(self, key: slice, value: ReadableBuffer, /) -> None: ...
943+
def __setitem__(self, key: slice[SupportsIndex | None], value: ReadableBuffer, /) -> None: ...
944944
@overload
945945
def __setitem__(self, key: SupportsIndex | tuple[SupportsIndex, ...], value: _I, /) -> None: ...
946946
if sys.version_info >= (3, 10):
@@ -1047,7 +1047,7 @@ class tuple(Sequence[_T_co]):
10471047
@overload
10481048
def __getitem__(self, key: SupportsIndex, /) -> _T_co: ...
10491049
@overload
1050-
def __getitem__(self, key: slice, /) -> tuple[_T_co, ...]: ...
1050+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> tuple[_T_co, ...]: ...
10511051
def __iter__(self) -> Iterator[_T_co]: ...
10521052
def __lt__(self, value: tuple[_T_co, ...], /) -> bool: ...
10531053
def __le__(self, value: tuple[_T_co, ...], /) -> bool: ...
@@ -1147,12 +1147,12 @@ class list(MutableSequence[_T]):
11471147
@overload
11481148
def __getitem__(self, i: SupportsIndex, /) -> _T: ...
11491149
@overload
1150-
def __getitem__(self, s: slice, /) -> list[_T]: ...
1150+
def __getitem__(self, s: slice[SupportsIndex | None], /) -> list[_T]: ...
11511151
@overload
11521152
def __setitem__(self, key: SupportsIndex, value: _T, /) -> None: ...
11531153
@overload
1154-
def __setitem__(self, key: slice, value: Iterable[_T], /) -> None: ...
1155-
def __delitem__(self, key: SupportsIndex | slice, /) -> None: ...
1154+
def __setitem__(self, key: slice[SupportsIndex | None], value: Iterable[_T], /) -> None: ...
1155+
def __delitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> None: ...
11561156
# Overloading looks unnecessary, but is needed to work around complex mypy problems
11571157
@overload
11581158
def __add__(self, value: list[_T], /) -> list[_T]: ...
@@ -1352,7 +1352,7 @@ class range(Sequence[int]):
13521352
@overload
13531353
def __getitem__(self, key: SupportsIndex, /) -> int: ...
13541354
@overload
1355-
def __getitem__(self, key: slice, /) -> range: ...
1355+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> range: ...
13561356
def __reversed__(self) -> Iterator[int]: ...
13571357

13581358
@disjoint_base

stdlib/collections/__init__.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ class UserList(MutableSequence[_T]):
129129
@overload
130130
def __getitem__(self, i: SupportsIndex) -> _T: ...
131131
@overload
132-
def __getitem__(self, i: slice) -> Self: ...
132+
def __getitem__(self, i: slice[SupportsIndex | None]) -> Self: ...
133133
@overload
134134
def __setitem__(self, i: SupportsIndex, item: _T) -> None: ...
135135
@overload
136-
def __setitem__(self, i: slice, item: Iterable[_T]) -> None: ...
137-
def __delitem__(self, i: SupportsIndex | slice) -> None: ...
136+
def __setitem__(self, i: slice[SupportsIndex | None], item: Iterable[_T]) -> None: ...
137+
def __delitem__(self, i: SupportsIndex | slice[SupportsIndex | None]) -> None: ...
138138
def __add__(self, other: Iterable[_T]) -> Self: ...
139139
def __radd__(self, other: Iterable[_T]) -> Self: ...
140140
def __iadd__(self, other: Iterable[_T]) -> Self: ...
@@ -174,7 +174,7 @@ class UserString(Sequence[UserString]):
174174
def __hash__(self) -> int: ...
175175
def __contains__(self, char: object) -> bool: ...
176176
def __len__(self) -> int: ...
177-
def __getitem__(self, index: SupportsIndex | slice) -> Self: ...
177+
def __getitem__(self, index: SupportsIndex | slice[SupportsIndex | None]) -> Self: ...
178178
def __iter__(self) -> Iterator[Self]: ...
179179
def __reversed__(self) -> Iterator[Self]: ...
180180
def __add__(self, other: object) -> Self: ...

stdlib/logging/config.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,23 +97,23 @@ class ConvertingList(list[Any], ConvertingMixin): # undocumented
9797
@overload
9898
def __getitem__(self, key: SupportsIndex) -> Any: ...
9999
@overload
100-
def __getitem__(self, key: slice) -> Any: ...
100+
def __getitem__(self, key: slice[SupportsIndex | None]) -> Any: ...
101101
def pop(self, idx: SupportsIndex = -1) -> Any: ...
102102

103103
if sys.version_info >= (3, 12):
104104
class ConvertingTuple(tuple[Any, ...], ConvertingMixin): # undocumented
105105
@overload
106106
def __getitem__(self, key: SupportsIndex) -> Any: ...
107107
@overload
108-
def __getitem__(self, key: slice) -> Any: ...
108+
def __getitem__(self, key: slice[SupportsIndex | None]) -> Any: ...
109109

110110
else:
111111
@disjoint_base
112112
class ConvertingTuple(tuple[Any, ...], ConvertingMixin): # undocumented
113113
@overload
114114
def __getitem__(self, key: SupportsIndex) -> Any: ...
115115
@overload
116-
def __getitem__(self, key: slice) -> Any: ...
116+
def __getitem__(self, key: slice[SupportsIndex | None]) -> Any: ...
117117

118118
class BaseConfigurator:
119119
CONVERT_PATTERN: Pattern[str]

stdlib/mmap.pyi

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import os
22
import sys
33
from _typeshed import ReadableBuffer, Unused
44
from collections.abc import Iterator
5-
from typing import Final, Literal, NoReturn, overload
5+
from typing import Final, Literal, NoReturn, SupportsIndex, overload
66
from typing_extensions import Self, disjoint_base
77

88
ACCESS_DEFAULT: Final = 0
@@ -77,14 +77,14 @@ class mmap:
7777
def read(self, n: int | None = None, /) -> bytes: ...
7878
def write(self, bytes: ReadableBuffer, /) -> int: ...
7979
@overload
80-
def __getitem__(self, key: int, /) -> int: ...
80+
def __getitem__(self, key: SupportsIndex, /) -> int: ...
8181
@overload
82-
def __getitem__(self, key: slice, /) -> bytes: ...
83-
def __delitem__(self, key: int | slice, /) -> NoReturn: ...
82+
def __getitem__(self, key: slice[SupportsIndex | None], /) -> bytes: ...
83+
def __delitem__(self, key: SupportsIndex | slice[SupportsIndex | None], /) -> NoReturn: ...
8484
@overload
85-
def __setitem__(self, key: int, value: int, /) -> None: ...
85+
def __setitem__(self, key: SupportsIndex, value: int, /) -> None: ...
8686
@overload
87-
def __setitem__(self, key: slice, value: ReadableBuffer, /) -> None: ...
87+
def __setitem__(self, key: slice[SupportsIndex | None], value: ReadableBuffer, /) -> None: ...
8888
# Doesn't actually exist, but the object actually supports "in" because it has __getitem__,
8989
# so we claim that there is also a __contains__ to help type checkers.
9090
def __contains__(self, o: object, /) -> bool: ...

stdlib/multiprocessing/managers.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,15 @@ class BaseListProxy(BaseProxy, MutableSequence[_T]):
172172
__builtins__: ClassVar[dict[str, Any]]
173173
def __len__(self) -> int: ...
174174
def __add__(self, x: list[_T], /) -> list[_T]: ...
175-
def __delitem__(self, i: SupportsIndex | slice, /) -> None: ...
175+
def __delitem__(self, i: SupportsIndex | slice[SupportsIndex | None], /) -> None: ...
176176
@overload
177177
def __getitem__(self, i: SupportsIndex, /) -> _T: ...
178178
@overload
179-
def __getitem__(self, s: slice, /) -> list[_T]: ...
179+
def __getitem__(self, s: slice[SupportsIndex | None], /) -> list[_T]: ...
180180
@overload
181181
def __setitem__(self, i: SupportsIndex, o: _T, /) -> None: ...
182182
@overload
183-
def __setitem__(self, s: slice, o: Iterable[_T], /) -> None: ...
183+
def __setitem__(self, s: slice[SupportsIndex | None], o: Iterable[_T], /) -> None: ...
184184
def __mul__(self, n: SupportsIndex, /) -> list[_T]: ...
185185
def __rmul__(self, n: SupportsIndex, /) -> list[_T]: ...
186186
def __imul__(self, value: SupportsIndex, /) -> Self: ...

stdlib/multiprocessing/sharedctypes.pyi

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ from ctypes import _SimpleCData, c_char
55
from multiprocessing.context import BaseContext
66
from multiprocessing.synchronize import _LockLike
77
from types import TracebackType
8-
from typing import Any, Generic, Literal, Protocol, TypeVar, overload, type_check_only
8+
from typing import Any, Generic, Literal, Protocol, SupportsIndex, TypeVar, overload, type_check_only
99

1010
__all__ = ["RawValue", "RawArray", "Value", "Array", "copy", "synchronized"]
1111

@@ -103,27 +103,27 @@ class Synchronized(SynchronizedBase[_SimpleCData[_T]], Generic[_T]):
103103
class SynchronizedArray(SynchronizedBase[ctypes.Array[_SimpleCData[_T]]], Generic[_T]):
104104
def __len__(self) -> int: ...
105105
@overload
106-
def __getitem__(self, i: slice) -> list[_T]: ...
106+
def __getitem__(self, i: slice[SupportsIndex | None]) -> list[_T]: ...
107107
@overload
108-
def __getitem__(self, i: int) -> _T: ...
108+
def __getitem__(self, i: SupportsIndex) -> _T: ...
109109
@overload
110-
def __setitem__(self, i: slice, value: Iterable[_T]) -> None: ...
110+
def __setitem__(self, i: slice[SupportsIndex | None], value: Iterable[_T]) -> None: ...
111111
@overload
112-
def __setitem__(self, i: int, value: _T) -> None: ...
113-
def __getslice__(self, start: int, stop: int) -> list[_T]: ...
114-
def __setslice__(self, start: int, stop: int, values: Iterable[_T]) -> None: ...
112+
def __setitem__(self, i: SupportsIndex, value: _T) -> None: ...
113+
def __getslice__(self, start: SupportsIndex, stop: SupportsIndex) -> list[_T]: ...
114+
def __setslice__(self, start: SupportsIndex, stop: SupportsIndex, values: Iterable[_T]) -> None: ...
115115

116116
class SynchronizedString(SynchronizedArray[bytes]):
117117
@overload # type: ignore[override]
118-
def __getitem__(self, i: slice) -> bytes: ...
118+
def __getitem__(self, i: slice[SupportsIndex | None]) -> bytes: ...
119119
@overload
120-
def __getitem__(self, i: int) -> bytes: ...
120+
def __getitem__(self, i: SupportsIndex) -> bytes: ...
121121
@overload # type: ignore[override]
122-
def __setitem__(self, i: slice, value: bytes) -> None: ...
122+
def __setitem__(self, i: slice[SupportsIndex | None], value: bytes) -> None: ...
123123
@overload
124-
def __setitem__(self, i: int, value: bytes) -> None: ...
125-
def __getslice__(self, start: int, stop: int) -> bytes: ... # type: ignore[override]
126-
def __setslice__(self, start: int, stop: int, values: bytes) -> None: ... # type: ignore[override]
124+
def __setitem__(self, i: SupportsIndex, value: bytes) -> None: ...
125+
def __getslice__(self, start: SupportsIndex, stop: SupportsIndex) -> bytes: ... # type: ignore[override]
126+
def __setslice__(self, start: SupportsIndex, stop: SupportsIndex, values: bytes) -> None: ... # type: ignore[override]
127127

128128
value: bytes
129129
raw: bytes

0 commit comments

Comments
 (0)