Skip to content

Commit 7d45019

Browse files
committed
fixup! add bound/variance parameters to TypeVarTuple
1 parent 7ece722 commit 7d45019

1 file changed

Lines changed: 27 additions & 13 deletions

File tree

src/typing_extensions.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

25772577
elif 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

Comments
 (0)