Skip to content
47 changes: 28 additions & 19 deletions stdlib/builtins.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ from _typeshed import (
ConvertibleToFloat,
ConvertibleToInt,
FileDescriptorOrPath,
MaybeNone,
OpenBinaryMode,
OpenBinaryModeReading,
OpenBinaryModeUpdating,
Expand Down Expand Up @@ -95,9 +94,9 @@ _SupportsAnextT = TypeVar("_SupportsAnextT", bound=SupportsAnext[Any], covariant
_AwaitableT = TypeVar("_AwaitableT", bound=Awaitable[Any])
_AwaitableT_co = TypeVar("_AwaitableT_co", bound=Awaitable[Any], covariant=True)
_P = ParamSpec("_P")
_StartT = TypeVar("_StartT", covariant=True, default=Any)
_StopT = TypeVar("_StopT", covariant=True, default=Any)
_StepT = TypeVar("_StepT", covariant=True, default=Any)
_StartT_co = TypeVar("_StartT_co", covariant=True, default=Any)
_StopT_co = TypeVar("_StopT_co", covariant=True, default=_StartT_co) # slice[A] -> slice[A, A, Any]
_StepT_co = TypeVar("_StepT_co", covariant=True, default=Any) # slice[A,B] -> slice[A, B, Any]

class object:
__doc__: str | None
Expand Down Expand Up @@ -940,24 +939,34 @@ class bool(int):
def __invert__(self) -> int: ...

@final
class slice(Generic[_StartT, _StopT, _StepT]):
class slice(Generic[_StartT_co, _StopT_co, _StepT_co]):
@property
def start(self) -> _StartT: ...
def start(self) -> _StartT_co: ...
@property
def step(self) -> _StepT: ...
def step(self) -> _StepT_co: ...
@property
def stop(self) -> _StopT: ...
@overload
def __new__(cls, stop: int | None, /) -> slice[int | MaybeNone, int | MaybeNone, int | MaybeNone]: ...
@overload
def __new__(
cls, start: int | None, stop: int | None, step: int | None = None, /
) -> slice[int | MaybeNone, int | MaybeNone, int | MaybeNone]: ...
@overload
def __new__(cls, stop: _T2, /) -> slice[Any, _T2, Any]: ...
@overload
def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, Any]: ...
@overload
def stop(self) -> _StopT_co: ...
# generic slice --------------------------------------------------------------------
@overload # 2x None
def __new__(cls, start: None, stop: None = None, step: None = None, /) -> slice[Any, Any, Any]: ...
# unary overloads ------------------------------------------------------------------
@overload # 0x None
def __new__(cls, stop: _T2, /) -> slice[_T2 | None, _T2 | None, Any]: ...
# binary overloads -----------------------------------------------------------------
@overload # 1x None
def __new__(cls, start: _T1, stop: None, step: None = None, /) -> slice[_T1 | None, _T1 | None, Any]: ...
@overload # 1x None
def __new__(cls, start: None, stop: _T2, step: None = None, /) -> slice[_T2 | None, _T2 | None, Any]: ...
@overload # 0x None
def __new__(cls, start: _T1, stop: _T2, step: None = None, /) -> slice[_T1, _T2, Any]: ...
# ternary overloads ----------------------------------------------------------------
@overload # 2x None
def __new__(cls, start: None, stop: None, step: _T3, /) -> slice[Any, Any, _T3]: ...
@overload # 1x None
def __new__(cls, start: _T1, stop: None, step: _T3, /) -> slice[_T1 | None, _T1 | None, _T3]: ...
@overload # 1x None
def __new__(cls, start: None, stop: _T2, step: _T3, /) -> slice[_T2 | None, _T2 | None, _T3]: ...
@overload # 0x None
def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ...
def __eq__(self, value: object, /) -> bool: ...
if sys.version_info >= (3, 12):
Expand Down