@@ -5868,6 +5868,47 @@ class D(Protocol[T1, T2, Unpack[Ts]]): pass
58685868 with self .assertRaises (TypeError ):
58695869 klass [int ]
58705870
5871+ def test_substitution (self ):
5872+ Ts = TypeVarTuple ("Ts" )
5873+ unpacked_str = Unpack [Ts ][str ] # This should not raise an error
5874+ self .assertIs (unpacked_str , str )
5875+
5876+ @skipUnless (TYPING_3_11_0 , "Needs Issue #103 for <3.11" )
5877+ def test_nested_unpack (self ):
5878+ Ts = TypeVarTuple ("Ts" )
5879+ Variadic = Tuple [int , Unpack [Ts ]]
5880+ # Tuple[int, int, Tuple[str, int]]
5881+ direct_subscription = Variadic [int , Tuple [str , int ]]
5882+ # Tuple[int, int, Tuple[*Ts, int]]
5883+ TupleAliasTs = Variadic [int , Tuple [Unpack [Ts ], int ]]
5884+
5885+ # Tuple[int, int, Tuple[str, int]]
5886+ recursive_unpack = TupleAliasTs [str ]
5887+ self .assertEqual (direct_subscription , recursive_unpack )
5888+ self .assertEqual (get_args (recursive_unpack ), (int , int , Tuple [str , int ]))
5889+
5890+ # Test with Callable
5891+ T = TypeVar ("T" )
5892+ # Tuple[int, (*Ts) -> T]
5893+ CallableAliasTsT = Variadic [Callable [[Unpack [Ts ]], T ]]
5894+ # Tuple[int, (str, int) -> object]
5895+ callable_fully_subscripted = CallableAliasTsT [Unpack [Tuple [str , int ]], object ]
5896+ self .assertEqual (get_args (callable_fully_subscripted ), (int , Callable [[str , int ], object ]))
5897+
5898+ @skipUnless (TYPING_3_11_0 , "Needs Issue #103 for <3.11" )
5899+ def test_equivalent_nested_variadics (self ):
5900+ T = TypeVar ("T" )
5901+ Ts = TypeVarTuple ("Ts" )
5902+ Variadic = Tuple [int , Unpack [Ts ]]
5903+ TupleAliasTsT = Variadic [Tuple [Unpack [Ts ], T ]]
5904+ nested_tuple_bare = TupleAliasTsT [str , int , object ]
5905+
5906+ self .assertEqual (get_args (nested_tuple_bare ), (int , Tuple [str , int , object ]))
5907+ # Variants
5908+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int , object ]]])
5909+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int ]], object ])
5910+ self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str ]], Unpack [Tuple [int ]], object ])
5911+
58715912
58725913class TypeVarTupleTests (BaseTestCase ):
58735914
0 commit comments