Possible bug: `*tuple[int, *tuple[Any, ...]]` is not treated as unbounded like `*tuple[*tuple[Any, ...]]` is (and `*tuple[Any, ...]` by itself) (passes pyright 1.1.414 , pyrefly 1.3.1)
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 58/100
Hướng nghiên cứu
Start by running the f, f2, and f3 examples from the issue in the MyPy Playground and inspect how unpacked tuple types are matched. Compare the handling of *tuple[Any, ...] and *tuple[int, *tuple[Any, ...]] with the cited typing specification. Done means the intended unbounded behavior is confirmed or corrected, with regression coverage for the reported Tuple index out of range case.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Hello MyPy team!
I am seeing error: Tuple index out of range [misc] in a case where it seems inappropriate (and it passes pyright 1.1.414 , pyrefly 1.3.1), where MyPy appears to be handling unpacked unbounded type tuples inconsistently:
*tuple[int, *tuple[Any, ...]] is not treated as unbounded like *tuple[*tuple[Any, ...]] is (and *tuple[Any, ...] by itself).
In the following example (try it online in the MyPy Playground at https://mypy-play.net/?gist=0ce2970c7a6472603d696e130beeabcc ),
f and f2 pass, but f3 fails MyPy with error: Tuple index out of range [misc]:
# e.g. python 3.12, mypy 2.3.1
# passes pyright 1.1.414 , pyrefly 1.3.1
from typing import Any
# see https://peps.python.org/pep-0646/#unpacking-unbounded-tuple-types#:~:text=Note%20that%20Tuple
# this one is handled properly
def f(*args: *tuple[*tuple[Any, ...]]) -> None:
reveal_type(args[0]) # Any
reveal_type(args[1]) # Any
# this is also handled properly
def f2(*args: *tuple[int, *tuple[Any, int]]) -> None:
reveal_type(args[1]) # Any
# but *args is not recognized as unbounded here?
# there seems to be general support for such forms for some kinds of type matching recognizing the unboundedness, see e.g. the example at https://web.archive.org/web/20260918002706/https://typing.python.org/en/latest/spec/generics.html#:~:text=type%20and%20a%20part%20of%20an%20arbitrary-length%20tuple
def f3(*args: *tuple[int, *tuple[Any, ...]]) -> None:
reveal_type(args[1]) # error: `Tuple index out of range [misc]`, seems it should be recognized as unbounded like in f, why is this considered ambiguous?
Thanks in advance!
It is also fine just to confirm the expected behavior without promising any fix, I would be happy to write test cases and attempt a fix myself. I am trying to understand the intended behavior here in part to evaluate solutions to https://github.com/python/mypy/issues/21998 (my own and potentially others, e.g. see below).
cc/ @00200200 as the intended behavior here would affect their PR at https://github.com/python/mypy/pull/22002 .
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Merge trung bình
- 1 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 56
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python/mypy
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
bug topic-configuration topic-error-reporting
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Issue tương tự
-
documentation help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
simonw/sqlite-utils#872 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100