@@ -2571,7 +2571,7 @@ def _unpack_args(*args):
25712571 return newargs
25722572
25732573
2574- if _PEP_696_IMPLEMENTED :
2574+ if sys . version_info >= ( 3 , 15 ) :
25752575 from typing import TypeVarTuple
25762576
25772577elif hasattr (typing , "TypeVarTuple" ): # 3.11+
@@ -2585,20 +2585,18 @@ class TypeVarTuple(metaclass=_TypeVarLikeMeta):
25852585 def __new__ (cls , name , * , bound = None ,
25862586 covariant = False , contravariant = False ,
25872587 infer_variance = False , default = NoDefault ):
2588- if sys .version_info >= (3 , 15 ):
2589- # can pass variance arguments to typing.TypeVar
2590- tvt = typing .TypeVarTuple (name , bound = bound ,
2591- covariant = covariant ,
2592- contravariant = contravariant ,
2593- infer_variance = infer_variance ,
2594- default = default )
2588+
2589+ if _PEP_696_IMPLEMENTED :
2590+ # can pass default argument
2591+ tvt = typing .TypeVarTuple (name , default = default )
25952592 else :
25962593 tvt = typing .TypeVarTuple (name )
2597- tvt .__covariant__ = covariant
2598- tvt .__contravariant__ = contravariant
2599- tvt .__infer_variance__ = infer_variance
26002594 _set_default (tvt , default )
26012595
2596+ tvt .__covariant__ = covariant
2597+ tvt .__contravariant__ = contravariant
2598+ tvt .__infer_variance__ = infer_variance
2599+
26022600 _set_module (tvt )
26032601
26042602 def _typevartuple_prepare_subst (alias , args ):
@@ -2703,8 +2701,16 @@ def get_shape(self) -> Tuple[*Ts]:
27032701 def __iter__ (self ):
27042702 yield self .__unpacked__
27052703
2706- def __init__ (self , name , * , default = NoDefault ):
2704+ def __init__ (self , name , * , bound = None , covariant = False , contravariant = False ,
2705+ infer_variance = False , default = NoDefault ):
27072706 self .__name__ = name
2707+ self .__covariant__ = bool (covariant )
2708+ self .__contravariant__ = bool (contravariant )
2709+ self .__infer_variance__ = bool (infer_variance )
2710+ if bound :
2711+ self .__bound__ = typing ._type_check (bound , 'Bound must be a type.' )
2712+ else :
2713+ self .__bound__ = None
27082714 _DefaultMixin .__init__ (self , default )
27092715
27102716 # for pickling:
@@ -2715,7 +2721,15 @@ def __init__(self, name, *, default=NoDefault):
27152721 self .__unpacked__ = Unpack [self ]
27162722
27172723 def __repr__ (self ):
2718- return self .__name__
2724+ if self .__infer_variance__ :
2725+ prefix = ''
2726+ elif self .__covariant__ :
2727+ prefix = '+'
2728+ elif self .__contravariant__ :
2729+ prefix = '-'
2730+ else :
2731+ prefix = '~'
2732+ return prefix + self .__name__
27192733
27202734 def __hash__ (self ):
27212735 return object .__hash__ (self )
0 commit comments