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)

Đang mở
#22,018 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

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
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
compilers, devtools

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ả

bug

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

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python/mypy

Tất cả issue của python/mypy

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.