-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed
Closed
Copy link
Labels
Description
Bug report
Bug description:
Discussed in microsoft/pyright#9343 @JelleZijlstra asked me to open this issue.
I'm writing classes using variadic generic code and as a minimal example I have the below code which raises no type errors on pyright playground and is crashing at runtime which I believe is a bug in cpython. The code:
from __future__ import annotations
from typing import Unpack, assert_type, TypeAlias
type FooArgT = tuple[str, str]
# deprecated but works at runtime
FooArgAliasT: TypeAlias = tuple[str, str]
class Foo[*Arg]:
pass
type FooT = Foo[str, *FooArgT]
type FooUT = Foo[str, Unpack[FooArgT]]
class BarAU(Foo[str, *FooArgAliasT]):
pass
class BarU(Foo[str, Unpack[FooArgT]]):
pass
def foo_fn(t_arg: FooT, ut_arg: FooUT):
assert_type(t_arg, FooT)
assert_type(t_arg, FooUT)
assert_type(t_arg, Foo[str, Unpack[FooArgT]])
assert_type(t_arg, Foo[str, *FooArgT])
assert_type(ut_arg, FooT)
assert_type(ut_arg, FooUT)
assert_type(ut_arg, Foo[str, Unpack[FooArgT]])
assert_type(ut_arg, Foo[str, *FooArgT])
class Bar(Foo[str, *FooArgT]):
pass
When I run this locally I get
Traceback (most recent call last):
File "...", line 31, in <module>
class Bar(Foo[str, *FooArgT]):
^^^^^^^^^^^^^
TypeError: Value after * must be an iterable, not typing.TypeAliasType
By my understanding, the 3 class declarations are equivalent, pyright checks pass and from my understanding of the documentation cpython should allow unpacking of the aliased TypeVarTuple.
I'm running python3.13.0 in wsl installed using pyenv, output of python -V -V
Python 3.13.0 (main, Oct 24 2024, 00:12:39) [GCC 11.4.0]
CPython versions tested on:
3.13
3.14
Operating systems tested on:
Linux