From 96289365e9ed0b9e39b8f068cbfbccd0d12eb467 Mon Sep 17 00:00:00 2001 From: Thanos <111999343+Sachaa-Thanasius@users.noreply.github.com> Date: Wed, 20 Mar 2024 10:17:25 -0400 Subject: [PATCH 01/10] Make slice generic Want to see the primer hits. --- stdlib/builtins.pyi | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index f531c181b222..33526f259e84 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -90,6 +90,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", default=int) +_StopT = TypeVar("_StopT", default=StartT) +_StepT = TypeVar("_StepT", default=int | None) class object: __doc__: str | None @@ -903,17 +906,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: _StopT, /) -> Self: ... @overload - def __new__(cls, start: Any, stop: Any, step: Any = ..., /) -> Self: ... + def __new__(cls, start: _StartT, stop: _StopT, step: _StepT = ..., /) -> Self: ... def __eq__(self, value: object, /) -> bool: ... __hash__: ClassVar[None] # type: ignore[assignment] def indices(self, len: SupportsIndex, /) -> tuple[int, int, int]: ... From 95885758af1d2bb3de7cd422763465764443d488 Mon Sep 17 00:00:00 2001 From: Thanos <111999343+Sachaa-Thanasius@users.noreply.github.com> Date: Wed, 20 Mar 2024 10:20:29 -0400 Subject: [PATCH 02/10] Fix typo in _StartT as default for _StopT --- stdlib/builtins.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 33526f259e84..82769523a983 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -91,7 +91,7 @@ _AwaitableT = TypeVar("_AwaitableT", bound=Awaitable[Any]) _AwaitableT_co = TypeVar("_AwaitableT_co", bound=Awaitable[Any], covariant=True) _P = ParamSpec("_P") _StartT = TypeVar("_StartT", default=int) -_StopT = TypeVar("_StopT", default=StartT) +_StopT = TypeVar("_StopT", default=_StartT) _StepT = TypeVar("_StepT", default=int | None) class object: From cdd8fc27bf377843439386a78cdddbd24c4a461f Mon Sep 17 00:00:00 2001 From: Thanos <111999343+Sachaa-Thanasius@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:00:31 -0400 Subject: [PATCH 03/10] Trying defaults that are more accurate to the runtime Courtesy of the feedback from @hamdanal. --- stdlib/builtins.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index d2ca9a6bf78a..ea9bf807db07 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -91,9 +91,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", default=int) -_StopT = TypeVar("_StopT", default=_StartT) -_StepT = TypeVar("_StepT", default=int | None) +_StartT = TypeVar("_StartT", default=None) +_StopT = TypeVar("_StopT", default=int) +_StepT = TypeVar("_StepT", default=None) class object: __doc__: str | None From ed843dc71ac2fb9a3114ff1e957293920978f14e Mon Sep 17 00:00:00 2001 From: Thanos <111999343+Sachaa-Thanasius@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:05:45 -0400 Subject: [PATCH 04/10] Attempt making the defaults `Any` Co-authored-by: Sebastian Rittau --- stdlib/builtins.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index ea9bf807db07..815df8b5dc50 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -91,9 +91,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", default=None) -_StopT = TypeVar("_StopT", default=int) -_StepT = TypeVar("_StepT", default=None) +_StartT = TypeVar("_StartT", default=Any) +_StopT = TypeVar("_StopT", default=Any) +_StepT = TypeVar("_StepT", default=Any) class object: __doc__: str | None From 02fdc1edeb0a4e6e7fe61e345c71aa862221d2f1 Mon Sep 17 00:00:00 2001 From: Thanos <111999343+Sachaa-Thanasius@users.noreply.github.com> Date: Wed, 5 Jun 2024 06:28:00 -0400 Subject: [PATCH 05/10] Try making the typevars covariant, per feedback --- stdlib/builtins.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 815df8b5dc50..6e26bab0631b 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -91,9 +91,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", default=Any) -_StopT = TypeVar("_StopT", default=Any) -_StepT = TypeVar("_StepT", default=Any) +_StartT = TypeVar("_StartT", covariant=True, default=Any) +_StopT = TypeVar("_StopT", covariant=True, default=Any) +_StepT = TypeVar("_StepT", covariant=True, default=Any) class object: __doc__: str | None From 15da62855cedde95ac1980833c89c786a7fcae87 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 24 Oct 2024 12:47:55 +0100 Subject: [PATCH 06/10] fix failing test --- stdlib/builtins.pyi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 983d9708a650..c57220d7a2e8 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -947,9 +947,11 @@ class slice(Generic[_StartT, _StopT, _StepT]): @property def stop(self) -> _StopT: ... @overload - def __new__(cls, stop: _StopT, /) -> Self: ... + def __new__(cls, stop: _T2, /) -> slice[None, _T2, None]: ... @overload - def __new__(cls, start: _StartT, stop: _StopT, step: _StepT = ..., /) -> Self: ... + def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, None]: ... + @overload + 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): def __hash__(self) -> int: ... From 0692cd03dd4776adcbbcc4bb04dc01e399a54cbd Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 24 Oct 2024 12:57:18 +0100 Subject: [PATCH 07/10] Hedge --- stdlib/builtins.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index c57220d7a2e8..d685ddb1c6a5 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -947,9 +947,9 @@ class slice(Generic[_StartT, _StopT, _StepT]): @property def stop(self) -> _StopT: ... @overload - def __new__(cls, stop: _T2, /) -> slice[None, _T2, None]: ... + def __new__(cls, stop: _T2, /) -> slice[Any | None, _T2, Any | None]: ... @overload - def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, None]: ... + def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, Any | None]: ... @overload def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ... def __eq__(self, value: object, /) -> bool: ... From bb9252ff86308f55fe3646931c7cc3bbafde53af Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 24 Oct 2024 13:07:01 +0100 Subject: [PATCH 08/10] `Any` it is... --- stdlib/builtins.pyi | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index d685ddb1c6a5..09d8a9a51f48 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -9,6 +9,7 @@ from _typeshed import ( ConvertibleToFloat, ConvertibleToInt, FileDescriptorOrPath, + MaybeNone, OpenBinaryMode, OpenBinaryModeReading, OpenBinaryModeUpdating, @@ -94,9 +95,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 = TypeVar("_StartT", covariant=True, default=MaybeNone) +_StopT = TypeVar("_StopT", covariant=True, default=MaybeNone) +_StepT = TypeVar("_StepT", covariant=True, default=MaybeNone) class object: __doc__: str | None @@ -947,9 +948,9 @@ class slice(Generic[_StartT, _StopT, _StepT]): @property def stop(self) -> _StopT: ... @overload - def __new__(cls, stop: _T2, /) -> slice[Any | None, _T2, Any | None]: ... + def __new__(cls, stop: _T2, /) -> slice[MaybeNone, _T2, MaybeNone]: ... @overload - def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, Any | None]: ... + def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, MaybeNone]: ... @overload def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ... def __eq__(self, value: object, /) -> bool: ... From b98c8fade02ed08d98f975c3cc2d9c35b4e24483 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 24 Oct 2024 13:54:18 +0100 Subject: [PATCH 09/10] There's no problem in this universe that cannot be fixed by adding more overloads --- stdlib/builtins.pyi | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 09d8a9a51f48..85e6004debb6 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -95,9 +95,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=MaybeNone) -_StopT = TypeVar("_StopT", covariant=True, default=MaybeNone) -_StepT = TypeVar("_StepT", covariant=True, default=MaybeNone) +_StartT = TypeVar("_StartT", covariant=True, default=int | MaybeNone) +_StopT = TypeVar("_StopT", covariant=True, default=int | MaybeNone) +_StepT = TypeVar("_StepT", covariant=True, default=int | MaybeNone) class object: __doc__: str | None @@ -948,9 +948,15 @@ class slice(Generic[_StartT, _StopT, _StepT]): @property def stop(self) -> _StopT: ... @overload - def __new__(cls, stop: _T2, /) -> slice[MaybeNone, _T2, MaybeNone]: ... + def __new__(cls, stop: int | None) -> slice[int | MaybeNone, int | MaybeNone, int | MaybeNone]: ... @overload - def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, MaybeNone]: ... + 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 __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ... def __eq__(self, value: object, /) -> bool: ... From c0fe293499293c9d033c1b3d36bd32af71a41ac1 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Thu, 24 Oct 2024 14:05:54 +0100 Subject: [PATCH 10/10] more Any again --- stdlib/builtins.pyi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 85e6004debb6..ce0ea609e8f0 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -95,9 +95,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=int | MaybeNone) -_StopT = TypeVar("_StopT", covariant=True, default=int | MaybeNone) -_StepT = TypeVar("_StepT", covariant=True, default=int | MaybeNone) +_StartT = TypeVar("_StartT", covariant=True, default=Any) +_StopT = TypeVar("_StopT", covariant=True, default=Any) +_StepT = TypeVar("_StepT", covariant=True, default=Any) class object: __doc__: str | None