@@ -1795,28 +1795,52 @@ def __parameters__(self):
17951795 return tuple (
17961796 tp for tp in self .__args__ if isinstance (tp , (typing .TypeVar , ParamSpec ))
17971797 )
1798+ # 3.10+
1799+ else :
1800+ _ConcatenateGenericAlias = typing ._ConcatenateGenericAlias
17981801
1802+ # 3.10
1803+ if sys .version_info < (3 , 11 ):
1804+ _typing_ConcatenateGenericAlias = _ConcatenateGenericAlias
17991805
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
18011822@typing ._tp_cache
18021823def _concatenate_getitem (self , parameters ):
18031824 if parameters == ():
18041825 raise TypeError ("Cannot take a Concatenate of no types." )
18051826 if not isinstance (parameters , tuple ):
18061827 parameters = (parameters ,)
1807- if not isinstance (parameters [- 1 ], ParamSpec ):
1828+ elif not ( parameters [ - 1 ] is ... or isinstance (parameters [- 1 ], ParamSpec ) ):
18081829 raise TypeError ("The last parameter to Concatenate should be a "
1809- "ParamSpec variable." )
1830+ "ParamSpec variable or ellipsis ." )
18101831 msg = "Concatenate[arg, ...]: each arg must be a type."
18111832 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 )
18121837 return _ConcatenateGenericAlias (self , parameters )
18131838
18141839
1815- # 3.10 +
1816- if hasattr ( typing , 'Concatenate' ):
1840+ # 3.11 +
1841+ if sys . version_info >= ( 3 , 11 ):
18171842 Concatenate = typing .Concatenate
1818- _ConcatenateGenericAlias = typing ._ConcatenateGenericAlias
1819- # 3.9
1843+ # 3.9-3.10
18201844elif sys .version_info [:2 ] >= (3 , 9 ):
18211845 @_ExtensionsSpecialForm
18221846 def Concatenate (self , parameters ):
0 commit comments