From 0dfbde9072561d60734eb15a5a7bc3359b5d4765 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Sun, 3 Sep 2023 10:47:49 +0100 Subject: [PATCH 01/18] Fix typing of reversed --- stdlib/builtins.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 71cccee16e1a..84c082e3b881 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -1744,9 +1744,9 @@ def quit(code: sys._ExitCode = None) -> NoReturn: ... class reversed(Iterator[_T], Generic[_T]): @overload - def __init__(self, __sequence: Reversible[_T]) -> None: ... + def __new__(self, __sequence: Reversible[_T]) -> Iterator[_T]: ... @overload - def __init__(self, __sequence: SupportsLenAndGetItem[_T]) -> None: ... + def __new__(self, __sequence: SupportsLenAndGetItem[_T]) -> reversed[_T]: ... def __iter__(self) -> Self: ... def __next__(self) -> _T: ... def __length_hint__(self) -> int: ... From b0e754ffc0963c3e02752abb4676d29e00c50b5b Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Sun, 3 Sep 2023 11:01:04 +0100 Subject: [PATCH 02/18] Ignore errors --- stdlib/builtins.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 84c082e3b881..b3230d716af7 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -1744,9 +1744,9 @@ def quit(code: sys._ExitCode = None) -> NoReturn: ... class reversed(Iterator[_T], Generic[_T]): @overload - def __new__(self, __sequence: Reversible[_T]) -> Iterator[_T]: ... + def __new__(self, __sequence: Reversible[_T]) -> Iterator[_T]: ... # type: ignore[misc] @overload - def __new__(self, __sequence: SupportsLenAndGetItem[_T]) -> reversed[_T]: ... + def __new__(self, __sequence: SupportsLenAndGetItem[_T]) -> Iterator[_T]: ... # type: ignore[misc] def __iter__(self) -> Self: ... def __next__(self) -> _T: ... def __length_hint__(self) -> int: ... From 406c07b0145db163f5ddae2b0cfe32236a9b1720 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Mon, 4 Sep 2023 08:02:50 +0100 Subject: [PATCH 03/18] Replace self with cls --- stdlib/builtins.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index b3230d716af7..c286f305f4a4 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -1744,9 +1744,9 @@ def quit(code: sys._ExitCode = None) -> NoReturn: ... class reversed(Iterator[_T], Generic[_T]): @overload - def __new__(self, __sequence: Reversible[_T]) -> Iterator[_T]: ... # type: ignore[misc] + def __new__(cls, __sequence: Reversible[_T]) -> Iterator[_T]: ... # type: ignore[misc] @overload - def __new__(self, __sequence: SupportsLenAndGetItem[_T]) -> Iterator[_T]: ... # type: ignore[misc] + def __new__(cls, __sequence: SupportsLenAndGetItem[_T]) -> Iterator[_T]: ... # type: ignore[misc] def __iter__(self) -> Self: ... def __next__(self) -> _T: ... def __length_hint__(self) -> int: ... From 64cbf71e5c78af389373f46adc28dc629c8ba4bc Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:29:04 +0100 Subject: [PATCH 04/18] Create test_reversed.py --- test_cases/stdlib/builtins/test_reversed.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test_cases/stdlib/builtins/test_reversed.py diff --git a/test_cases/stdlib/builtins/test_reversed.py b/test_cases/stdlib/builtins/test_reversed.py new file mode 100644 index 000000000000..ff26f3e5c05e --- /dev/null +++ b/test_cases/stdlib/builtins/test_reversed.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from typing_extensions import assert_type + +x : list[int] = [] +assert_type(list(reversed(x)), list[int]) + +iterator = iter(x) +assert_type(list(reversed(iterator)), list[int]) + +class LenAndGetItem: + def __len__(self): + return 0 + def __getitem__(self, item: int) -> int: + raise KeyError + +len_and_get_item = LenAndGetItem() +assert_type(list(reversed(len_and_get_item), list[int]) From 2abadcb5a6cfa5d14c4a96097b9b64385345de17 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:30:04 +0100 Subject: [PATCH 05/18] Rename test_reversed.py to check_reversed.py --- .../stdlib/builtins/{test_reversed.py => check_reversed.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test_cases/stdlib/builtins/{test_reversed.py => check_reversed.py} (100%) diff --git a/test_cases/stdlib/builtins/test_reversed.py b/test_cases/stdlib/builtins/check_reversed.py similarity index 100% rename from test_cases/stdlib/builtins/test_reversed.py rename to test_cases/stdlib/builtins/check_reversed.py From 884d429fecff210c7fcbe606e9e22fe18cc9b41d Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:31:37 +0100 Subject: [PATCH 06/18] Update check_reversed.py Fix missing bracket --- test_cases/stdlib/builtins/check_reversed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index ff26f3e5c05e..dd482f2b87d6 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -15,4 +15,4 @@ def __getitem__(self, item: int) -> int: raise KeyError len_and_get_item = LenAndGetItem() -assert_type(list(reversed(len_and_get_item), list[int]) +assert_type(list(reversed(len_and_get_item)), list[int]) From e475f467f0b408754baae4e320d3ea5a2e59a08e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 14:32:17 +0000 Subject: [PATCH 07/18] [pre-commit.ci] auto fixes from pre-commit.com hooks --- test_cases/stdlib/builtins/check_reversed.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index dd482f2b87d6..8a86fdad734f 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -2,17 +2,20 @@ from typing_extensions import assert_type -x : list[int] = [] +x: list[int] = [] assert_type(list(reversed(x)), list[int]) iterator = iter(x) assert_type(list(reversed(iterator)), list[int]) + class LenAndGetItem: def __len__(self): return 0 + def __getitem__(self, item: int) -> int: raise KeyError + len_and_get_item = LenAndGetItem() assert_type(list(reversed(len_and_get_item)), list[int]) From 79e15c92ad936ecb75b786e0c3bf338a301fcaed Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:44:18 +0100 Subject: [PATCH 08/18] Add more checks --- test_cases/stdlib/builtins/check_reversed.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 8a86fdad734f..4cc0eeb4138a 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -1,5 +1,6 @@ from __future__ import annotations +from typing import Generic, TypeVar from typing_extensions import assert_type x: list[int] = [] @@ -8,14 +9,20 @@ iterator = iter(x) assert_type(list(reversed(iterator)), list[int]) +class MyIterable: + def __iter__(self): + yield "blah" +assert_type(list(reversed(MyIterable())), list[str]) -class LenAndGetItem: +_T = TypeVar('T') + +class MyLenAndGetItem(Generic[_T]): def __len__(self): return 0 - def __getitem__(self, item: int) -> int: + def __getitem__(self, item: int) -> _T: raise KeyError -len_and_get_item = LenAndGetItem() +len_and_get_item: MyLenAndGetItem[int] = LenAndGetItem() assert_type(list(reversed(len_and_get_item)), list[int]) From 2aa3d06b00f9172381aff8d6f3a82221cdc72614 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:46:05 +0100 Subject: [PATCH 09/18] Fix a typo --- test_cases/stdlib/builtins/check_reversed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 4cc0eeb4138a..6dbb027816c0 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -24,5 +24,5 @@ def __getitem__(self, item: int) -> _T: raise KeyError -len_and_get_item: MyLenAndGetItem[int] = LenAndGetItem() +len_and_get_item: MyLenAndGetItem[int] = MyLenAndGetItem() assert_type(list(reversed(len_and_get_item)), list[int]) From d2d53189925629a9ed489d9510dbd83b1ab76a50 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 14:47:24 +0000 Subject: [PATCH 10/18] [pre-commit.ci] auto fixes from pre-commit.com hooks --- test_cases/stdlib/builtins/check_reversed.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 6dbb027816c0..3a20e2da7391 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -9,12 +9,16 @@ iterator = iter(x) assert_type(list(reversed(iterator)), list[int]) + class MyIterable: def __iter__(self): yield "blah" + + assert_type(list(reversed(MyIterable())), list[str]) -_T = TypeVar('T') +_T = TypeVar("T") + class MyLenAndGetItem(Generic[_T]): def __len__(self): From 662d99c38a6a9a9aefa42c33284be16893d73ac2 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:48:21 +0100 Subject: [PATCH 11/18] Correct name of typevar --- test_cases/stdlib/builtins/check_reversed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 3a20e2da7391..5cdf236daaab 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -17,7 +17,7 @@ def __iter__(self): assert_type(list(reversed(MyIterable())), list[str]) -_T = TypeVar("T") +_T = TypeVar("_T") class MyLenAndGetItem(Generic[_T]): From f71738718728672a8a61da61b48878e3794a4683 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:56:38 +0100 Subject: [PATCH 12/18] Replace iterable with reversible --- test_cases/stdlib/builtins/check_reversed.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 5cdf236daaab..a75f1e6582b8 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -6,16 +6,14 @@ x: list[int] = [] assert_type(list(reversed(x)), list[int]) -iterator = iter(x) -assert_type(list(reversed(iterator)), list[int]) - -class MyIterable: - def __iter__(self): +class MyReversible: + def __reversed__(self): yield "blah" -assert_type(list(reversed(MyIterable())), list[str]) +assert_type(list(reversed(MyReversible())), list[str]) + _T = TypeVar("_T") From 25217471a72d7f93c9c16e2d76a5cfdb957f3dc1 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:03:53 +0100 Subject: [PATCH 13/18] Fix myreversible class --- test_cases/stdlib/builtins/check_reversed.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index a75f1e6582b8..29117c64609a 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -1,5 +1,6 @@ from __future__ import annotations +from collections.abc import Iterator from typing import Generic, TypeVar from typing_extensions import assert_type @@ -8,7 +9,10 @@ class MyReversible: - def __reversed__(self): + def __iter__(self) -> Iterator[str]: + yield "blah" + + def __reversed__(self) -> Iterator[str]: yield "blah" From e7a86d78260c19180ebfbe83be7f0ce263886510 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:06:29 +0000 Subject: [PATCH 14/18] [pre-commit.ci] auto fixes from pre-commit.com hooks --- test_cases/stdlib/builtins/check_reversed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 29117c64609a..2001e2d2ee86 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -11,7 +11,7 @@ class MyReversible: def __iter__(self) -> Iterator[str]: yield "blah" - + def __reversed__(self) -> Iterator[str]: yield "blah" From b9656115388a43272edb065fd1f969b3e03ddb47 Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:12:57 +0100 Subject: [PATCH 15/18] Put list[..] in quotes --- test_cases/stdlib/builtins/check_reversed.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 2001e2d2ee86..3d6ee2e128d1 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -5,7 +5,7 @@ from typing_extensions import assert_type x: list[int] = [] -assert_type(list(reversed(x)), list[int]) +assert_type(list(reversed(x)), "list[int]") class MyReversible: @@ -16,7 +16,7 @@ def __reversed__(self) -> Iterator[str]: yield "blah" -assert_type(list(reversed(MyReversible())), list[str]) +assert_type(list(reversed(MyReversible())), "list[str]") _T = TypeVar("_T") @@ -31,4 +31,4 @@ def __getitem__(self, item: int) -> _T: len_and_get_item: MyLenAndGetItem[int] = MyLenAndGetItem() -assert_type(list(reversed(len_and_get_item)), list[int]) +assert_type(list(reversed(len_and_get_item)), "list[int]") From a5c06b3543f78a3b49940e12b0308b8c7f822d6e Mon Sep 17 00:00:00 2001 From: plokmijnuhby <39633434+plokmijnuhby@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:19:24 +0100 Subject: [PATCH 16/18] Add annotation to __len__ --- test_cases/stdlib/builtins/check_reversed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 3d6ee2e128d1..2a43a57deb4e 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -23,7 +23,7 @@ def __reversed__(self) -> Iterator[str]: class MyLenAndGetItem(Generic[_T]): - def __len__(self): + def __len__(self) -> int: return 0 def __getitem__(self, item: int) -> _T: From 593e7dfe0789423fbdaaf785fd24e4ab11e2ecea Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 16 Feb 2024 06:32:07 -0800 Subject: [PATCH 17/18] Update test_cases/stdlib/builtins/check_reversed.py --- test_cases/stdlib/builtins/check_reversed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 2a43a57deb4e..484aa72d499a 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -9,8 +9,8 @@ class MyReversible: - def __iter__(self) -> Iterator[str]: - yield "blah" + def __iter__(self) -> Iterator[int]: + yield 1 def __reversed__(self) -> Iterator[str]: yield "blah" From eb66889ec3942a9c78bd61c2e1031b9465975a89 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 16 Feb 2024 06:36:58 -0800 Subject: [PATCH 18/18] Update test_cases/stdlib/builtins/check_reversed.py --- test_cases/stdlib/builtins/check_reversed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_cases/stdlib/builtins/check_reversed.py b/test_cases/stdlib/builtins/check_reversed.py index 484aa72d499a..2a43a57deb4e 100644 --- a/test_cases/stdlib/builtins/check_reversed.py +++ b/test_cases/stdlib/builtins/check_reversed.py @@ -9,8 +9,8 @@ class MyReversible: - def __iter__(self) -> Iterator[int]: - yield 1 + def __iter__(self) -> Iterator[str]: + yield "blah" def __reversed__(self) -> Iterator[str]: yield "blah"