@@ -5781,40 +5781,45 @@ class D(Protocol[T1, T2, Unpack[Ts]]): pass
57815781
57825782 def test_substitution (self ):
57835783 Ts = TypeVarTuple ("Ts" )
5784- unpacked_str = Unpack [Ts ][str ]
5785- with self .subTest ("Check substitution result" ):
5786- self .assertIs (unpacked_str , str )
5784+ unpacked_str = Unpack [Ts ][str ] # This should not raise an error
5785+ self .assertIs (unpacked_str , str )
57875786
57885787 @skipUnless (TYPING_3_11_0 , "Needs Issue #103 for <3.11" )
57895788 def test_nested_unpack (self ):
5790- T = TypeVar ('T' )
57915789 Ts = TypeVarTuple ("Ts" )
57925790 Variadic = Tuple [int , Unpack [Ts ]]
57935791 # Tuple[int, int, Tuple[str, int]]
57945792 direct_subscription = Variadic [int , Tuple [str , int ]]
57955793 # Tuple[int, int, Tuple[*Ts, int]]
57965794 TupleAliasTs = Variadic [int , Tuple [Unpack [Ts ], int ]]
57975795
5798- # if this fails all below are likely to fail too
57995796 # Tuple[int, int, Tuple[str, int]]
58005797 recursive_unpack = TupleAliasTs [str ]
58015798 self .assertEqual (direct_subscription , recursive_unpack )
58025799 self .assertEqual (get_args (recursive_unpack ), (int , int , Tuple [str , int ]))
58035800
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 ]]
58045814 TupleAliasTsT = Variadic [Tuple [Unpack [Ts ], T ]]
5805- # Equivalent Forms
5806- with self .subTest ("Equivalence of variadic arguments" ):
5807- nested_tuple_bare = TupleAliasTsT [str , int , object ]
5808- self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int , object ]]])
5809- self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str , int ]], object ])
5810- self .assertEqual (nested_tuple_bare , TupleAliasTsT [Unpack [Tuple [str ]], Unpack [Tuple [int ]], object ])
5811- self .assertEqual (get_args (nested_tuple_bare ), (int , Tuple [str , int , object ],))
5812-
5813- with self .subTest ("With Callable and Unpack" ):
5814- # Tuple[int, (str, int) -> object]
5815- CallableAliasTsT = Variadic [Callable [[Unpack [Ts ]], T ]]
5816- callable_fully_subscripted = CallableAliasTsT [Unpack [Tuple [str , int ]], object ]
5817- self .assertEqual (get_args (callable_fully_subscripted ), (int , Callable [[str , int ], object ],))
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+
58185823
58195824class TypeVarTupleTests (BaseTestCase ):
58205825
0 commit comments