@@ -1795,28 +1795,52 @@ def __parameters__(self):
1795
1795
return tuple (
1796
1796
tp for tp in self .__args__ if isinstance (tp , (typing .TypeVar , ParamSpec ))
1797
1797
)
1798
+ # 3.10+
1799
+ else :
1800
+ _ConcatenateGenericAlias = typing ._ConcatenateGenericAlias
1798
1801
1802
+ # 3.10
1803
+ if sys .version_info < (3 , 11 ):
1804
+ _typing_ConcatenateGenericAlias = _ConcatenateGenericAlias
1799
1805
1800
- # 3.8-3.9
1806
+ class _ConcatenateGenericAlias (_typing_ConcatenateGenericAlias , _root = True ):
1807
+ # needed for checks in collections.abc.Callable to accept this class
1808
+ __module__ = "typing"
1809
+
1810
+ def copy_with (self , params ):
1811
+ if isinstance (params [- 1 ], (list , tuple )):
1812
+ return (* params [:- 1 ], * params [- 1 ])
1813
+ if isinstance (params [- 1 ], _ConcatenateGenericAlias ):
1814
+ params = (* params [:- 1 ], * params [- 1 ].__args__ )
1815
+ elif not (params [- 1 ] is ... or isinstance (params [- 1 ], ParamSpec )):
1816
+ raise TypeError ("The last parameter to Concatenate should be a "
1817
+ "ParamSpec variable or ellipsis." )
1818
+ return super (_typing_ConcatenateGenericAlias , self ).copy_with (params )
1819
+
1820
+
1821
+ # 3.8-3.10
1801
1822
@typing ._tp_cache
1802
1823
def _concatenate_getitem (self , parameters ):
1803
1824
if parameters == ():
1804
1825
raise TypeError ("Cannot take a Concatenate of no types." )
1805
1826
if not isinstance (parameters , tuple ):
1806
1827
parameters = (parameters ,)
1807
- if not isinstance (parameters [- 1 ], ParamSpec ):
1828
+ elif not ( parameters [ - 1 ] is ... or isinstance (parameters [- 1 ], ParamSpec ) ):
1808
1829
raise TypeError ("The last parameter to Concatenate should be a "
1809
- "ParamSpec variable." )
1830
+ "ParamSpec variable or ellipsis ." )
1810
1831
msg = "Concatenate[arg, ...]: each arg must be a type."
1811
1832
parameters = tuple (typing ._type_check (p , msg ) for p in parameters )
1833
+ if (3 , 10 , 2 ) < sys .version_info < (3 , 11 ):
1834
+ return _ConcatenateGenericAlias (self , parameters ,
1835
+ _typevar_types = (TypeVar , ParamSpec ),
1836
+ _paramspec_tvars = True )
1812
1837
return _ConcatenateGenericAlias (self , parameters )
1813
1838
1814
1839
1815
- # 3.10 +
1816
- if hasattr ( typing , 'Concatenate' ):
1840
+ # 3.11 +
1841
+ if sys . version_info >= ( 3 , 11 ):
1817
1842
Concatenate = typing .Concatenate
1818
- _ConcatenateGenericAlias = typing ._ConcatenateGenericAlias
1819
- # 3.9
1843
+ # 3.9-3.10
1820
1844
elif sys .version_info [:2 ] >= (3 , 9 ):
1821
1845
@_ExtensionsSpecialForm
1822
1846
def Concatenate (self , parameters ):
0 commit comments