@@ -6402,6 +6402,34 @@ def test_typevartuple(self):
6402
6402
class A (Generic [Unpack [Ts ]]): ...
6403
6403
Alias = Optional [Unpack [Ts ]]
6404
6404
6405
+ @skipIf (
6406
+ sys .version_info < (3 , 11 , 1 ),
6407
+ "Not yet backported for older versions of Python"
6408
+ )
6409
+ def test_typevartuple_specialization (self ):
6410
+ T = TypeVar ("T" )
6411
+ Ts = TypeVarTuple ('Ts' , default = Unpack [Tuple [str , int ]])
6412
+ self .assertEqual (Ts .__default__ , Unpack [Tuple [str , int ]])
6413
+ class A (Generic [T , Unpack [Ts ]]): ...
6414
+ self .assertEqual (A [float ].__args__ , (float , str , int ))
6415
+ self .assertEqual (A [float , range ].__args__ , (float , range ))
6416
+ self .assertEqual (A [float , Unpack [tuple [int , ...]]].__args__ , (float , Unpack [tuple [int , ...]]))
6417
+
6418
+ @skipIf (
6419
+ sys .version_info < (3 , 11 , 1 ),
6420
+ "Not yet backported for older versions of Python"
6421
+ )
6422
+ def test_typevar_and_typevartuple_specialization (self ):
6423
+ T = TypeVar ("T" )
6424
+ U = TypeVar ("U" , default = float )
6425
+ Ts = TypeVarTuple ('Ts' , default = Unpack [Tuple [str , int ]])
6426
+ self .assertEqual (Ts .__default__ , Unpack [Tuple [str , int ]])
6427
+ class A (Generic [T , U , Unpack [Ts ]]): ...
6428
+ self .assertEqual (A [int ].__args__ , (int , float , str , int ))
6429
+ self .assertEqual (A [int , str ].__args__ , (int , str , str , int ))
6430
+ self .assertEqual (A [int , str , range ].__args__ , (int , str , range ))
6431
+ self .assertEqual (A [int , str , Unpack [tuple [int , ...]]].__args__ , (int , str , Unpack [tuple [int , ...]]))
6432
+
6405
6433
def test_no_default_after_typevar_tuple (self ):
6406
6434
T = TypeVar ("T" , default = int )
6407
6435
Ts = TypeVarTuple ("Ts" )
@@ -6487,6 +6515,46 @@ def test_allow_default_after_non_default_in_alias(self):
6487
6515
a4 = Callable [[Unpack [Ts ]], T ]
6488
6516
self .assertEqual (a4 .__args__ , (Unpack [Ts ], T ))
6489
6517
6518
+ @skipIf (
6519
+ sys .version_info < (3 , 11 , 1 ),
6520
+ "Not yet backported for older versions of Python"
6521
+ )
6522
+ def test_paramspec_specialization (self ):
6523
+ T = TypeVar ("T" )
6524
+ P = ParamSpec ('P' , default = [str , int ])
6525
+ self .assertEqual (P .__default__ , [str , int ])
6526
+ class A (Generic [T , P ]): ...
6527
+ self .assertEqual (A [float ].__args__ , (float , (str , int )))
6528
+ self .assertEqual (A [float , [range ]].__args__ , (float , (range ,)))
6529
+
6530
+ @skipIf (
6531
+ sys .version_info < (3 , 11 , 1 ),
6532
+ "Not yet backported for older versions of Python"
6533
+ )
6534
+ def test_typevar_and_paramspec_specialization (self ):
6535
+ T = TypeVar ("T" )
6536
+ U = TypeVar ("U" , default = float )
6537
+ P = ParamSpec ('P' , default = [str , int ])
6538
+ self .assertEqual (P .__default__ , [str , int ])
6539
+ class A (Generic [T , U , P ]): ...
6540
+ self .assertEqual (A [float ].__args__ , (float , float , (str , int )))
6541
+ self .assertEqual (A [float , int ].__args__ , (float , int , (str , int )))
6542
+ self .assertEqual (A [float , int , [range ]].__args__ , (float , int , (range ,)))
6543
+
6544
+ @skipIf (
6545
+ sys .version_info < (3 , 11 , 1 ),
6546
+ "Not yet backported for older versions of Python"
6547
+ )
6548
+ def test_paramspec_and_typevar_specialization (self ):
6549
+ T = TypeVar ("T" )
6550
+ P = ParamSpec ('P' , default = [str , int ])
6551
+ U = TypeVar ("U" , default = float )
6552
+ self .assertEqual (P .__default__ , [str , int ])
6553
+ class A (Generic [T , P , U ]): ...
6554
+ self .assertEqual (A [float ].__args__ , (float , (str , int ), float ))
6555
+ self .assertEqual (A [float , [range ]].__args__ , (float , (range ,), float ))
6556
+ self .assertEqual (A [float , [range ], int ].__args__ , (float , (range ,), int ))
6557
+
6490
6558
6491
6559
class NoDefaultTests (BaseTestCase ):
6492
6560
@skip_if_py313_beta_1
0 commit comments