ef42417c208e93c55d704728d3e88dfe46250d92
[SubU] /
1 import abc
2 import collections
3 import collections.abc
4 import functools
5 import operator
6 import sys
7 import types as _types
8 import typing
9
10
11 __all__ = [
12     # Super-special typing primitives.
13     'Any',
14     'ClassVar',
15     'Concatenate',
16     'Final',
17     'LiteralString',
18     'ParamSpec',
19     'ParamSpecArgs',
20     'ParamSpecKwargs',
21     'Self',
22     'Type',
23     'TypeVar',
24     'TypeVarTuple',
25     'Unpack',
26
27     # ABCs (from collections.abc).
28     'Awaitable',
29     'AsyncIterator',
30     'AsyncIterable',
31     'Coroutine',
32     'AsyncGenerator',
33     'AsyncContextManager',
34     'ChainMap',
35
36     # Concrete collection types.
37     'ContextManager',
38     'Counter',
39     'Deque',
40     'DefaultDict',
41     'NamedTuple',
42     'OrderedDict',
43     'TypedDict',
44
45     # Structural checks, a.k.a. protocols.
46     'SupportsIndex',
47
48     # One-off things.
49     'Annotated',
50     'assert_never',
51     'assert_type',
52     'clear_overloads',
53     'dataclass_transform',
54     'get_overloads',
55     'final',
56     'get_args',
57     'get_origin',
58     'get_type_hints',
59     'IntVar',
60     'is_typeddict',
61     'Literal',
62     'NewType',
63     'overload',
64     'override',
65     'Protocol',
66     'reveal_type',
67     'runtime',
68     'runtime_checkable',
69     'Text',
70     'TypeAlias',
71     'TypeGuard',
72     'TYPE_CHECKING',
73     'Never',
74     'NoReturn',
75     'Required',
76     'NotRequired',
77 ]
78
79 # for backward compatibility
80 PEP_560 = True
81 GenericMeta = type
82
83 # The functions below are modified copies of typing internal helpers.
84 # They are needed by _ProtocolMeta and they provide support for PEP 646.
85
86 _marker = object()
87
88
89 def _check_generic(cls, parameters, elen=_marker):
90     """Check correct count for parameters of a generic cls (internal helper).
91     This gives a nice error message in case of count mismatch.
92     """
93     if not elen:
94         raise TypeError(f"{cls} is not a generic class")
95     if elen is _marker:
96         if not hasattr(cls, "__parameters__") or not cls.__parameters__:
97             raise TypeError(f"{cls} is not a generic class")
98         elen = len(cls.__parameters__)
99     alen = len(parameters)
100     if alen != elen:
101         if hasattr(cls, "__parameters__"):
102             parameters = [p for p in cls.__parameters__ if not _is_unpack(p)]
103             num_tv_tuples = sum(isinstance(p, TypeVarTuple) for p in parameters)
104             if (num_tv_tuples > 0) and (alen >= elen - num_tv_tuples):
105                 return
106         raise TypeError(f"Too {'many' if alen > elen else 'few'} parameters for {cls};"
107                         f" actual {alen}, expected {elen}")
108
109
110 if sys.version_info >= (3, 10):
111     def _should_collect_from_parameters(t):
112         return isinstance(
113             t, (typing._GenericAlias, _types.GenericAlias, _types.UnionType)
114         )
115 elif sys.version_info >= (3, 9):
116     def _should_collect_from_parameters(t):
117         return isinstance(t, (typing._GenericAlias, _types.GenericAlias))
118 else:
119     def _should_collect_from_parameters(t):
120         return isinstance(t, typing._GenericAlias) and not t._special
121
122
123 def _collect_type_vars(types, typevar_types=None):
124     """Collect all type variable contained in types in order of
125     first appearance (lexicographic order). For example::
126
127         _collect_type_vars((T, List[S, T])) == (T, S)
128     """
129     if typevar_types is None:
130         typevar_types = typing.TypeVar
131     tvars = []
132     for t in types:
133         if (
134             isinstance(t, typevar_types) and
135             t not in tvars and
136             not _is_unpack(t)
137         ):
138             tvars.append(t)
139         if _should_collect_from_parameters(t):
140             tvars.extend([t for t in t.__parameters__ if t not in tvars])
141     return tuple(tvars)
142
143
144 NoReturn = typing.NoReturn
145
146 # Some unconstrained type variables.  These are used by the container types.
147 # (These are not for export.)
148 T = typing.TypeVar('T')  # Any type.
149 KT = typing.TypeVar('KT')  # Key type.
150 VT = typing.TypeVar('VT')  # Value type.
151 T_co = typing.TypeVar('T_co', covariant=True)  # Any type covariant containers.
152 T_contra = typing.TypeVar('T_contra', contravariant=True)  # Ditto contravariant.
153
154
155 if sys.version_info >= (3, 11):
156     from typing import Any
157 else:
158
159     class _AnyMeta(type):
160         def __instancecheck__(self, obj):
161             if self is Any:
162                 raise TypeError("typing_extensions.Any cannot be used with isinstance()")
163             return super().__instancecheck__(obj)
164
165         def __repr__(self):
166             if self is Any:
167                 return "typing_extensions.Any"
168             return super().__repr__()
169
170     class Any(metaclass=_AnyMeta):
171         """Special type indicating an unconstrained type.
172         - Any is compatible with every type.
173         - Any assumed to have all methods.
174         - All values assumed to be instances of Any.
175         Note that all the above statements are true from the point of view of
176         static type checkers. At runtime, Any should not be used with instance
177         checks.
178         """
179         def __new__(cls, *args, **kwargs):
180             if cls is Any:
181                 raise TypeError("Any cannot be instantiated")
182             return super().__new__(cls, *args, **kwargs)
183
184
185 ClassVar = typing.ClassVar
186
187 # On older versions of typing there is an internal class named "Final".
188 # 3.8+
189 if hasattr(typing, 'Final') and sys.version_info[:2] >= (3, 7):
190     Final = typing.Final
191 # 3.7
192 else:
193     class _FinalForm(typing._SpecialForm, _root=True):
194
195         def __repr__(self):
196             return 'typing_extensions.' + self._name
197
198         def __getitem__(self, parameters):
199             item = typing._type_check(parameters,
200                                       f'{self._name} accepts only a single type.')
201             return typing._GenericAlias(self, (item,))
202
203     Final = _FinalForm('Final',
204                        doc="""A special typing construct to indicate that a name
205                        cannot be re-assigned or overridden in a subclass.
206                        For example:
207
208                            MAX_SIZE: Final = 9000
209                            MAX_SIZE += 1  # Error reported by type checker
210
211                            class Connection:
212                                TIMEOUT: Final[int] = 10
213                            class FastConnector(Connection):
214                                TIMEOUT = 1  # Error reported by type checker
215
216                        There is no runtime checking of these properties.""")
217
218 if sys.version_info >= (3, 11):
219     final = typing.final
220 else:
221     # @final exists in 3.8+, but we backport it for all versions
222     # before 3.11 to keep support for the __final__ attribute.
223     # See https://bugs.python.org/issue46342
224     def final(f):
225         """This decorator can be used to indicate to type checkers that
226         the decorated method cannot be overridden, and decorated class
227         cannot be subclassed. For example:
228
229             class Base:
230                 @final
231                 def done(self) -> None:
232                     ...
233             class Sub(Base):
234                 def done(self) -> None:  # Error reported by type checker
235                     ...
236             @final
237             class Leaf:
238                 ...
239             class Other(Leaf):  # Error reported by type checker
240                 ...
241
242         There is no runtime checking of these properties. The decorator
243         sets the ``__final__`` attribute to ``True`` on the decorated object
244         to allow runtime introspection.
245         """
246         try:
247             f.__final__ = True
248         except (AttributeError, TypeError):
249             # Skip the attribute silently if it is not writable.
250             # AttributeError happens if the object has __slots__ or a
251             # read-only property, TypeError if it's a builtin class.
252             pass
253         return f
254
255
256 def IntVar(name):
257     return typing.TypeVar(name)
258
259
260 # 3.8+:
261 if hasattr(typing, 'Literal'):
262     Literal = typing.Literal
263 # 3.7:
264 else:
265     class _LiteralForm(typing._SpecialForm, _root=True):
266
267         def __repr__(self):
268             return 'typing_extensions.' + self._name
269
270         def __getitem__(self, parameters):
271             return typing._GenericAlias(self, parameters)
272
273     Literal = _LiteralForm('Literal',
274                            doc="""A type that can be used to indicate to type checkers
275                            that the corresponding value has a value literally equivalent
276                            to the provided parameter. For example:
277
278                                var: Literal[4] = 4
279
280                            The type checker understands that 'var' is literally equal to
281                            the value 4 and no other value.
282
283                            Literal[...] cannot be subclassed. There is no runtime
284                            checking verifying that the parameter is actually a value
285                            instead of a type.""")
286
287
288 _overload_dummy = typing._overload_dummy  # noqa
289
290
291 if hasattr(typing, "get_overloads"):  # 3.11+
292     overload = typing.overload
293     get_overloads = typing.get_overloads
294     clear_overloads = typing.clear_overloads
295 else:
296     # {module: {qualname: {firstlineno: func}}}
297     _overload_registry = collections.defaultdict(
298         functools.partial(collections.defaultdict, dict)
299     )
300
301     def overload(func):
302         """Decorator for overloaded functions/methods.
303
304         In a stub file, place two or more stub definitions for the same
305         function in a row, each decorated with @overload.  For example:
306
307         @overload
308         def utf8(value: None) -> None: ...
309         @overload
310         def utf8(value: bytes) -> bytes: ...
311         @overload
312         def utf8(value: str) -> bytes: ...
313
314         In a non-stub file (i.e. a regular .py file), do the same but
315         follow it with an implementation.  The implementation should *not*
316         be decorated with @overload.  For example:
317
318         @overload
319         def utf8(value: None) -> None: ...
320         @overload
321         def utf8(value: bytes) -> bytes: ...
322         @overload
323         def utf8(value: str) -> bytes: ...
324         def utf8(value):
325             # implementation goes here
326
327         The overloads for a function can be retrieved at runtime using the
328         get_overloads() function.
329         """
330         # classmethod and staticmethod
331         f = getattr(func, "__func__", func)
332         try:
333             _overload_registry[f.__module__][f.__qualname__][
334                 f.__code__.co_firstlineno
335             ] = func
336         except AttributeError:
337             # Not a normal function; ignore.
338             pass
339         return _overload_dummy
340
341     def get_overloads(func):
342         """Return all defined overloads for *func* as a sequence."""
343         # classmethod and staticmethod
344         f = getattr(func, "__func__", func)
345         if f.__module__ not in _overload_registry:
346             return []
347         mod_dict = _overload_registry[f.__module__]
348         if f.__qualname__ not in mod_dict:
349             return []
350         return list(mod_dict[f.__qualname__].values())
351
352     def clear_overloads():
353         """Clear all overloads in the registry."""
354         _overload_registry.clear()
355
356
357 # This is not a real generic class.  Don't use outside annotations.
358 Type = typing.Type
359
360 # Various ABCs mimicking those in collections.abc.
361 # A few are simply re-exported for completeness.
362
363
364 Awaitable = typing.Awaitable
365 Coroutine = typing.Coroutine
366 AsyncIterable = typing.AsyncIterable
367 AsyncIterator = typing.AsyncIterator
368 Deque = typing.Deque
369 ContextManager = typing.ContextManager
370 AsyncContextManager = typing.AsyncContextManager
371 DefaultDict = typing.DefaultDict
372
373 # 3.7.2+
374 if hasattr(typing, 'OrderedDict'):
375     OrderedDict = typing.OrderedDict
376 # 3.7.0-3.7.2
377 else:
378     OrderedDict = typing._alias(collections.OrderedDict, (KT, VT))
379
380 Counter = typing.Counter
381 ChainMap = typing.ChainMap
382 AsyncGenerator = typing.AsyncGenerator
383 NewType = typing.NewType
384 Text = typing.Text
385 TYPE_CHECKING = typing.TYPE_CHECKING
386
387
388 _PROTO_WHITELIST = ['Callable', 'Awaitable',
389                     'Iterable', 'Iterator', 'AsyncIterable', 'AsyncIterator',
390                     'Hashable', 'Sized', 'Container', 'Collection', 'Reversible',
391                     'ContextManager', 'AsyncContextManager']
392
393
394 def _get_protocol_attrs(cls):
395     attrs = set()
396     for base in cls.__mro__[:-1]:  # without object
397         if base.__name__ in ('Protocol', 'Generic'):
398             continue
399         annotations = getattr(base, '__annotations__', {})
400         for attr in list(base.__dict__.keys()) + list(annotations.keys()):
401             if (not attr.startswith('_abc_') and attr not in (
402                     '__abstractmethods__', '__annotations__', '__weakref__',
403                     '_is_protocol', '_is_runtime_protocol', '__dict__',
404                     '__args__', '__slots__',
405                     '__next_in_mro__', '__parameters__', '__origin__',
406                     '__orig_bases__', '__extra__', '__tree_hash__',
407                     '__doc__', '__subclasshook__', '__init__', '__new__',
408                     '__module__', '_MutableMapping__marker', '_gorg')):
409                 attrs.add(attr)
410     return attrs
411
412
413 def _is_callable_members_only(cls):
414     return all(callable(getattr(cls, attr, None)) for attr in _get_protocol_attrs(cls))
415
416
417 def _maybe_adjust_parameters(cls):
418     """Helper function used in Protocol.__init_subclass__ and _TypedDictMeta.__new__.
419
420     The contents of this function are very similar
421     to logic found in typing.Generic.__init_subclass__
422     on the CPython main branch.
423     """
424     tvars = []
425     if '__orig_bases__' in cls.__dict__:
426         tvars = typing._collect_type_vars(cls.__orig_bases__)
427         # Look for Generic[T1, ..., Tn] or Protocol[T1, ..., Tn].
428         # If found, tvars must be a subset of it.
429         # If not found, tvars is it.
430         # Also check for and reject plain Generic,
431         # and reject multiple Generic[...] and/or Protocol[...].
432         gvars = None
433         for base in cls.__orig_bases__:
434             if (isinstance(base, typing._GenericAlias) and
435                     base.__origin__ in (typing.Generic, Protocol)):
436                 # for error messages
437                 the_base = base.__origin__.__name__
438                 if gvars is not None:
439                     raise TypeError(
440                         "Cannot inherit from Generic[...]"
441                         " and/or Protocol[...] multiple types.")
442                 gvars = base.__parameters__
443         if gvars is None:
444             gvars = tvars
445         else:
446             tvarset = set(tvars)
447             gvarset = set(gvars)
448             if not tvarset <= gvarset:
449                 s_vars = ', '.join(str(t) for t in tvars if t not in gvarset)
450                 s_args = ', '.join(str(g) for g in gvars)
451                 raise TypeError(f"Some type variables ({s_vars}) are"
452                                 f" not listed in {the_base}[{s_args}]")
453             tvars = gvars
454     cls.__parameters__ = tuple(tvars)
455
456
457 # 3.8+
458 if hasattr(typing, 'Protocol'):
459     Protocol = typing.Protocol
460 # 3.7
461 else:
462
463     def _no_init(self, *args, **kwargs):
464         if type(self)._is_protocol:
465             raise TypeError('Protocols cannot be instantiated')
466
467     class _ProtocolMeta(abc.ABCMeta):  # noqa: B024
468         # This metaclass is a bit unfortunate and exists only because of the lack
469         # of __instancehook__.
470         def __instancecheck__(cls, instance):
471             # We need this method for situations where attributes are
472             # assigned in __init__.
473             if ((not getattr(cls, '_is_protocol', False) or
474                  _is_callable_members_only(cls)) and
475                     issubclass(instance.__class__, cls)):
476                 return True
477             if cls._is_protocol:
478                 if all(hasattr(instance, attr) and
479                        (not callable(getattr(cls, attr, None)) or
480                         getattr(instance, attr) is not None)
481                        for attr in _get_protocol_attrs(cls)):
482                     return True
483             return super().__instancecheck__(instance)
484
485     class Protocol(metaclass=_ProtocolMeta):
486         # There is quite a lot of overlapping code with typing.Generic.
487         # Unfortunately it is hard to avoid this while these live in two different
488         # modules. The duplicated code will be removed when Protocol is moved to typing.
489         """Base class for protocol classes. Protocol classes are defined as::
490
491             class Proto(Protocol):
492                 def meth(self) -> int:
493                     ...
494
495         Such classes are primarily used with static type checkers that recognize
496         structural subtyping (static duck-typing), for example::
497
498             class C:
499                 def meth(self) -> int:
500                     return 0
501
502             def func(x: Proto) -> int:
503                 return x.meth()
504
505             func(C())  # Passes static type check
506
507         See PEP 544 for details. Protocol classes decorated with
508         @typing_extensions.runtime act as simple-minded runtime protocol that checks
509         only the presence of given attributes, ignoring their type signatures.
510
511         Protocol classes can be generic, they are defined as::
512
513             class GenProto(Protocol[T]):
514                 def meth(self) -> T:
515                     ...
516         """
517         __slots__ = ()
518         _is_protocol = True
519
520         def __new__(cls, *args, **kwds):
521             if cls is Protocol:
522                 raise TypeError("Type Protocol cannot be instantiated; "
523                                 "it can only be used as a base class")
524             return super().__new__(cls)
525
526         @typing._tp_cache
527         def __class_getitem__(cls, params):
528             if not isinstance(params, tuple):
529                 params = (params,)
530             if not params and cls is not typing.Tuple:
531                 raise TypeError(
532                     f"Parameter list to {cls.__qualname__}[...] cannot be empty")
533             msg = "Parameters to generic types must be types."
534             params = tuple(typing._type_check(p, msg) for p in params)  # noqa
535             if cls is Protocol:
536                 # Generic can only be subscripted with unique type variables.
537                 if not all(isinstance(p, typing.TypeVar) for p in params):
538                     i = 0
539                     while isinstance(params[i], typing.TypeVar):
540                         i += 1
541                     raise TypeError(
542                         "Parameters to Protocol[...] must all be type variables."
543                         f" Parameter {i + 1} is {params[i]}")
544                 if len(set(params)) != len(params):
545                     raise TypeError(
546                         "Parameters to Protocol[...] must all be unique")
547             else:
548                 # Subscripting a regular Generic subclass.
549                 _check_generic(cls, params, len(cls.__parameters__))
550             return typing._GenericAlias(cls, params)
551
552         def __init_subclass__(cls, *args, **kwargs):
553             if '__orig_bases__' in cls.__dict__:
554                 error = typing.Generic in cls.__orig_bases__
555             else:
556                 error = typing.Generic in cls.__bases__
557             if error:
558                 raise TypeError("Cannot inherit from plain Generic")
559             _maybe_adjust_parameters(cls)
560
561             # Determine if this is a protocol or a concrete subclass.
562             if not cls.__dict__.get('_is_protocol', None):
563                 cls._is_protocol = any(b is Protocol for b in cls.__bases__)
564
565             # Set (or override) the protocol subclass hook.
566             def _proto_hook(other):
567                 if not cls.__dict__.get('_is_protocol', None):
568                     return NotImplemented
569                 if not getattr(cls, '_is_runtime_protocol', False):
570                     if sys._getframe(2).f_globals['__name__'] in ['abc', 'functools']:
571                         return NotImplemented
572                     raise TypeError("Instance and class checks can only be used with"
573                                     " @runtime protocols")
574                 if not _is_callable_members_only(cls):
575                     if sys._getframe(2).f_globals['__name__'] in ['abc', 'functools']:
576                         return NotImplemented
577                     raise TypeError("Protocols with non-method members"
578                                     " don't support issubclass()")
579                 if not isinstance(other, type):
580                     # Same error as for issubclass(1, int)
581                     raise TypeError('issubclass() arg 1 must be a class')
582                 for attr in _get_protocol_attrs(cls):
583                     for base in other.__mro__:
584                         if attr in base.__dict__:
585                             if base.__dict__[attr] is None:
586                                 return NotImplemented
587                             break
588                         annotations = getattr(base, '__annotations__', {})
589                         if (isinstance(annotations, typing.Mapping) and
590                                 attr in annotations and
591                                 isinstance(other, _ProtocolMeta) and
592                                 other._is_protocol):
593                             break
594                     else:
595                         return NotImplemented
596                 return True
597             if '__subclasshook__' not in cls.__dict__:
598                 cls.__subclasshook__ = _proto_hook
599
600             # We have nothing more to do for non-protocols.
601             if not cls._is_protocol:
602                 return
603
604             # Check consistency of bases.
605             for base in cls.__bases__:
606                 if not (base in (object, typing.Generic) or
607                         base.__module__ == 'collections.abc' and
608                         base.__name__ in _PROTO_WHITELIST or
609                         isinstance(base, _ProtocolMeta) and base._is_protocol):
610                     raise TypeError('Protocols can only inherit from other'
611                                     f' protocols, got {repr(base)}')
612             cls.__init__ = _no_init
613
614
615 # 3.8+
616 if hasattr(typing, 'runtime_checkable'):
617     runtime_checkable = typing.runtime_checkable
618 # 3.7
619 else:
620     def runtime_checkable(cls):
621         """Mark a protocol class as a runtime protocol, so that it
622         can be used with isinstance() and issubclass(). Raise TypeError
623         if applied to a non-protocol class.
624
625         This allows a simple-minded structural check very similar to the
626         one-offs in collections.abc such as Hashable.
627         """
628         if not isinstance(cls, _ProtocolMeta) or not cls._is_protocol:
629             raise TypeError('@runtime_checkable can be only applied to protocol classes,'
630                             f' got {cls!r}')
631         cls._is_runtime_protocol = True
632         return cls
633
634
635 # Exists for backwards compatibility.
636 runtime = runtime_checkable
637
638
639 # 3.8+
640 if hasattr(typing, 'SupportsIndex'):
641     SupportsIndex = typing.SupportsIndex
642 # 3.7
643 else:
644     @runtime_checkable
645     class SupportsIndex(Protocol):
646         __slots__ = ()
647
648         @abc.abstractmethod
649         def __index__(self) -> int:
650             pass
651
652
653 if hasattr(typing, "Required"):
654     # The standard library TypedDict in Python 3.8 does not store runtime information
655     # about which (if any) keys are optional.  See https://bugs.python.org/issue38834
656     # The standard library TypedDict in Python 3.9.0/1 does not honour the "total"
657     # keyword with old-style TypedDict().  See https://bugs.python.org/issue42059
658     # The standard library TypedDict below Python 3.11 does not store runtime
659     # information about optional and required keys when using Required or NotRequired.
660     # Generic TypedDicts are also impossible using typing.TypedDict on Python <3.11.
661     TypedDict = typing.TypedDict
662     _TypedDictMeta = typing._TypedDictMeta
663     is_typeddict = typing.is_typeddict
664 else:
665     def _check_fails(cls, other):
666         try:
667             if sys._getframe(1).f_globals['__name__'] not in ['abc',
668                                                               'functools',
669                                                               'typing']:
670                 # Typed dicts are only for static structural subtyping.
671                 raise TypeError('TypedDict does not support instance and class checks')
672         except (AttributeError, ValueError):
673             pass
674         return False
675
676     def _dict_new(*args, **kwargs):
677         if not args:
678             raise TypeError('TypedDict.__new__(): not enough arguments')
679         _, args = args[0], args[1:]  # allow the "cls" keyword be passed
680         return dict(*args, **kwargs)
681
682     _dict_new.__text_signature__ = '($cls, _typename, _fields=None, /, **kwargs)'
683
684     def _typeddict_new(*args, total=True, **kwargs):
685         if not args:
686             raise TypeError('TypedDict.__new__(): not enough arguments')
687         _, args = args[0], args[1:]  # allow the "cls" keyword be passed
688         if args:
689             typename, args = args[0], args[1:]  # allow the "_typename" keyword be passed
690         elif '_typename' in kwargs:
691             typename = kwargs.pop('_typename')
692             import warnings
693             warnings.warn("Passing '_typename' as keyword argument is deprecated",
694                           DeprecationWarning, stacklevel=2)
695         else:
696             raise TypeError("TypedDict.__new__() missing 1 required positional "
697                             "argument: '_typename'")
698         if args:
699             try:
700                 fields, = args  # allow the "_fields" keyword be passed
701             except ValueError:
702                 raise TypeError('TypedDict.__new__() takes from 2 to 3 '
703                                 f'positional arguments but {len(args) + 2} '
704                                 'were given')
705         elif '_fields' in kwargs and len(kwargs) == 1:
706             fields = kwargs.pop('_fields')
707             import warnings
708             warnings.warn("Passing '_fields' as keyword argument is deprecated",
709                           DeprecationWarning, stacklevel=2)
710         else:
711             fields = None
712
713         if fields is None:
714             fields = kwargs
715         elif kwargs:
716             raise TypeError("TypedDict takes either a dict or keyword arguments,"
717                             " but not both")
718
719         ns = {'__annotations__': dict(fields)}
720         try:
721             # Setting correct module is necessary to make typed dict classes pickleable.
722             ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__')
723         except (AttributeError, ValueError):
724             pass
725
726         return _TypedDictMeta(typename, (), ns, total=total)
727
728     _typeddict_new.__text_signature__ = ('($cls, _typename, _fields=None,'
729                                          ' /, *, total=True, **kwargs)')
730
731     class _TypedDictMeta(type):
732         def __init__(cls, name, bases, ns, total=True):
733             super().__init__(name, bases, ns)
734
735         def __new__(cls, name, bases, ns, total=True):
736             # Create new typed dict class object.
737             # This method is called directly when TypedDict is subclassed,
738             # or via _typeddict_new when TypedDict is instantiated. This way
739             # TypedDict supports all three syntaxes described in its docstring.
740             # Subclasses and instances of TypedDict return actual dictionaries
741             # via _dict_new.
742             ns['__new__'] = _typeddict_new if name == 'TypedDict' else _dict_new
743             # Don't insert typing.Generic into __bases__ here,
744             # or Generic.__init_subclass__ will raise TypeError
745             # in the super().__new__() call.
746             # Instead, monkey-patch __bases__ onto the class after it's been created.
747             tp_dict = super().__new__(cls, name, (dict,), ns)
748
749             if any(issubclass(base, typing.Generic) for base in bases):
750                 tp_dict.__bases__ = (typing.Generic, dict)
751                 _maybe_adjust_parameters(tp_dict)
752
753             annotations = {}
754             own_annotations = ns.get('__annotations__', {})
755             msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
756             own_annotations = {
757                 n: typing._type_check(tp, msg) for n, tp in own_annotations.items()
758             }
759             required_keys = set()
760             optional_keys = set()
761
762             for base in bases:
763                 annotations.update(base.__dict__.get('__annotations__', {}))
764                 required_keys.update(base.__dict__.get('__required_keys__', ()))
765                 optional_keys.update(base.__dict__.get('__optional_keys__', ()))
766
767             annotations.update(own_annotations)
768             for annotation_key, annotation_type in own_annotations.items():
769                 annotation_origin = get_origin(annotation_type)
770                 if annotation_origin is Annotated:
771                     annotation_args = get_args(annotation_type)
772                     if annotation_args:
773                         annotation_type = annotation_args[0]
774                         annotation_origin = get_origin(annotation_type)
775
776                 if annotation_origin is Required:
777                     required_keys.add(annotation_key)
778                 elif annotation_origin is NotRequired:
779                     optional_keys.add(annotation_key)
780                 elif total:
781                     required_keys.add(annotation_key)
782                 else:
783                     optional_keys.add(annotation_key)
784
785             tp_dict.__annotations__ = annotations
786             tp_dict.__required_keys__ = frozenset(required_keys)
787             tp_dict.__optional_keys__ = frozenset(optional_keys)
788             if not hasattr(tp_dict, '__total__'):
789                 tp_dict.__total__ = total
790             return tp_dict
791
792         __instancecheck__ = __subclasscheck__ = _check_fails
793
794     TypedDict = _TypedDictMeta('TypedDict', (dict,), {})
795     TypedDict.__module__ = __name__
796     TypedDict.__doc__ = \
797         """A simple typed name space. At runtime it is equivalent to a plain dict.
798
799         TypedDict creates a dictionary type that expects all of its
800         instances to have a certain set of keys, with each key
801         associated with a value of a consistent type. This expectation
802         is not checked at runtime but is only enforced by type checkers.
803         Usage::
804
805             class Point2D(TypedDict):
806                 x: int
807                 y: int
808                 label: str
809
810             a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
811             b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check
812
813             assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
814
815         The type info can be accessed via the Point2D.__annotations__ dict, and
816         the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
817         TypedDict supports two additional equivalent forms::
818
819             Point2D = TypedDict('Point2D', x=int, y=int, label=str)
820             Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
821
822         The class syntax is only supported in Python 3.6+, while two other
823         syntax forms work for Python 2.7 and 3.2+
824         """
825
826     if hasattr(typing, "_TypedDictMeta"):
827         _TYPEDDICT_TYPES = (typing._TypedDictMeta, _TypedDictMeta)
828     else:
829         _TYPEDDICT_TYPES = (_TypedDictMeta,)
830
831     def is_typeddict(tp):
832         """Check if an annotation is a TypedDict class
833
834         For example::
835             class Film(TypedDict):
836                 title: str
837                 year: int
838
839             is_typeddict(Film)  # => True
840             is_typeddict(Union[list, str])  # => False
841         """
842         return isinstance(tp, tuple(_TYPEDDICT_TYPES))
843
844
845 if hasattr(typing, "assert_type"):
846     assert_type = typing.assert_type
847
848 else:
849     def assert_type(__val, __typ):
850         """Assert (to the type checker) that the value is of the given type.
851
852         When the type checker encounters a call to assert_type(), it
853         emits an error if the value is not of the specified type::
854
855             def greet(name: str) -> None:
856                 assert_type(name, str)  # ok
857                 assert_type(name, int)  # type checker error
858
859         At runtime this returns the first argument unchanged and otherwise
860         does nothing.
861         """
862         return __val
863
864
865 if hasattr(typing, "Required"):
866     get_type_hints = typing.get_type_hints
867 else:
868     import functools
869     import types
870
871     # replaces _strip_annotations()
872     def _strip_extras(t):
873         """Strips Annotated, Required and NotRequired from a given type."""
874         if isinstance(t, _AnnotatedAlias):
875             return _strip_extras(t.__origin__)
876         if hasattr(t, "__origin__") and t.__origin__ in (Required, NotRequired):
877             return _strip_extras(t.__args__[0])
878         if isinstance(t, typing._GenericAlias):
879             stripped_args = tuple(_strip_extras(a) for a in t.__args__)
880             if stripped_args == t.__args__:
881                 return t
882             return t.copy_with(stripped_args)
883         if hasattr(types, "GenericAlias") and isinstance(t, types.GenericAlias):
884             stripped_args = tuple(_strip_extras(a) for a in t.__args__)
885             if stripped_args == t.__args__:
886                 return t
887             return types.GenericAlias(t.__origin__, stripped_args)
888         if hasattr(types, "UnionType") and isinstance(t, types.UnionType):
889             stripped_args = tuple(_strip_extras(a) for a in t.__args__)
890             if stripped_args == t.__args__:
891                 return t
892             return functools.reduce(operator.or_, stripped_args)
893
894         return t
895
896     def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
897         """Return type hints for an object.
898
899         This is often the same as obj.__annotations__, but it handles
900         forward references encoded as string literals, adds Optional[t] if a
901         default value equal to None is set and recursively replaces all
902         'Annotated[T, ...]', 'Required[T]' or 'NotRequired[T]' with 'T'
903         (unless 'include_extras=True').
904
905         The argument may be a module, class, method, or function. The annotations
906         are returned as a dictionary. For classes, annotations include also
907         inherited members.
908
909         TypeError is raised if the argument is not of a type that can contain
910         annotations, and an empty dictionary is returned if no annotations are
911         present.
912
913         BEWARE -- the behavior of globalns and localns is counterintuitive
914         (unless you are familiar with how eval() and exec() work).  The
915         search order is locals first, then globals.
916
917         - If no dict arguments are passed, an attempt is made to use the
918           globals from obj (or the respective module's globals for classes),
919           and these are also used as the locals.  If the object does not appear
920           to have globals, an empty dictionary is used.
921
922         - If one dict argument is passed, it is used for both globals and
923           locals.
924
925         - If two dict arguments are passed, they specify globals and
926           locals, respectively.
927         """
928         if hasattr(typing, "Annotated"):
929             hint = typing.get_type_hints(
930                 obj, globalns=globalns, localns=localns, include_extras=True
931             )
932         else:
933             hint = typing.get_type_hints(obj, globalns=globalns, localns=localns)
934         if include_extras:
935             return hint
936         return {k: _strip_extras(t) for k, t in hint.items()}
937
938
939 # Python 3.9+ has PEP 593 (Annotated)
940 if hasattr(typing, 'Annotated'):
941     Annotated = typing.Annotated
942     # Not exported and not a public API, but needed for get_origin() and get_args()
943     # to work.
944     _AnnotatedAlias = typing._AnnotatedAlias
945 # 3.7-3.8
946 else:
947     class _AnnotatedAlias(typing._GenericAlias, _root=True):
948         """Runtime representation of an annotated type.
949
950         At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't'
951         with extra annotations. The alias behaves like a normal typing alias,
952         instantiating is the same as instantiating the underlying type, binding
953         it to types is also the same.
954         """
955         def __init__(self, origin, metadata):
956             if isinstance(origin, _AnnotatedAlias):
957                 metadata = origin.__metadata__ + metadata
958                 origin = origin.__origin__
959             super().__init__(origin, origin)
960             self.__metadata__ = metadata
961
962         def copy_with(self, params):
963             assert len(params) == 1
964             new_type = params[0]
965             return _AnnotatedAlias(new_type, self.__metadata__)
966
967         def __repr__(self):
968             return (f"typing_extensions.Annotated[{typing._type_repr(self.__origin__)}, "
969                     f"{', '.join(repr(a) for a in self.__metadata__)}]")
970
971         def __reduce__(self):
972             return operator.getitem, (
973                 Annotated, (self.__origin__,) + self.__metadata__
974             )
975
976         def __eq__(self, other):
977             if not isinstance(other, _AnnotatedAlias):
978                 return NotImplemented
979             if self.__origin__ != other.__origin__:
980                 return False
981             return self.__metadata__ == other.__metadata__
982
983         def __hash__(self):
984             return hash((self.__origin__, self.__metadata__))
985
986     class Annotated:
987         """Add context specific metadata to a type.
988
989         Example: Annotated[int, runtime_check.Unsigned] indicates to the
990         hypothetical runtime_check module that this type is an unsigned int.
991         Every other consumer of this type can ignore this metadata and treat
992         this type as int.
993
994         The first argument to Annotated must be a valid type (and will be in
995         the __origin__ field), the remaining arguments are kept as a tuple in
996         the __extra__ field.
997
998         Details:
999
1000         - It's an error to call `Annotated` with less than two arguments.
1001         - Nested Annotated are flattened::
1002
1003             Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
1004
1005         - Instantiating an annotated type is equivalent to instantiating the
1006         underlying type::
1007
1008             Annotated[C, Ann1](5) == C(5)
1009
1010         - Annotated can be used as a generic type alias::
1011
1012             Optimized = Annotated[T, runtime.Optimize()]
1013             Optimized[int] == Annotated[int, runtime.Optimize()]
1014
1015             OptimizedList = Annotated[List[T], runtime.Optimize()]
1016             OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
1017         """
1018
1019         __slots__ = ()
1020
1021         def __new__(cls, *args, **kwargs):
1022             raise TypeError("Type Annotated cannot be instantiated.")
1023
1024         @typing._tp_cache
1025         def __class_getitem__(cls, params):
1026             if not isinstance(params, tuple) or len(params) < 2:
1027                 raise TypeError("Annotated[...] should be used "
1028                                 "with at least two arguments (a type and an "
1029                                 "annotation).")
1030             allowed_special_forms = (ClassVar, Final)
1031             if get_origin(params[0]) in allowed_special_forms:
1032                 origin = params[0]
1033             else:
1034                 msg = "Annotated[t, ...]: t must be a type."
1035                 origin = typing._type_check(params[0], msg)
1036             metadata = tuple(params[1:])
1037             return _AnnotatedAlias(origin, metadata)
1038
1039         def __init_subclass__(cls, *args, **kwargs):
1040             raise TypeError(
1041                 f"Cannot subclass {cls.__module__}.Annotated"
1042             )
1043
1044 # Python 3.8 has get_origin() and get_args() but those implementations aren't
1045 # Annotated-aware, so we can't use those. Python 3.9's versions don't support
1046 # ParamSpecArgs and ParamSpecKwargs, so only Python 3.10's versions will do.
1047 if sys.version_info[:2] >= (3, 10):
1048     get_origin = typing.get_origin
1049     get_args = typing.get_args
1050 # 3.7-3.9
1051 else:
1052     try:
1053         # 3.9+
1054         from typing import _BaseGenericAlias
1055     except ImportError:
1056         _BaseGenericAlias = typing._GenericAlias
1057     try:
1058         # 3.9+
1059         from typing import GenericAlias as _typing_GenericAlias
1060     except ImportError:
1061         _typing_GenericAlias = typing._GenericAlias
1062
1063     def get_origin(tp):
1064         """Get the unsubscripted version of a type.
1065
1066         This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
1067         and Annotated. Return None for unsupported types. Examples::
1068
1069             get_origin(Literal[42]) is Literal
1070             get_origin(int) is None
1071             get_origin(ClassVar[int]) is ClassVar
1072             get_origin(Generic) is Generic
1073             get_origin(Generic[T]) is Generic
1074             get_origin(Union[T, int]) is Union
1075             get_origin(List[Tuple[T, T]][int]) == list
1076             get_origin(P.args) is P
1077         """
1078         if isinstance(tp, _AnnotatedAlias):
1079             return Annotated
1080         if isinstance(tp, (typing._GenericAlias, _typing_GenericAlias, _BaseGenericAlias,
1081                            ParamSpecArgs, ParamSpecKwargs)):
1082             return tp.__origin__
1083         if tp is typing.Generic:
1084             return typing.Generic
1085         return None
1086
1087     def get_args(tp):
1088         """Get type arguments with all substitutions performed.
1089
1090         For unions, basic simplifications used by Union constructor are performed.
1091         Examples::
1092             get_args(Dict[str, int]) == (str, int)
1093             get_args(int) == ()
1094             get_args(Union[int, Union[T, int], str][int]) == (int, str)
1095             get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
1096             get_args(Callable[[], T][int]) == ([], int)
1097         """
1098         if isinstance(tp, _AnnotatedAlias):
1099             return (tp.__origin__,) + tp.__metadata__
1100         if isinstance(tp, (typing._GenericAlias, _typing_GenericAlias)):
1101             if getattr(tp, "_special", False):
1102                 return ()
1103             res = tp.__args__
1104             if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis:
1105                 res = (list(res[:-1]), res[-1])
1106             return res
1107         return ()
1108
1109
1110 # 3.10+
1111 if hasattr(typing, 'TypeAlias'):
1112     TypeAlias = typing.TypeAlias
1113 # 3.9
1114 elif sys.version_info[:2] >= (3, 9):
1115     class _TypeAliasForm(typing._SpecialForm, _root=True):
1116         def __repr__(self):
1117             return 'typing_extensions.' + self._name
1118
1119     @_TypeAliasForm
1120     def TypeAlias(self, parameters):
1121         """Special marker indicating that an assignment should
1122         be recognized as a proper type alias definition by type
1123         checkers.
1124
1125         For example::
1126
1127             Predicate: TypeAlias = Callable[..., bool]
1128
1129         It's invalid when used anywhere except as in the example above.
1130         """
1131         raise TypeError(f"{self} is not subscriptable")
1132 # 3.7-3.8
1133 else:
1134     class _TypeAliasForm(typing._SpecialForm, _root=True):
1135         def __repr__(self):
1136             return 'typing_extensions.' + self._name
1137
1138     TypeAlias = _TypeAliasForm('TypeAlias',
1139                                doc="""Special marker indicating that an assignment should
1140                                be recognized as a proper type alias definition by type
1141                                checkers.
1142
1143                                For example::
1144
1145                                    Predicate: TypeAlias = Callable[..., bool]
1146
1147                                It's invalid when used anywhere except as in the example
1148                                above.""")
1149
1150
1151 class _DefaultMixin:
1152     """Mixin for TypeVarLike defaults."""
1153
1154     __slots__ = ()
1155
1156     def __init__(self, default):
1157         if isinstance(default, (tuple, list)):
1158             self.__default__ = tuple((typing._type_check(d, "Default must be a type")
1159                                       for d in default))
1160         elif default:
1161             self.__default__ = typing._type_check(default, "Default must be a type")
1162         else:
1163             self.__default__ = None
1164
1165
1166 # Add default and infer_variance parameters from PEP 696 and 695
1167 class TypeVar(typing.TypeVar, _DefaultMixin, _root=True):
1168     """Type variable."""
1169
1170     __module__ = 'typing'
1171
1172     def __init__(self, name, *constraints, bound=None,
1173                  covariant=False, contravariant=False,
1174                  default=None, infer_variance=False):
1175         super().__init__(name, *constraints, bound=bound, covariant=covariant,
1176                          contravariant=contravariant)
1177         _DefaultMixin.__init__(self, default)
1178         self.__infer_variance__ = infer_variance
1179
1180         # for pickling:
1181         try:
1182             def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
1183         except (AttributeError, ValueError):
1184             def_mod = None
1185         if def_mod != 'typing_extensions':
1186             self.__module__ = def_mod
1187
1188
1189 # Python 3.10+ has PEP 612
1190 if hasattr(typing, 'ParamSpecArgs'):
1191     ParamSpecArgs = typing.ParamSpecArgs
1192     ParamSpecKwargs = typing.ParamSpecKwargs
1193 # 3.7-3.9
1194 else:
1195     class _Immutable:
1196         """Mixin to indicate that object should not be copied."""
1197         __slots__ = ()
1198
1199         def __copy__(self):
1200             return self
1201
1202         def __deepcopy__(self, memo):
1203             return self
1204
1205     class ParamSpecArgs(_Immutable):
1206         """The args for a ParamSpec object.
1207
1208         Given a ParamSpec object P, P.args is an instance of ParamSpecArgs.
1209
1210         ParamSpecArgs objects have a reference back to their ParamSpec:
1211
1212         P.args.__origin__ is P
1213
1214         This type is meant for runtime introspection and has no special meaning to
1215         static type checkers.
1216         """
1217         def __init__(self, origin):
1218             self.__origin__ = origin
1219
1220         def __repr__(self):
1221             return f"{self.__origin__.__name__}.args"
1222
1223         def __eq__(self, other):
1224             if not isinstance(other, ParamSpecArgs):
1225                 return NotImplemented
1226             return self.__origin__ == other.__origin__
1227
1228     class ParamSpecKwargs(_Immutable):
1229         """The kwargs for a ParamSpec object.
1230
1231         Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs.
1232
1233         ParamSpecKwargs objects have a reference back to their ParamSpec:
1234
1235         P.kwargs.__origin__ is P
1236
1237         This type is meant for runtime introspection and has no special meaning to
1238         static type checkers.
1239         """
1240         def __init__(self, origin):
1241             self.__origin__ = origin
1242
1243         def __repr__(self):
1244             return f"{self.__origin__.__name__}.kwargs"
1245
1246         def __eq__(self, other):
1247             if not isinstance(other, ParamSpecKwargs):
1248                 return NotImplemented
1249             return self.__origin__ == other.__origin__
1250
1251 # 3.10+
1252 if hasattr(typing, 'ParamSpec'):
1253
1254     # Add default Parameter - PEP 696
1255     class ParamSpec(typing.ParamSpec, _DefaultMixin, _root=True):
1256         """Parameter specification variable."""
1257
1258         __module__ = 'typing'
1259
1260         def __init__(self, name, *, bound=None, covariant=False, contravariant=False,
1261                      default=None):
1262             super().__init__(name, bound=bound, covariant=covariant,
1263                              contravariant=contravariant)
1264             _DefaultMixin.__init__(self, default)
1265
1266             # for pickling:
1267             try:
1268                 def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
1269             except (AttributeError, ValueError):
1270                 def_mod = None
1271             if def_mod != 'typing_extensions':
1272                 self.__module__ = def_mod
1273
1274 # 3.7-3.9
1275 else:
1276
1277     # Inherits from list as a workaround for Callable checks in Python < 3.9.2.
1278     class ParamSpec(list, _DefaultMixin):
1279         """Parameter specification variable.
1280
1281         Usage::
1282
1283            P = ParamSpec('P')
1284
1285         Parameter specification variables exist primarily for the benefit of static
1286         type checkers.  They are used to forward the parameter types of one
1287         callable to another callable, a pattern commonly found in higher order
1288         functions and decorators.  They are only valid when used in ``Concatenate``,
1289         or s the first argument to ``Callable``. In Python 3.10 and higher,
1290         they are also supported in user-defined Generics at runtime.
1291         See class Generic for more information on generic types.  An
1292         example for annotating a decorator::
1293
1294            T = TypeVar('T')
1295            P = ParamSpec('P')
1296
1297            def add_logging(f: Callable[P, T]) -> Callable[P, T]:
1298                '''A type-safe decorator to add logging to a function.'''
1299                def inner(*args: P.args, **kwargs: P.kwargs) -> T:
1300                    logging.info(f'{f.__name__} was called')
1301                    return f(*args, **kwargs)
1302                return inner
1303
1304            @add_logging
1305            def add_two(x: float, y: float) -> float:
1306                '''Add two numbers together.'''
1307                return x + y
1308
1309         Parameter specification variables defined with covariant=True or
1310         contravariant=True can be used to declare covariant or contravariant
1311         generic types.  These keyword arguments are valid, but their actual semantics
1312         are yet to be decided.  See PEP 612 for details.
1313
1314         Parameter specification variables can be introspected. e.g.:
1315
1316            P.__name__ == 'T'
1317            P.__bound__ == None
1318            P.__covariant__ == False
1319            P.__contravariant__ == False
1320
1321         Note that only parameter specification variables defined in global scope can
1322         be pickled.
1323         """
1324
1325         # Trick Generic __parameters__.
1326         __class__ = typing.TypeVar
1327
1328         @property
1329         def args(self):
1330             return ParamSpecArgs(self)
1331
1332         @property
1333         def kwargs(self):
1334             return ParamSpecKwargs(self)
1335
1336         def __init__(self, name, *, bound=None, covariant=False, contravariant=False,
1337                      default=None):
1338             super().__init__([self])
1339             self.__name__ = name
1340             self.__covariant__ = bool(covariant)
1341             self.__contravariant__ = bool(contravariant)
1342             if bound:
1343                 self.__bound__ = typing._type_check(bound, 'Bound must be a type.')
1344             else:
1345                 self.__bound__ = None
1346             _DefaultMixin.__init__(self, default)
1347
1348             # for pickling:
1349             try:
1350                 def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
1351             except (AttributeError, ValueError):
1352                 def_mod = None
1353             if def_mod != 'typing_extensions':
1354                 self.__module__ = def_mod
1355
1356         def __repr__(self):
1357             if self.__covariant__:
1358                 prefix = '+'
1359             elif self.__contravariant__:
1360                 prefix = '-'
1361             else:
1362                 prefix = '~'
1363             return prefix + self.__name__
1364
1365         def __hash__(self):
1366             return object.__hash__(self)
1367
1368         def __eq__(self, other):
1369             return self is other
1370
1371         def __reduce__(self):
1372             return self.__name__
1373
1374         # Hack to get typing._type_check to pass.
1375         def __call__(self, *args, **kwargs):
1376             pass
1377
1378
1379 # 3.7-3.9
1380 if not hasattr(typing, 'Concatenate'):
1381     # Inherits from list as a workaround for Callable checks in Python < 3.9.2.
1382     class _ConcatenateGenericAlias(list):
1383
1384         # Trick Generic into looking into this for __parameters__.
1385         __class__ = typing._GenericAlias
1386
1387         # Flag in 3.8.
1388         _special = False
1389
1390         def __init__(self, origin, args):
1391             super().__init__(args)
1392             self.__origin__ = origin
1393             self.__args__ = args
1394
1395         def __repr__(self):
1396             _type_repr = typing._type_repr
1397             return (f'{_type_repr(self.__origin__)}'
1398                     f'[{", ".join(_type_repr(arg) for arg in self.__args__)}]')
1399
1400         def __hash__(self):
1401             return hash((self.__origin__, self.__args__))
1402
1403         # Hack to get typing._type_check to pass in Generic.
1404         def __call__(self, *args, **kwargs):
1405             pass
1406
1407         @property
1408         def __parameters__(self):
1409             return tuple(
1410                 tp for tp in self.__args__ if isinstance(tp, (typing.TypeVar, ParamSpec))
1411             )
1412
1413
1414 # 3.7-3.9
1415 @typing._tp_cache
1416 def _concatenate_getitem(self, parameters):
1417     if parameters == ():
1418         raise TypeError("Cannot take a Concatenate of no types.")
1419     if not isinstance(parameters, tuple):
1420         parameters = (parameters,)
1421     if not isinstance(parameters[-1], ParamSpec):
1422         raise TypeError("The last parameter to Concatenate should be a "
1423                         "ParamSpec variable.")
1424     msg = "Concatenate[arg, ...]: each arg must be a type."
1425     parameters = tuple(typing._type_check(p, msg) for p in parameters)
1426     return _ConcatenateGenericAlias(self, parameters)
1427
1428
1429 # 3.10+
1430 if hasattr(typing, 'Concatenate'):
1431     Concatenate = typing.Concatenate
1432     _ConcatenateGenericAlias = typing._ConcatenateGenericAlias # noqa
1433 # 3.9
1434 elif sys.version_info[:2] >= (3, 9):
1435     @_TypeAliasForm
1436     def Concatenate(self, parameters):
1437         """Used in conjunction with ``ParamSpec`` and ``Callable`` to represent a
1438         higher order function which adds, removes or transforms parameters of a
1439         callable.
1440
1441         For example::
1442
1443            Callable[Concatenate[int, P], int]
1444
1445         See PEP 612 for detailed information.
1446         """
1447         return _concatenate_getitem(self, parameters)
1448 # 3.7-8
1449 else:
1450     class _ConcatenateForm(typing._SpecialForm, _root=True):
1451         def __repr__(self):
1452             return 'typing_extensions.' + self._name
1453
1454         def __getitem__(self, parameters):
1455             return _concatenate_getitem(self, parameters)
1456
1457     Concatenate = _ConcatenateForm(
1458         'Concatenate',
1459         doc="""Used in conjunction with ``ParamSpec`` and ``Callable`` to represent a
1460         higher order function which adds, removes or transforms parameters of a
1461         callable.
1462
1463         For example::
1464
1465            Callable[Concatenate[int, P], int]
1466
1467         See PEP 612 for detailed information.
1468         """)
1469
1470 # 3.10+
1471 if hasattr(typing, 'TypeGuard'):
1472     TypeGuard = typing.TypeGuard
1473 # 3.9
1474 elif sys.version_info[:2] >= (3, 9):
1475     class _TypeGuardForm(typing._SpecialForm, _root=True):
1476         def __repr__(self):
1477             return 'typing_extensions.' + self._name
1478
1479     @_TypeGuardForm
1480     def TypeGuard(self, parameters):
1481         """Special typing form used to annotate the return type of a user-defined
1482         type guard function.  ``TypeGuard`` only accepts a single type argument.
1483         At runtime, functions marked this way should return a boolean.
1484
1485         ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static
1486         type checkers to determine a more precise type of an expression within a
1487         program's code flow.  Usually type narrowing is done by analyzing
1488         conditional code flow and applying the narrowing to a block of code.  The
1489         conditional expression here is sometimes referred to as a "type guard".
1490
1491         Sometimes it would be convenient to use a user-defined boolean function
1492         as a type guard.  Such a function should use ``TypeGuard[...]`` as its
1493         return type to alert static type checkers to this intention.
1494
1495         Using  ``-> TypeGuard`` tells the static type checker that for a given
1496         function:
1497
1498         1. The return value is a boolean.
1499         2. If the return value is ``True``, the type of its argument
1500         is the type inside ``TypeGuard``.
1501
1502         For example::
1503
1504             def is_str(val: Union[str, float]):
1505                 # "isinstance" type guard
1506                 if isinstance(val, str):
1507                     # Type of ``val`` is narrowed to ``str``
1508                     ...
1509                 else:
1510                     # Else, type of ``val`` is narrowed to ``float``.
1511                     ...
1512
1513         Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower
1514         form of ``TypeA`` (it can even be a wider form) and this may lead to
1515         type-unsafe results.  The main reason is to allow for things like
1516         narrowing ``List[object]`` to ``List[str]`` even though the latter is not
1517         a subtype of the former, since ``List`` is invariant.  The responsibility of
1518         writing type-safe type guards is left to the user.
1519
1520         ``TypeGuard`` also works with type variables.  For more information, see
1521         PEP 647 (User-Defined Type Guards).
1522         """
1523         item = typing._type_check(parameters, f'{self} accepts only a single type.')
1524         return typing._GenericAlias(self, (item,))
1525 # 3.7-3.8
1526 else:
1527     class _TypeGuardForm(typing._SpecialForm, _root=True):
1528
1529         def __repr__(self):
1530             return 'typing_extensions.' + self._name
1531
1532         def __getitem__(self, parameters):
1533             item = typing._type_check(parameters,
1534                                       f'{self._name} accepts only a single type')
1535             return typing._GenericAlias(self, (item,))
1536
1537     TypeGuard = _TypeGuardForm(
1538         'TypeGuard',
1539         doc="""Special typing form used to annotate the return type of a user-defined
1540         type guard function.  ``TypeGuard`` only accepts a single type argument.
1541         At runtime, functions marked this way should return a boolean.
1542
1543         ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static
1544         type checkers to determine a more precise type of an expression within a
1545         program's code flow.  Usually type narrowing is done by analyzing
1546         conditional code flow and applying the narrowing to a block of code.  The
1547         conditional expression here is sometimes referred to as a "type guard".
1548
1549         Sometimes it would be convenient to use a user-defined boolean function
1550         as a type guard.  Such a function should use ``TypeGuard[...]`` as its
1551         return type to alert static type checkers to this intention.
1552
1553         Using  ``-> TypeGuard`` tells the static type checker that for a given
1554         function:
1555
1556         1. The return value is a boolean.
1557         2. If the return value is ``True``, the type of its argument
1558         is the type inside ``TypeGuard``.
1559
1560         For example::
1561
1562             def is_str(val: Union[str, float]):
1563                 # "isinstance" type guard
1564                 if isinstance(val, str):
1565                     # Type of ``val`` is narrowed to ``str``
1566                     ...
1567                 else:
1568                     # Else, type of ``val`` is narrowed to ``float``.
1569                     ...
1570
1571         Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower
1572         form of ``TypeA`` (it can even be a wider form) and this may lead to
1573         type-unsafe results.  The main reason is to allow for things like
1574         narrowing ``List[object]`` to ``List[str]`` even though the latter is not
1575         a subtype of the former, since ``List`` is invariant.  The responsibility of
1576         writing type-safe type guards is left to the user.
1577
1578         ``TypeGuard`` also works with type variables.  For more information, see
1579         PEP 647 (User-Defined Type Guards).
1580         """)
1581
1582
1583 # Vendored from cpython typing._SpecialFrom
1584 class _SpecialForm(typing._Final, _root=True):
1585     __slots__ = ('_name', '__doc__', '_getitem')
1586
1587     def __init__(self, getitem):
1588         self._getitem = getitem
1589         self._name = getitem.__name__
1590         self.__doc__ = getitem.__doc__
1591
1592     def __getattr__(self, item):
1593         if item in {'__name__', '__qualname__'}:
1594             return self._name
1595
1596         raise AttributeError(item)
1597
1598     def __mro_entries__(self, bases):
1599         raise TypeError(f"Cannot subclass {self!r}")
1600
1601     def __repr__(self):
1602         return f'typing_extensions.{self._name}'
1603
1604     def __reduce__(self):
1605         return self._name
1606
1607     def __call__(self, *args, **kwds):
1608         raise TypeError(f"Cannot instantiate {self!r}")
1609
1610     def __or__(self, other):
1611         return typing.Union[self, other]
1612
1613     def __ror__(self, other):
1614         return typing.Union[other, self]
1615
1616     def __instancecheck__(self, obj):
1617         raise TypeError(f"{self} cannot be used with isinstance()")
1618
1619     def __subclasscheck__(self, cls):
1620         raise TypeError(f"{self} cannot be used with issubclass()")
1621
1622     @typing._tp_cache
1623     def __getitem__(self, parameters):
1624         return self._getitem(self, parameters)
1625
1626
1627 if hasattr(typing, "LiteralString"):
1628     LiteralString = typing.LiteralString
1629 else:
1630     @_SpecialForm
1631     def LiteralString(self, params):
1632         """Represents an arbitrary literal string.
1633
1634         Example::
1635
1636           from typing_extensions import LiteralString
1637
1638           def query(sql: LiteralString) -> ...:
1639               ...
1640
1641           query("SELECT * FROM table")  # ok
1642           query(f"SELECT * FROM {input()}")  # not ok
1643
1644         See PEP 675 for details.
1645
1646         """
1647         raise TypeError(f"{self} is not subscriptable")
1648
1649
1650 if hasattr(typing, "Self"):
1651     Self = typing.Self
1652 else:
1653     @_SpecialForm
1654     def Self(self, params):
1655         """Used to spell the type of "self" in classes.
1656
1657         Example::
1658
1659           from typing import Self
1660
1661           class ReturnsSelf:
1662               def parse(self, data: bytes) -> Self:
1663                   ...
1664                   return self
1665
1666         """
1667
1668         raise TypeError(f"{self} is not subscriptable")
1669
1670
1671 if hasattr(typing, "Never"):
1672     Never = typing.Never
1673 else:
1674     @_SpecialForm
1675     def Never(self, params):
1676         """The bottom type, a type that has no members.
1677
1678         This can be used to define a function that should never be
1679         called, or a function that never returns::
1680
1681             from typing_extensions import Never
1682
1683             def never_call_me(arg: Never) -> None:
1684                 pass
1685
1686             def int_or_str(arg: int | str) -> None:
1687                 never_call_me(arg)  # type checker error
1688                 match arg:
1689                     case int():
1690                         print("It's an int")
1691                     case str():
1692                         print("It's a str")
1693                     case _:
1694                         never_call_me(arg)  # ok, arg is of type Never
1695
1696         """
1697
1698         raise TypeError(f"{self} is not subscriptable")
1699
1700
1701 if hasattr(typing, 'Required'):
1702     Required = typing.Required
1703     NotRequired = typing.NotRequired
1704 elif sys.version_info[:2] >= (3, 9):
1705     class _ExtensionsSpecialForm(typing._SpecialForm, _root=True):
1706         def __repr__(self):
1707             return 'typing_extensions.' + self._name
1708
1709     @_ExtensionsSpecialForm
1710     def Required(self, parameters):
1711         """A special typing construct to mark a key of a total=False TypedDict
1712         as required. For example:
1713
1714             class Movie(TypedDict, total=False):
1715                 title: Required[str]
1716                 year: int
1717
1718             m = Movie(
1719                 title='The Matrix',  # typechecker error if key is omitted
1720                 year=1999,
1721             )
1722
1723         There is no runtime checking that a required key is actually provided
1724         when instantiating a related TypedDict.
1725         """
1726         item = typing._type_check(parameters, f'{self._name} accepts only a single type.')
1727         return typing._GenericAlias(self, (item,))
1728
1729     @_ExtensionsSpecialForm
1730     def NotRequired(self, parameters):
1731         """A special typing construct to mark a key of a TypedDict as
1732         potentially missing. For example:
1733
1734             class Movie(TypedDict):
1735                 title: str
1736                 year: NotRequired[int]
1737
1738             m = Movie(
1739                 title='The Matrix',  # typechecker error if key is omitted
1740                 year=1999,
1741             )
1742         """
1743         item = typing._type_check(parameters, f'{self._name} accepts only a single type.')
1744         return typing._GenericAlias(self, (item,))
1745
1746 else:
1747     class _RequiredForm(typing._SpecialForm, _root=True):
1748         def __repr__(self):
1749             return 'typing_extensions.' + self._name
1750
1751         def __getitem__(self, parameters):
1752             item = typing._type_check(parameters,
1753                                       f'{self._name} accepts only a single type.')
1754             return typing._GenericAlias(self, (item,))
1755
1756     Required = _RequiredForm(
1757         'Required',
1758         doc="""A special typing construct to mark a key of a total=False TypedDict
1759         as required. For example:
1760
1761             class Movie(TypedDict, total=False):
1762                 title: Required[str]
1763                 year: int
1764
1765             m = Movie(
1766                 title='The Matrix',  # typechecker error if key is omitted
1767                 year=1999,
1768             )
1769
1770         There is no runtime checking that a required key is actually provided
1771         when instantiating a related TypedDict.
1772         """)
1773     NotRequired = _RequiredForm(
1774         'NotRequired',
1775         doc="""A special typing construct to mark a key of a TypedDict as
1776         potentially missing. For example:
1777
1778             class Movie(TypedDict):
1779                 title: str
1780                 year: NotRequired[int]
1781
1782             m = Movie(
1783                 title='The Matrix',  # typechecker error if key is omitted
1784                 year=1999,
1785             )
1786         """)
1787
1788
1789 if hasattr(typing, "Unpack"):  # 3.11+
1790     Unpack = typing.Unpack
1791 elif sys.version_info[:2] >= (3, 9):
1792     class _UnpackSpecialForm(typing._SpecialForm, _root=True):
1793         def __repr__(self):
1794             return 'typing_extensions.' + self._name
1795
1796     class _UnpackAlias(typing._GenericAlias, _root=True):
1797         __class__ = typing.TypeVar
1798
1799     @_UnpackSpecialForm
1800     def Unpack(self, parameters):
1801         """A special typing construct to unpack a variadic type. For example:
1802
1803             Shape = TypeVarTuple('Shape')
1804             Batch = NewType('Batch', int)
1805
1806             def add_batch_axis(
1807                 x: Array[Unpack[Shape]]
1808             ) -> Array[Batch, Unpack[Shape]]: ...
1809
1810         """
1811         item = typing._type_check(parameters, f'{self._name} accepts only a single type.')
1812         return _UnpackAlias(self, (item,))
1813
1814     def _is_unpack(obj):
1815         return isinstance(obj, _UnpackAlias)
1816
1817 else:
1818     class _UnpackAlias(typing._GenericAlias, _root=True):
1819         __class__ = typing.TypeVar
1820
1821     class _UnpackForm(typing._SpecialForm, _root=True):
1822         def __repr__(self):
1823             return 'typing_extensions.' + self._name
1824
1825         def __getitem__(self, parameters):
1826             item = typing._type_check(parameters,
1827                                       f'{self._name} accepts only a single type.')
1828             return _UnpackAlias(self, (item,))
1829
1830     Unpack = _UnpackForm(
1831         'Unpack',
1832         doc="""A special typing construct to unpack a variadic type. For example:
1833
1834             Shape = TypeVarTuple('Shape')
1835             Batch = NewType('Batch', int)
1836
1837             def add_batch_axis(
1838                 x: Array[Unpack[Shape]]
1839             ) -> Array[Batch, Unpack[Shape]]: ...
1840
1841         """)
1842
1843     def _is_unpack(obj):
1844         return isinstance(obj, _UnpackAlias)
1845
1846
1847 if hasattr(typing, "TypeVarTuple"):  # 3.11+
1848
1849     # Add default Parameter - PEP 696
1850     class TypeVarTuple(typing.TypeVarTuple, _DefaultMixin, _root=True):
1851         """Type variable tuple."""
1852
1853         def __init__(self, name, *, default=None):
1854             super().__init__(name)
1855             _DefaultMixin.__init__(self, default)
1856
1857             # for pickling:
1858             try:
1859                 def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
1860             except (AttributeError, ValueError):
1861                 def_mod = None
1862             if def_mod != 'typing_extensions':
1863                 self.__module__ = def_mod
1864
1865 else:
1866     class TypeVarTuple(_DefaultMixin):
1867         """Type variable tuple.
1868
1869         Usage::
1870
1871             Ts = TypeVarTuple('Ts')
1872
1873         In the same way that a normal type variable is a stand-in for a single
1874         type such as ``int``, a type variable *tuple* is a stand-in for a *tuple*
1875         type such as ``Tuple[int, str]``.
1876
1877         Type variable tuples can be used in ``Generic`` declarations.
1878         Consider the following example::
1879
1880             class Array(Generic[*Ts]): ...
1881
1882         The ``Ts`` type variable tuple here behaves like ``tuple[T1, T2]``,
1883         where ``T1`` and ``T2`` are type variables. To use these type variables
1884         as type parameters of ``Array``, we must *unpack* the type variable tuple using
1885         the star operator: ``*Ts``. The signature of ``Array`` then behaves
1886         as if we had simply written ``class Array(Generic[T1, T2]): ...``.
1887         In contrast to ``Generic[T1, T2]``, however, ``Generic[*Shape]`` allows
1888         us to parameterise the class with an *arbitrary* number of type parameters.
1889
1890         Type variable tuples can be used anywhere a normal ``TypeVar`` can.
1891         This includes class definitions, as shown above, as well as function
1892         signatures and variable annotations::
1893
1894             class Array(Generic[*Ts]):
1895
1896                 def __init__(self, shape: Tuple[*Ts]):
1897                     self._shape: Tuple[*Ts] = shape
1898
1899                 def get_shape(self) -> Tuple[*Ts]:
1900                     return self._shape
1901
1902             shape = (Height(480), Width(640))
1903             x: Array[Height, Width] = Array(shape)
1904             y = abs(x)  # Inferred type is Array[Height, Width]
1905             z = x + x   #        ...    is Array[Height, Width]
1906             x.get_shape()  #     ...    is tuple[Height, Width]
1907
1908         """
1909
1910         # Trick Generic __parameters__.
1911         __class__ = typing.TypeVar
1912
1913         def __iter__(self):
1914             yield self.__unpacked__
1915
1916         def __init__(self, name, *, default=None):
1917             self.__name__ = name
1918             _DefaultMixin.__init__(self, default)
1919
1920             # for pickling:
1921             try:
1922                 def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')
1923             except (AttributeError, ValueError):
1924                 def_mod = None
1925             if def_mod != 'typing_extensions':
1926                 self.__module__ = def_mod
1927
1928             self.__unpacked__ = Unpack[self]
1929
1930         def __repr__(self):
1931             return self.__name__
1932
1933         def __hash__(self):
1934             return object.__hash__(self)
1935
1936         def __eq__(self, other):
1937             return self is other
1938
1939         def __reduce__(self):
1940             return self.__name__
1941
1942         def __init_subclass__(self, *args, **kwds):
1943             if '_root' not in kwds:
1944                 raise TypeError("Cannot subclass special typing classes")
1945
1946
1947 if hasattr(typing, "reveal_type"):
1948     reveal_type = typing.reveal_type
1949 else:
1950     def reveal_type(__obj: T) -> T:
1951         """Reveal the inferred type of a variable.
1952
1953         When a static type checker encounters a call to ``reveal_type()``,
1954         it will emit the inferred type of the argument::
1955
1956             x: int = 1
1957             reveal_type(x)
1958
1959         Running a static type checker (e.g., ``mypy``) on this example
1960         will produce output similar to 'Revealed type is "builtins.int"'.
1961
1962         At runtime, the function prints the runtime type of the
1963         argument and returns it unchanged.
1964
1965         """
1966         print(f"Runtime type is {type(__obj).__name__!r}", file=sys.stderr)
1967         return __obj
1968
1969
1970 if hasattr(typing, "assert_never"):
1971     assert_never = typing.assert_never
1972 else:
1973     def assert_never(__arg: Never) -> Never:
1974         """Assert to the type checker that a line of code is unreachable.
1975
1976         Example::
1977
1978             def int_or_str(arg: int | str) -> None:
1979                 match arg:
1980                     case int():
1981                         print("It's an int")
1982                     case str():
1983                         print("It's a str")
1984                     case _:
1985                         assert_never(arg)
1986
1987         If a type checker finds that a call to assert_never() is
1988         reachable, it will emit an error.
1989
1990         At runtime, this throws an exception when called.
1991
1992         """
1993         raise AssertionError("Expected code to be unreachable")
1994
1995
1996 if hasattr(typing, 'dataclass_transform'):
1997     dataclass_transform = typing.dataclass_transform
1998 else:
1999     def dataclass_transform(
2000         *,
2001         eq_default: bool = True,
2002         order_default: bool = False,
2003         kw_only_default: bool = False,
2004         field_specifiers: typing.Tuple[
2005             typing.Union[typing.Type[typing.Any], typing.Callable[..., typing.Any]],
2006             ...
2007         ] = (),
2008         **kwargs: typing.Any,
2009     ) -> typing.Callable[[T], T]:
2010         """Decorator that marks a function, class, or metaclass as providing
2011         dataclass-like behavior.
2012
2013         Example:
2014
2015             from typing_extensions import dataclass_transform
2016
2017             _T = TypeVar("_T")
2018
2019             # Used on a decorator function
2020             @dataclass_transform()
2021             def create_model(cls: type[_T]) -> type[_T]:
2022                 ...
2023                 return cls
2024
2025             @create_model
2026             class CustomerModel:
2027                 id: int
2028                 name: str
2029
2030             # Used on a base class
2031             @dataclass_transform()
2032             class ModelBase: ...
2033
2034             class CustomerModel(ModelBase):
2035                 id: int
2036                 name: str
2037
2038             # Used on a metaclass
2039             @dataclass_transform()
2040             class ModelMeta(type): ...
2041
2042             class ModelBase(metaclass=ModelMeta): ...
2043
2044             class CustomerModel(ModelBase):
2045                 id: int
2046                 name: str
2047
2048         Each of the ``CustomerModel`` classes defined in this example will now
2049         behave similarly to a dataclass created with the ``@dataclasses.dataclass``
2050         decorator. For example, the type checker will synthesize an ``__init__``
2051         method.
2052
2053         The arguments to this decorator can be used to customize this behavior:
2054         - ``eq_default`` indicates whether the ``eq`` parameter is assumed to be
2055           True or False if it is omitted by the caller.
2056         - ``order_default`` indicates whether the ``order`` parameter is
2057           assumed to be True or False if it is omitted by the caller.
2058         - ``kw_only_default`` indicates whether the ``kw_only`` parameter is
2059           assumed to be True or False if it is omitted by the caller.
2060         - ``field_specifiers`` specifies a static list of supported classes
2061           or functions that describe fields, similar to ``dataclasses.field()``.
2062
2063         At runtime, this decorator records its arguments in the
2064         ``__dataclass_transform__`` attribute on the decorated object.
2065
2066         See PEP 681 for details.
2067
2068         """
2069         def decorator(cls_or_fn):
2070             cls_or_fn.__dataclass_transform__ = {
2071                 "eq_default": eq_default,
2072                 "order_default": order_default,
2073                 "kw_only_default": kw_only_default,
2074                 "field_specifiers": field_specifiers,
2075                 "kwargs": kwargs,
2076             }
2077             return cls_or_fn
2078         return decorator
2079
2080
2081 if hasattr(typing, "override"):
2082     override = typing.override
2083 else:
2084     _F = typing.TypeVar("_F", bound=typing.Callable[..., typing.Any])
2085
2086     def override(__arg: _F) -> _F:
2087         """Indicate that a method is intended to override a method in a base class.
2088
2089         Usage:
2090
2091             class Base:
2092                 def method(self) -> None: ...
2093                     pass
2094
2095             class Child(Base):
2096                 @override
2097                 def method(self) -> None:
2098                     super().method()
2099
2100         When this decorator is applied to a method, the type checker will
2101         validate that it overrides a method with the same name on a base class.
2102         This helps prevent bugs that may occur when a base class is changed
2103         without an equivalent change to a child class.
2104
2105         See PEP 698 for details.
2106
2107         """
2108         return __arg
2109
2110
2111 # We have to do some monkey patching to deal with the dual nature of
2112 # Unpack/TypeVarTuple:
2113 # - We want Unpack to be a kind of TypeVar so it gets accepted in
2114 #   Generic[Unpack[Ts]]
2115 # - We want it to *not* be treated as a TypeVar for the purposes of
2116 #   counting generic parameters, so that when we subscript a generic,
2117 #   the runtime doesn't try to substitute the Unpack with the subscripted type.
2118 if not hasattr(typing, "TypeVarTuple"):
2119     typing._collect_type_vars = _collect_type_vars
2120     typing._check_generic = _check_generic
2121
2122
2123 # Backport typing.NamedTuple as it exists in Python 3.11.
2124 # In 3.11, the ability to define generic `NamedTuple`s was supported.
2125 # This was explicitly disallowed in 3.9-3.10, and only half-worked in <=3.8.
2126 if sys.version_info >= (3, 11):
2127     NamedTuple = typing.NamedTuple
2128 else:
2129     def _caller():
2130         try:
2131             return sys._getframe(2).f_globals.get('__name__', '__main__')
2132         except (AttributeError, ValueError):  # For platforms without _getframe()
2133             return None
2134
2135     def _make_nmtuple(name, types, module, defaults=()):
2136         fields = [n for n, t in types]
2137         annotations = {n: typing._type_check(t, f"field {n} annotation must be a type")
2138                        for n, t in types}
2139         nm_tpl = collections.namedtuple(name, fields,
2140                                         defaults=defaults, module=module)
2141         nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = annotations
2142         # The `_field_types` attribute was removed in 3.9;
2143         # in earlier versions, it is the same as the `__annotations__` attribute
2144         if sys.version_info < (3, 9):
2145             nm_tpl._field_types = annotations
2146         return nm_tpl
2147
2148     _prohibited_namedtuple_fields = typing._prohibited
2149     _special_namedtuple_fields = frozenset({'__module__', '__name__', '__annotations__'})
2150
2151     class _NamedTupleMeta(type):
2152         def __new__(cls, typename, bases, ns):
2153             assert _NamedTuple in bases
2154             for base in bases:
2155                 if base is not _NamedTuple and base is not typing.Generic:
2156                     raise TypeError(
2157                         'can only inherit from a NamedTuple type and Generic')
2158             bases = tuple(tuple if base is _NamedTuple else base for base in bases)
2159             types = ns.get('__annotations__', {})
2160             default_names = []
2161             for field_name in types:
2162                 if field_name in ns:
2163                     default_names.append(field_name)
2164                 elif default_names:
2165                     raise TypeError(f"Non-default namedtuple field {field_name} "
2166                                     f"cannot follow default field"
2167                                     f"{'s' if len(default_names) > 1 else ''} "
2168                                     f"{', '.join(default_names)}")
2169             nm_tpl = _make_nmtuple(
2170                 typename, types.items(),
2171                 defaults=[ns[n] for n in default_names],
2172                 module=ns['__module__']
2173             )
2174             nm_tpl.__bases__ = bases
2175             if typing.Generic in bases:
2176                 class_getitem = typing.Generic.__class_getitem__.__func__
2177                 nm_tpl.__class_getitem__ = classmethod(class_getitem)
2178             # update from user namespace without overriding special namedtuple attributes
2179             for key in ns:
2180                 if key in _prohibited_namedtuple_fields:
2181                     raise AttributeError("Cannot overwrite NamedTuple attribute " + key)
2182                 elif key not in _special_namedtuple_fields and key not in nm_tpl._fields:
2183                     setattr(nm_tpl, key, ns[key])
2184             if typing.Generic in bases:
2185                 nm_tpl.__init_subclass__()
2186             return nm_tpl
2187
2188     def NamedTuple(__typename, __fields=None, **kwargs):
2189         if __fields is None:
2190             __fields = kwargs.items()
2191         elif kwargs:
2192             raise TypeError("Either list of fields or keywords"
2193                             " can be provided to NamedTuple, not both")
2194         return _make_nmtuple(__typename, __fields, module=_caller())
2195
2196     NamedTuple.__doc__ = typing.NamedTuple.__doc__
2197     _NamedTuple = type.__new__(_NamedTupleMeta, 'NamedTuple', (), {})
2198
2199     # On 3.8+, alter the signature so that it matches typing.NamedTuple.
2200     # The signature of typing.NamedTuple on >=3.8 is invalid syntax in Python 3.7,
2201     # so just leave the signature as it is on 3.7.
2202     if sys.version_info >= (3, 8):
2203         NamedTuple.__text_signature__ = '(typename, fields=None, /, **kwargs)'
2204
2205     def _namedtuple_mro_entries(bases):
2206         assert NamedTuple in bases
2207         return (_NamedTuple,)
2208
2209     NamedTuple.__mro_entries__ = _namedtuple_mro_entries