@@ -5779,6 +5779,49 @@ 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 ]
5785+ with self .subTest ("Check full unpack" ):
5786+ self .assertIs (unpacked_str , str )
5787+
5788+ @skipUnless (TYPING_3_11_0 , "Needs Issue #103 first" )
5789+ def test_nested_unpack (self ):
5790+ T = TypeVar ('T' )
5791+ Ts = TypeVarTuple ("Ts" )
5792+ Variadic = TypeAliasType ("Variadic" , Tuple [int , Unpack [Ts ]], type_params = (Ts ,))
5793+ Variadic [int , Tuple [str , int ]]
5794+
5795+ TupleAliasTs = Variadic [Tuple [Unpack [Ts ], int ]]
5796+
5797+ # if this fails all below are likely to fail too
5798+ # Tuple[int, Tuple[str, int]]
5799+ TupleAliasTs [str ]
5800+
5801+ TupleAliasTsT = Variadic [Tuple [Unpack [Ts ], T ]]
5802+ with self .subTest ("Single parameter for tuple alias" ):
5803+ # Tuple[int, Tuple[str, object]]
5804+ nested_tuple_A = TupleAliasTsT [str , object ]
5805+ nested_tuple_A_unpack = TupleAliasTsT [Unpack [Tuple [str ]], object ]
5806+ self .assertEqual (nested_tuple_A , nested_tuple_A_unpack )
5807+
5808+ with self .subTest ("Test invalid args" , args = ([str , int ], object )):
5809+ # TypeError on some versions as types should be passed
5810+ invalid_nested_tuple = TupleAliasTsT [[str , int ], object ] # invalid form
5811+ with self .subTest ("With Callable Ts" ):
5812+ # Tuple[int, (str, int) -> object]
5813+ CallableAliasTsT = Variadic [Callable [[Unpack [Ts ]], T ]]
5814+ CallableAliasTsT [[str , int ], object ] # valid nested tuple
5815+
5816+ # Equivalent Forms
5817+ with self .subTest ("Equivalence of variadic arguments" ):
5818+ nested_tuple_bare = TupleAliasTsT [str , int , object ]
5819+ nested_tuple_B_1xUnpack = TupleAliasTsT [Unpack [Tuple [str , int ]], object ]
5820+ nested_tuple_B_2xUnpack = TupleAliasTsT [Unpack [Tuple [str ]], Unpack [Tuple [int ]], object ]
5821+ self .assertEqual (nested_tuple_B_1xUnpack , nested_tuple_bare )
5822+ self .assertEqual (nested_tuple_B_1xUnpack , nested_tuple_B_2xUnpack )
5823+ self .assertNotEqual (invalid_nested_tuple , nested_tuple_B_1xUnpack )
5824+
57825825
57835826class TypeVarTupleTests (BaseTestCase ):
57845827
0 commit comments