@@ -5779,6 +5779,47 @@ class D(Protocol[T1, T2, Unpack[Ts]]): pass
57795779 with self .assertRaises (TypeError ):
57805780 klass [int ]
57815781
5782+ def test_substitution (self ):
5783+ Ts = TypeVarTuple ("Ts" )
5784+ unpacked_str = Unpack [Ts ][str ] # This should not raise an error
5785+ self .assertIs (unpacked_str , str )
5786+
5787+ @skipUnless (TYPING_3_11_0 , "Needs Issue #103 for <3.11" )
5788+ def test_nested_unpack (self ):
5789+ Ts = TypeVarTuple ("Ts" )
5790+ Variadic = Tuple [int , Unpack [Ts ]]
5791+ # Tuple[int, int, Tuple[str, int]]
5792+ direct_subscription = Variadic [int , Tuple [str , int ]]
5793+ # Tuple[int, int, Tuple[*Ts, int]]
5794+ TupleAliasTs = Variadic [int , Tuple [Unpack [Ts ], int ]]
5795+
5796+ # Tuple[int, int, Tuple[str, int]]
5797+ recursive_unpack = TupleAliasTs [str ]
5798+ self .assertEqual (direct_subscription , recursive_unpack )
5799+ self .assertEqual (get_args (recursive_unpack ), (int , int , Tuple [str , int ]))
5800+
5801+ # Test with Callable
5802+ T = TypeVar ("T" )
5803+ # Tuple[int, (*Ts) -> T]
5804+ CallableAliasTsT = Variadic [Callable [[Unpack [Ts ]], T ]]
5805+ # Tuple[int, (str, int) -> object]
5806+ callable_fully_subscripted = CallableAliasTsT [Unpack [Tuple [str , int ]], object ]
5807+ self .assertEqual (get_args (callable_fully_subscripted ), (int , Callable [[str , int ], object ]))
5808+
5809+ @skipUnless (TYPING_3_11_0 , "Needs Issue #103 for <3.11" )
5810+ def test_equivalent_nested_variadics (self ):
5811+ T = TypeVar ("T" )
5812+ Ts = TypeVarTuple ("Ts" )
5813+ Variadic = Tuple [int , Unpack [Ts ]]
5814+ TupleAliasTsT = Variadic [Tuple [Unpack [Ts ], T ]]
5815+ nested_tuple_bare = TupleAliasTsT [str , int , object ]
5816+
5817+ self .assertEqual (get_args (nested_tuple_bare ), (int , Tuple [str , int , object ]))
5818+ # Variants
5819+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int , object ]]])
5820+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int ]], object ])
5821+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str ]], Unpack [Tuple [int ]], object ])
5822+
57825823
57835824class TypeVarTupleTests (BaseTestCase ):
57845825
0 commit comments