mirror of
https://github.com/davidhalter/typeshed.git
synced 2026-07-10 10:26:31 +08:00
builtins.slice: more precise __new__ overloads and defaults for StopT and StepT. (#13008)
This commit is contained in:
+30
-14
@@ -10,7 +10,6 @@ from _typeshed import (
|
||||
ConvertibleToFloat,
|
||||
ConvertibleToInt,
|
||||
FileDescriptorOrPath,
|
||||
MaybeNone,
|
||||
OpenBinaryMode,
|
||||
OpenBinaryModeReading,
|
||||
OpenBinaryModeUpdating,
|
||||
@@ -95,9 +94,14 @@ _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)
|
||||
|
||||
# Type variables for slice
|
||||
_StartT_co = TypeVar("_StartT_co", covariant=True, default=Any) # slice -> slice[Any, Any, Any]
|
||||
_StopT_co = TypeVar("_StopT_co", covariant=True, default=_StartT_co) # slice[A] -> slice[A, A, A]
|
||||
# NOTE: step could differ from start and stop, (e.g. datetime/timedelta)l
|
||||
# the default (start|stop) is chosen to cater to the most common case of int/index slices.
|
||||
# FIXME: https://github.com/python/typing/issues/213 (replace step=start|stop with step=start&stop)
|
||||
_StepT_co = TypeVar("_StepT_co", covariant=True, default=_StartT_co | _StopT_co) # slice[A,B] -> slice[A, B, A|B]
|
||||
|
||||
class object:
|
||||
__doc__: str | None
|
||||
@@ -940,23 +944,35 @@ 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: ...
|
||||
def stop(self) -> _StopT_co: ...
|
||||
# Note: __new__ overloads map `None` to `Any`, since users expect slice(x, None)
|
||||
# to be compatible with slice(None, x).
|
||||
# generic slice --------------------------------------------------------------------
|
||||
@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]: ...
|
||||
def __new__(cls, start: None, stop: None = None, step: None = None, /) -> slice[Any, Any, Any]: ...
|
||||
# unary overloads ------------------------------------------------------------------
|
||||
@overload
|
||||
def __new__(cls, stop: _T2, /) -> slice[Any, _T2, Any]: ...
|
||||
# binary overloads -----------------------------------------------------------------
|
||||
@overload
|
||||
def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, Any]: ...
|
||||
def __new__(cls, start: _T1, stop: None, step: None = None, /) -> slice[_T1, Any, Any]: ...
|
||||
@overload
|
||||
def __new__(cls, start: None, stop: _T2, step: None = None, /) -> slice[Any, _T2, Any]: ...
|
||||
@overload
|
||||
def __new__(cls, start: _T1, stop: _T2, step: None = None, /) -> slice[_T1, _T2, Any]: ...
|
||||
# ternary overloads ----------------------------------------------------------------
|
||||
@overload
|
||||
def __new__(cls, start: None, stop: None, step: _T3, /) -> slice[Any, Any, _T3]: ...
|
||||
@overload
|
||||
def __new__(cls, start: _T1, stop: None, step: _T3, /) -> slice[_T1, Any, _T3]: ...
|
||||
@overload
|
||||
def __new__(cls, start: None, stop: _T2, step: _T3, /) -> slice[Any, _T2, _T3]: ...
|
||||
@overload
|
||||
def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ...
|
||||
def __eq__(self, value: object, /) -> bool: ...
|
||||
|
||||
Reference in New Issue
Block a user