@@ -5873,6 +5873,77 @@ def test_subst(self):
58735873 with self .assertRaises (TypeError ):
58745874 LI [None ]
58755875
5876+ def test_typevar_subst (self ):
5877+ dec = "a decoration"
5878+ Ts = TypeVarTuple ('Ts' )
5879+ T = TypeVar ('T' )
5880+ T1 = TypeVar ('T1' )
5881+ T2 = TypeVar ('T2' )
5882+
5883+ A = Annotated [Tuple [Unpack [Ts ]], dec ]
5884+ self .assertEqual (A [int ], Annotated [Tuple [int ], dec ])
5885+ self .assertEqual (A [str , int ], Annotated [Tuple [str , int ], dec ])
5886+ with self .assertRaises (TypeError ):
5887+ Annotated [Unpack [Ts ], dec ]
5888+
5889+ B = Annotated [Tuple [T , Unpack [Ts ]], dec ]
5890+ self .assertEqual (B [int ], Annotated [Tuple [int ], dec ])
5891+ self .assertEqual (B [int , str ], Annotated [Tuple [int , str ], dec ])
5892+ self .assertEqual (
5893+ B [int , str , float ],
5894+ Annotated [Tuple [int , str , float ], dec ]
5895+ )
5896+ with self .assertRaises (TypeError ):
5897+ B [()]
5898+
5899+ C = Annotated [Tuple [Unpack [Ts ], T ], dec ]
5900+ self .assertEqual (C [int ], Annotated [Tuple [int ], dec ])
5901+ self .assertEqual (C [int , str ], Annotated [Tuple [int , str ], dec ])
5902+ self .assertEqual (
5903+ C [int , str , float ],
5904+ Annotated [Tuple [int , str , float ], dec ]
5905+ )
5906+ with self .assertRaises (TypeError ):
5907+ C [()]
5908+
5909+ D = Annotated [Tuple [T1 , Unpack [Ts ], T2 ], dec ]
5910+ self .assertEqual (D [int , str ], Annotated [Tuple [int , str ], dec ])
5911+ self .assertEqual (
5912+ D [int , str , float ],
5913+ Annotated [Tuple [int , str , float ], dec ]
5914+ )
5915+ self .assertEqual (
5916+ D [int , str , bool , float ],
5917+ Annotated [Tuple [int , str , bool , float ], dec ]
5918+ )
5919+ with self .assertRaises (TypeError ):
5920+ D [int ]
5921+
5922+ # Now let's try creating an alias from an alias.
5923+
5924+ Ts2 = TypeVarTuple ('Ts2' )
5925+ T3 = TypeVar ('T3' )
5926+ T4 = TypeVar ('T4' )
5927+
5928+ E = D [T3 , Unpack [Ts2 ], T4 ]
5929+ self .assertEqual (
5930+ E ,
5931+ Annotated [Tuple [T3 , Unpack [Ts2 ], T4 ], dec ]
5932+ )
5933+ self .assertEqual (
5934+ E [int , str ], Annotated [Tuple [int , str ], dec ]
5935+ )
5936+ self .assertEqual (
5937+ E [int , str , float ],
5938+ Annotated [Tuple [int , str , float ], dec ]
5939+ )
5940+ self .assertEqual (
5941+ E [int , str , bool , float ],
5942+ Annotated [Tuple [int , str , bool , float ], dec ]
5943+ )
5944+ with self .assertRaises (TypeError ):
5945+ E [int ]
5946+
58765947 def test_annotated_in_other_types (self ):
58775948 X = List [Annotated [T , 5 ]]
58785949 self .assertEqual (X [int ], List [Annotated [int , 5 ]])
0 commit comments