python (3.12.0)

(root)/
lib/
python3.12/
typing.py
       1  """
       2  The typing module: Support for gradual typing as defined by PEP 484 and subsequent PEPs.
       3  
       4  Among other things, the module includes the following:
       5  * Generic, Protocol, and internal machinery to support generic aliases.
       6    All subscripted types like X[int], Union[int, str] are generic aliases.
       7  * Various "special forms" that have unique meanings in type annotations:
       8    NoReturn, Never, ClassVar, Self, Concatenate, Unpack, and others.
       9  * Classes whose instances can be type arguments to generic classes and functions:
      10    TypeVar, ParamSpec, TypeVarTuple.
      11  * Public helper functions: get_type_hints, overload, cast, final, and others.
      12  * Several protocols to support duck-typing:
      13    SupportsFloat, SupportsIndex, SupportsAbs, and others.
      14  * Special types: NewType, NamedTuple, TypedDict.
      15  * Deprecated wrapper submodules for re and io related types.
      16  * Deprecated aliases for builtin types and collections.abc ABCs.
      17  
      18  Any name not present in __all__ is an implementation detail
      19  that may be changed without notice. Use at your own risk!
      20  """
      21  
      22  from abc import abstractmethod, ABCMeta
      23  import collections
      24  from collections import defaultdict
      25  import collections.abc
      26  import copyreg
      27  import contextlib
      28  import functools
      29  import operator
      30  import re as stdlib_re  # Avoid confusion with the re we export.
      31  import sys
      32  import types
      33  import warnings
      34  from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias
      35  
      36  from _typing import (
      37      _idfunc,
      38      TypeVar,
      39      ParamSpec,
      40      TypeVarTuple,
      41      ParamSpecArgs,
      42      ParamSpecKwargs,
      43      TypeAliasType,
      44      Generic,
      45  )
      46  
      47  # Please keep __all__ alphabetized within each category.
      48  __all__ = [
      49      # Super-special typing primitives.
      50      'Annotated',
      51      'Any',
      52      'Callable',
      53      'ClassVar',
      54      'Concatenate',
      55      'Final',
      56      'ForwardRef',
      57      'Generic',
      58      'Literal',
      59      'Optional',
      60      'ParamSpec',
      61      'Protocol',
      62      'Tuple',
      63      'Type',
      64      'TypeVar',
      65      'TypeVarTuple',
      66      'Union',
      67  
      68      # ABCs (from collections.abc).
      69      'AbstractSet',  # collections.abc.Set.
      70      'ByteString',
      71      'Container',
      72      'ContextManager',
      73      'Hashable',
      74      'ItemsView',
      75      'Iterable',
      76      'Iterator',
      77      'KeysView',
      78      'Mapping',
      79      'MappingView',
      80      'MutableMapping',
      81      'MutableSequence',
      82      'MutableSet',
      83      'Sequence',
      84      'Sized',
      85      'ValuesView',
      86      'Awaitable',
      87      'AsyncIterator',
      88      'AsyncIterable',
      89      'Coroutine',
      90      'Collection',
      91      'AsyncGenerator',
      92      'AsyncContextManager',
      93  
      94      # Structural checks, a.k.a. protocols.
      95      'Reversible',
      96      'SupportsAbs',
      97      'SupportsBytes',
      98      'SupportsComplex',
      99      'SupportsFloat',
     100      'SupportsIndex',
     101      'SupportsInt',
     102      'SupportsRound',
     103  
     104      # Concrete collection types.
     105      'ChainMap',
     106      'Counter',
     107      'Deque',
     108      'Dict',
     109      'DefaultDict',
     110      'List',
     111      'OrderedDict',
     112      'Set',
     113      'FrozenSet',
     114      'NamedTuple',  # Not really a type.
     115      'TypedDict',  # Not really a type.
     116      'Generator',
     117  
     118      # Other concrete types.
     119      'BinaryIO',
     120      'IO',
     121      'Match',
     122      'Pattern',
     123      'TextIO',
     124  
     125      # One-off things.
     126      'AnyStr',
     127      'assert_type',
     128      'assert_never',
     129      'cast',
     130      'clear_overloads',
     131      'dataclass_transform',
     132      'final',
     133      'get_args',
     134      'get_origin',
     135      'get_overloads',
     136      'get_type_hints',
     137      'is_typeddict',
     138      'LiteralString',
     139      'Never',
     140      'NewType',
     141      'no_type_check',
     142      'no_type_check_decorator',
     143      'NoReturn',
     144      'NotRequired',
     145      'overload',
     146      'override',
     147      'ParamSpecArgs',
     148      'ParamSpecKwargs',
     149      'Required',
     150      'reveal_type',
     151      'runtime_checkable',
     152      'Self',
     153      'Text',
     154      'TYPE_CHECKING',
     155      'TypeAlias',
     156      'TypeGuard',
     157      'TypeAliasType',
     158      'Unpack',
     159  ]
     160  
     161  # The pseudo-submodules 're' and 'io' are part of the public
     162  # namespace, but excluded from __all__ because they might stomp on
     163  # legitimate imports of those modules.
     164  
     165  
     166  def _type_convert(arg, module=None, *, allow_special_forms=False):
     167      """For converting None to type(None), and strings to ForwardRef."""
     168      if arg is None:
     169          return type(None)
     170      if isinstance(arg, str):
     171          return ForwardRef(arg, module=module, is_class=allow_special_forms)
     172      return arg
     173  
     174  
     175  def _type_check(arg, msg, is_argument=True, module=None, *, allow_special_forms=False):
     176      """Check that the argument is a type, and return it (internal helper).
     177  
     178      As a special case, accept None and return type(None) instead. Also wrap strings
     179      into ForwardRef instances. Consider several corner cases, for example plain
     180      special forms like Union are not valid, while Union[int, str] is OK, etc.
     181      The msg argument is a human-readable error message, e.g.::
     182  
     183          "Union[arg, ...]: arg should be a type."
     184  
     185      We append the repr() of the actual value (truncated to 100 chars).
     186      """
     187      invalid_generic_forms = (Generic, Protocol)
     188      if not allow_special_forms:
     189          invalid_generic_forms += (ClassVar,)
     190          if is_argument:
     191              invalid_generic_forms += (Final,)
     192  
     193      arg = _type_convert(arg, module=module, allow_special_forms=allow_special_forms)
     194      if (isinstance(arg, _GenericAlias) and
     195              arg.__origin__ in invalid_generic_forms):
     196          raise TypeError(f"{arg} is not valid as type argument")
     197      if arg in (Any, LiteralString, NoReturn, Never, Self, TypeAlias):
     198          return arg
     199      if allow_special_forms and arg in (ClassVar, Final):
     200          return arg
     201      if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol):
     202          raise TypeError(f"Plain {arg} is not valid as type argument")
     203      if type(arg) is tuple:
     204          raise TypeError(f"{msg} Got {arg!r:.100}.")
     205      return arg
     206  
     207  
     208  def _is_param_expr(arg):
     209      return arg is ... or isinstance(arg,
     210              (tuple, list, ParamSpec, _ConcatenateGenericAlias))
     211  
     212  
     213  def _should_unflatten_callable_args(typ, args):
     214      """Internal helper for munging collections.abc.Callable's __args__.
     215  
     216      The canonical representation for a Callable's __args__ flattens the
     217      argument types, see https://github.com/python/cpython/issues/86361.
     218  
     219      For example::
     220  
     221          assert collections.abc.Callable[[int, int], str].__args__ == (int, int, str)
     222          assert collections.abc.Callable[ParamSpec, str].__args__ == (ParamSpec, str)
     223  
     224      As a result, if we need to reconstruct the Callable from its __args__,
     225      we need to unflatten it.
     226      """
     227      return (
     228          typ.__origin__ is collections.abc.Callable
     229          and not (len(args) == 2 and _is_param_expr(args[0]))
     230      )
     231  
     232  
     233  def _type_repr(obj):
     234      """Return the repr() of an object, special-casing types (internal helper).
     235  
     236      If obj is a type, we return a shorter version than the default
     237      type.__repr__, based on the module and qualified name, which is
     238      typically enough to uniquely identify a type.  For everything
     239      else, we fall back on repr(obj).
     240      """
     241      # When changing this function, don't forget about
     242      # `_collections_abc._type_repr`, which does the same thing
     243      # and must be consistent with this one.
     244      if isinstance(obj, type):
     245          if obj.__module__ == 'builtins':
     246              return obj.__qualname__
     247          return f'{obj.__module__}.{obj.__qualname__}'
     248      if obj is ...:
     249          return '...'
     250      if isinstance(obj, types.FunctionType):
     251          return obj.__name__
     252      if isinstance(obj, tuple):
     253          # Special case for `repr` of types with `ParamSpec`:
     254          return '[' + ', '.join(_type_repr(t) for t in obj) + ']'
     255      return repr(obj)
     256  
     257  
     258  def _collect_parameters(args):
     259      """Collect all type variables and parameter specifications in args
     260      in order of first appearance (lexicographic order).
     261  
     262      For example::
     263  
     264          assert _collect_parameters((T, Callable[P, T])) == (T, P)
     265      """
     266      parameters = []
     267      for t in args:
     268          if isinstance(t, type):
     269              # We don't want __parameters__ descriptor of a bare Python class.
     270              pass
     271          elif isinstance(t, tuple):
     272              # `t` might be a tuple, when `ParamSpec` is substituted with
     273              # `[T, int]`, or `[int, *Ts]`, etc.
     274              for x in t:
     275                  for collected in _collect_parameters([x]):
     276                      if collected not in parameters:
     277                          parameters.append(collected)
     278          elif hasattr(t, '__typing_subst__'):
     279              if t not in parameters:
     280                  parameters.append(t)
     281          else:
     282              for x in getattr(t, '__parameters__', ()):
     283                  if x not in parameters:
     284                      parameters.append(x)
     285      return tuple(parameters)
     286  
     287  
     288  def _check_generic(cls, parameters, elen):
     289      """Check correct count for parameters of a generic cls (internal helper).
     290  
     291      This gives a nice error message in case of count mismatch.
     292      """
     293      if not elen:
     294          raise TypeError(f"{cls} is not a generic class")
     295      alen = len(parameters)
     296      if alen != elen:
     297          raise TypeError(f"Too {'many' if alen > elen else 'few'} arguments for {cls};"
     298                          f" actual {alen}, expected {elen}")
     299  
     300  def _unpack_args(args):
     301      newargs = []
     302      for arg in args:
     303          subargs = getattr(arg, '__typing_unpacked_tuple_args__', None)
     304          if subargs is not None and not (subargs and subargs[-1] is ...):
     305              newargs.extend(subargs)
     306          else:
     307              newargs.append(arg)
     308      return newargs
     309  
     310  def _deduplicate(params):
     311      # Weed out strict duplicates, preserving the first of each occurrence.
     312      all_params = set(params)
     313      if len(all_params) < len(params):
     314          new_params = []
     315          for t in params:
     316              if t in all_params:
     317                  new_params.append(t)
     318                  all_params.remove(t)
     319          params = new_params
     320          assert not all_params, all_params
     321      return params
     322  
     323  
     324  def _remove_dups_flatten(parameters):
     325      """Internal helper for Union creation and substitution.
     326  
     327      Flatten Unions among parameters, then remove duplicates.
     328      """
     329      # Flatten out Union[Union[...], ...].
     330      params = []
     331      for p in parameters:
     332          if isinstance(p, (_UnionGenericAlias, types.UnionType)):
     333              params.extend(p.__args__)
     334          else:
     335              params.append(p)
     336  
     337      return tuple(_deduplicate(params))
     338  
     339  
     340  def _flatten_literal_params(parameters):
     341      """Internal helper for Literal creation: flatten Literals among parameters."""
     342      params = []
     343      for p in parameters:
     344          if isinstance(p, _LiteralGenericAlias):
     345              params.extend(p.__args__)
     346          else:
     347              params.append(p)
     348      return tuple(params)
     349  
     350  
     351  _cleanups = []
     352  _caches = {}
     353  
     354  
     355  def _tp_cache(func=None, /, *, typed=False):
     356      """Internal wrapper caching __getitem__ of generic types.
     357  
     358      For non-hashable arguments, the original function is used as a fallback.
     359      """
     360      def decorator(func):
     361          # The callback 'inner' references the newly created lru_cache
     362          # indirectly by performing a lookup in the global '_caches' dictionary.
     363          # This breaks a reference that can be problematic when combined with
     364          # C API extensions that leak references to types. See GH-98253.
     365  
     366          cache = functools.lru_cache(typed=typed)(func)
     367          _caches[func] = cache
     368          _cleanups.append(cache.cache_clear)
     369          del cache
     370  
     371          @functools.wraps(func)
     372          def inner(*args, **kwds):
     373              try:
     374                  return _caches[func](*args, **kwds)
     375              except TypeError:
     376                  pass  # All real errors (not unhashable args) are raised below.
     377              return func(*args, **kwds)
     378          return inner
     379  
     380      if func is not None:
     381          return decorator(func)
     382  
     383      return decorator
     384  
     385  def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
     386      """Evaluate all forward references in the given type t.
     387  
     388      For use of globalns and localns see the docstring for get_type_hints().
     389      recursive_guard is used to prevent infinite recursion with a recursive
     390      ForwardRef.
     391      """
     392      if isinstance(t, ForwardRef):
     393          return t._evaluate(globalns, localns, recursive_guard)
     394      if isinstance(t, (_GenericAlias, GenericAlias, types.UnionType)):
     395          if isinstance(t, GenericAlias):
     396              args = tuple(
     397                  ForwardRef(arg) if isinstance(arg, str) else arg
     398                  for arg in t.__args__
     399              )
     400              is_unpacked = t.__unpacked__
     401              if _should_unflatten_callable_args(t, args):
     402                  t = t.__origin__[(args[:-1], args[-1])]
     403              else:
     404                  t = t.__origin__[args]
     405              if is_unpacked:
     406                  t = Unpack[t]
     407          ev_args = tuple(_eval_type(a, globalns, localns, recursive_guard) for a in t.__args__)
     408          if ev_args == t.__args__:
     409              return t
     410          if isinstance(t, GenericAlias):
     411              return GenericAlias(t.__origin__, ev_args)
     412          if isinstance(t, types.UnionType):
     413              return functools.reduce(operator.or_, ev_args)
     414          else:
     415              return t.copy_with(ev_args)
     416      return t
     417  
     418  
     419  class ESC[4;38;5;81m_Final:
     420      """Mixin to prohibit subclassing."""
     421  
     422      __slots__ = ('__weakref__',)
     423  
     424      def __init_subclass__(cls, /, *args, **kwds):
     425          if '_root' not in kwds:
     426              raise TypeError("Cannot subclass special typing classes")
     427  
     428  
     429  class ESC[4;38;5;81m_NotIterable:
     430      """Mixin to prevent iteration, without being compatible with Iterable.
     431  
     432      That is, we could do::
     433  
     434          def __iter__(self): raise TypeError()
     435  
     436      But this would make users of this mixin duck type-compatible with
     437      collections.abc.Iterable - isinstance(foo, Iterable) would be True.
     438  
     439      Luckily, we can instead prevent iteration by setting __iter__ to None, which
     440      is treated specially.
     441      """
     442  
     443      __slots__ = ()
     444      __iter__ = None
     445  
     446  
     447  # Internal indicator of special typing constructs.
     448  # See __doc__ instance attribute for specific docs.
     449  class ESC[4;38;5;81m_SpecialForm(ESC[4;38;5;149m_Final, ESC[4;38;5;149m_NotIterable, _root=ESC[4;38;5;149mTrue):
     450      __slots__ = ('_name', '__doc__', '_getitem')
     451  
     452      def __init__(self, getitem):
     453          self._getitem = getitem
     454          self._name = getitem.__name__
     455          self.__doc__ = getitem.__doc__
     456  
     457      def __getattr__(self, item):
     458          if item in {'__name__', '__qualname__'}:
     459              return self._name
     460  
     461          raise AttributeError(item)
     462  
     463      def __mro_entries__(self, bases):
     464          raise TypeError(f"Cannot subclass {self!r}")
     465  
     466      def __repr__(self):
     467          return 'typing.' + self._name
     468  
     469      def __reduce__(self):
     470          return self._name
     471  
     472      def __call__(self, *args, **kwds):
     473          raise TypeError(f"Cannot instantiate {self!r}")
     474  
     475      def __or__(self, other):
     476          return Union[self, other]
     477  
     478      def __ror__(self, other):
     479          return Union[other, self]
     480  
     481      def __instancecheck__(self, obj):
     482          raise TypeError(f"{self} cannot be used with isinstance()")
     483  
     484      def __subclasscheck__(self, cls):
     485          raise TypeError(f"{self} cannot be used with issubclass()")
     486  
     487      @_tp_cache
     488      def __getitem__(self, parameters):
     489          return self._getitem(self, parameters)
     490  
     491  
     492  class ESC[4;38;5;81m_LiteralSpecialForm(ESC[4;38;5;149m_SpecialForm, _root=ESC[4;38;5;149mTrue):
     493      def __getitem__(self, parameters):
     494          if not isinstance(parameters, tuple):
     495              parameters = (parameters,)
     496          return self._getitem(self, *parameters)
     497  
     498  
     499  class ESC[4;38;5;81m_AnyMeta(ESC[4;38;5;149mtype):
     500      def __instancecheck__(self, obj):
     501          if self is Any:
     502              raise TypeError("typing.Any cannot be used with isinstance()")
     503          return super().__instancecheck__(obj)
     504  
     505      def __repr__(self):
     506          if self is Any:
     507              return "typing.Any"
     508          return super().__repr__()  # respect to subclasses
     509  
     510  
     511  class ESC[4;38;5;81mAny(metaclass=ESC[4;38;5;149m_AnyMeta):
     512      """Special type indicating an unconstrained type.
     513  
     514      - Any is compatible with every type.
     515      - Any assumed to have all methods.
     516      - All values assumed to be instances of Any.
     517  
     518      Note that all the above statements are true from the point of view of
     519      static type checkers. At runtime, Any should not be used with instance
     520      checks.
     521      """
     522  
     523      def __new__(cls, *args, **kwargs):
     524          if cls is Any:
     525              raise TypeError("Any cannot be instantiated")
     526          return super().__new__(cls, *args, **kwargs)
     527  
     528  
     529  @_SpecialForm
     530  def NoReturn(self, parameters):
     531      """Special type indicating functions that never return.
     532  
     533      Example::
     534  
     535          from typing import NoReturn
     536  
     537          def stop() -> NoReturn:
     538              raise Exception('no way')
     539  
     540      NoReturn can also be used as a bottom type, a type that
     541      has no values. Starting in Python 3.11, the Never type should
     542      be used for this concept instead. Type checkers should treat the two
     543      equivalently.
     544      """
     545      raise TypeError(f"{self} is not subscriptable")
     546  
     547  # This is semantically identical to NoReturn, but it is implemented
     548  # separately so that type checkers can distinguish between the two
     549  # if they want.
     550  @_SpecialForm
     551  def Never(self, parameters):
     552      """The bottom type, a type that has no members.
     553  
     554      This can be used to define a function that should never be
     555      called, or a function that never returns::
     556  
     557          from typing import Never
     558  
     559          def never_call_me(arg: Never) -> None:
     560              pass
     561  
     562          def int_or_str(arg: int | str) -> None:
     563              never_call_me(arg)  # type checker error
     564              match arg:
     565                  case int():
     566                      print("It's an int")
     567                  case str():
     568                      print("It's a str")
     569                  case _:
     570                      never_call_me(arg)  # OK, arg is of type Never
     571      """
     572      raise TypeError(f"{self} is not subscriptable")
     573  
     574  
     575  @_SpecialForm
     576  def Self(self, parameters):
     577      """Used to spell the type of "self" in classes.
     578  
     579      Example::
     580  
     581          from typing import Self
     582  
     583          class Foo:
     584              def return_self(self) -> Self:
     585                  ...
     586                  return self
     587  
     588      This is especially useful for:
     589          - classmethods that are used as alternative constructors
     590          - annotating an `__enter__` method which returns self
     591      """
     592      raise TypeError(f"{self} is not subscriptable")
     593  
     594  
     595  @_SpecialForm
     596  def LiteralString(self, parameters):
     597      """Represents an arbitrary literal string.
     598  
     599      Example::
     600  
     601          from typing import LiteralString
     602  
     603          def run_query(sql: LiteralString) -> None:
     604              ...
     605  
     606          def caller(arbitrary_string: str, literal_string: LiteralString) -> None:
     607              run_query("SELECT * FROM students")  # OK
     608              run_query(literal_string)  # OK
     609              run_query("SELECT * FROM " + literal_string)  # OK
     610              run_query(arbitrary_string)  # type checker error
     611              run_query(  # type checker error
     612                  f"SELECT * FROM students WHERE name = {arbitrary_string}"
     613              )
     614  
     615      Only string literals and other LiteralStrings are compatible
     616      with LiteralString. This provides a tool to help prevent
     617      security issues such as SQL injection.
     618      """
     619      raise TypeError(f"{self} is not subscriptable")
     620  
     621  
     622  @_SpecialForm
     623  def ClassVar(self, parameters):
     624      """Special type construct to mark class variables.
     625  
     626      An annotation wrapped in ClassVar indicates that a given
     627      attribute is intended to be used as a class variable and
     628      should not be set on instances of that class.
     629  
     630      Usage::
     631  
     632          class Starship:
     633              stats: ClassVar[dict[str, int]] = {} # class variable
     634              damage: int = 10                     # instance variable
     635  
     636      ClassVar accepts only types and cannot be further subscribed.
     637  
     638      Note that ClassVar is not a class itself, and should not
     639      be used with isinstance() or issubclass().
     640      """
     641      item = _type_check(parameters, f'{self} accepts only single type.')
     642      return _GenericAlias(self, (item,))
     643  
     644  @_SpecialForm
     645  def Final(self, parameters):
     646      """Special typing construct to indicate final names to type checkers.
     647  
     648      A final name cannot be re-assigned or overridden in a subclass.
     649  
     650      For example::
     651  
     652          MAX_SIZE: Final = 9000
     653          MAX_SIZE += 1  # Error reported by type checker
     654  
     655          class Connection:
     656              TIMEOUT: Final[int] = 10
     657  
     658          class FastConnector(Connection):
     659              TIMEOUT = 1  # Error reported by type checker
     660  
     661      There is no runtime checking of these properties.
     662      """
     663      item = _type_check(parameters, f'{self} accepts only single type.')
     664      return _GenericAlias(self, (item,))
     665  
     666  @_SpecialForm
     667  def Union(self, parameters):
     668      """Union type; Union[X, Y] means either X or Y.
     669  
     670      On Python 3.10 and higher, the | operator
     671      can also be used to denote unions;
     672      X | Y means the same thing to the type checker as Union[X, Y].
     673  
     674      To define a union, use e.g. Union[int, str]. Details:
     675      - The arguments must be types and there must be at least one.
     676      - None as an argument is a special case and is replaced by
     677        type(None).
     678      - Unions of unions are flattened, e.g.::
     679  
     680          assert Union[Union[int, str], float] == Union[int, str, float]
     681  
     682      - Unions of a single argument vanish, e.g.::
     683  
     684          assert Union[int] == int  # The constructor actually returns int
     685  
     686      - Redundant arguments are skipped, e.g.::
     687  
     688          assert Union[int, str, int] == Union[int, str]
     689  
     690      - When comparing unions, the argument order is ignored, e.g.::
     691  
     692          assert Union[int, str] == Union[str, int]
     693  
     694      - You cannot subclass or instantiate a union.
     695      - You can use Optional[X] as a shorthand for Union[X, None].
     696      """
     697      if parameters == ():
     698          raise TypeError("Cannot take a Union of no types.")
     699      if not isinstance(parameters, tuple):
     700          parameters = (parameters,)
     701      msg = "Union[arg, ...]: each arg must be a type."
     702      parameters = tuple(_type_check(p, msg) for p in parameters)
     703      parameters = _remove_dups_flatten(parameters)
     704      if len(parameters) == 1:
     705          return parameters[0]
     706      if len(parameters) == 2 and type(None) in parameters:
     707          return _UnionGenericAlias(self, parameters, name="Optional")
     708      return _UnionGenericAlias(self, parameters)
     709  
     710  def _make_union(left, right):
     711      """Used from the C implementation of TypeVar.
     712  
     713      TypeVar.__or__ calls this instead of returning types.UnionType
     714      because we want to allow unions between TypeVars and strings
     715      (forward references).
     716      """
     717      return Union[left, right]
     718  
     719  @_SpecialForm
     720  def Optional(self, parameters):
     721      """Optional[X] is equivalent to Union[X, None]."""
     722      arg = _type_check(parameters, f"{self} requires a single type.")
     723      return Union[arg, type(None)]
     724  
     725  @_LiteralSpecialForm
     726  @_tp_cache(typed=True)
     727  def Literal(self, *parameters):
     728      """Special typing form to define literal types (a.k.a. value types).
     729  
     730      This form can be used to indicate to type checkers that the corresponding
     731      variable or function parameter has a value equivalent to the provided
     732      literal (or one of several literals)::
     733  
     734          def validate_simple(data: Any) -> Literal[True]:  # always returns True
     735              ...
     736  
     737          MODE = Literal['r', 'rb', 'w', 'wb']
     738          def open_helper(file: str, mode: MODE) -> str:
     739              ...
     740  
     741          open_helper('/some/path', 'r')  # Passes type check
     742          open_helper('/other/path', 'typo')  # Error in type checker
     743  
     744      Literal[...] cannot be subclassed. At runtime, an arbitrary value
     745      is allowed as type argument to Literal[...], but type checkers may
     746      impose restrictions.
     747      """
     748      # There is no '_type_check' call because arguments to Literal[...] are
     749      # values, not types.
     750      parameters = _flatten_literal_params(parameters)
     751  
     752      try:
     753          parameters = tuple(p for p, _ in _deduplicate(list(_value_and_type_iter(parameters))))
     754      except TypeError:  # unhashable parameters
     755          pass
     756  
     757      return _LiteralGenericAlias(self, parameters)
     758  
     759  
     760  @_SpecialForm
     761  def TypeAlias(self, parameters):
     762      """Special form for marking type aliases.
     763  
     764      Use TypeAlias to indicate that an assignment should
     765      be recognized as a proper type alias definition by type
     766      checkers.
     767  
     768      For example::
     769  
     770          Predicate: TypeAlias = Callable[..., bool]
     771  
     772      It's invalid when used anywhere except as in the example above.
     773      """
     774      raise TypeError(f"{self} is not subscriptable")
     775  
     776  
     777  @_SpecialForm
     778  def Concatenate(self, parameters):
     779      """Special form for annotating higher-order functions.
     780  
     781      ``Concatenate`` can be used in conjunction with ``ParamSpec`` and
     782      ``Callable`` to represent a higher-order function which adds, removes or
     783      transforms the parameters of a callable.
     784  
     785      For example::
     786  
     787          Callable[Concatenate[int, P], int]
     788  
     789      See PEP 612 for detailed information.
     790      """
     791      if parameters == ():
     792          raise TypeError("Cannot take a Concatenate of no types.")
     793      if not isinstance(parameters, tuple):
     794          parameters = (parameters,)
     795      if not (parameters[-1] is ... or isinstance(parameters[-1], ParamSpec)):
     796          raise TypeError("The last parameter to Concatenate should be a "
     797                          "ParamSpec variable or ellipsis.")
     798      msg = "Concatenate[arg, ...]: each arg must be a type."
     799      parameters = (*(_type_check(p, msg) for p in parameters[:-1]), parameters[-1])
     800      return _ConcatenateGenericAlias(self, parameters)
     801  
     802  
     803  @_SpecialForm
     804  def TypeGuard(self, parameters):
     805      """Special typing construct for marking user-defined type guard functions.
     806  
     807      ``TypeGuard`` can be used to annotate the return type of a user-defined
     808      type guard function.  ``TypeGuard`` only accepts a single type argument.
     809      At runtime, functions marked this way should return a boolean.
     810  
     811      ``TypeGuard`` aims to benefit *type narrowing* -- a technique used by static
     812      type checkers to determine a more precise type of an expression within a
     813      program's code flow.  Usually type narrowing is done by analyzing
     814      conditional code flow and applying the narrowing to a block of code.  The
     815      conditional expression here is sometimes referred to as a "type guard".
     816  
     817      Sometimes it would be convenient to use a user-defined boolean function
     818      as a type guard.  Such a function should use ``TypeGuard[...]`` as its
     819      return type to alert static type checkers to this intention.
     820  
     821      Using  ``-> TypeGuard`` tells the static type checker that for a given
     822      function:
     823  
     824      1. The return value is a boolean.
     825      2. If the return value is ``True``, the type of its argument
     826         is the type inside ``TypeGuard``.
     827  
     828         For example::
     829  
     830             def is_str(val: Union[str, float]):
     831                 # "isinstance" type guard
     832                 if isinstance(val, str):
     833                     # Type of ``val`` is narrowed to ``str``
     834                     ...
     835                 else:
     836                     # Else, type of ``val`` is narrowed to ``float``.
     837                     ...
     838  
     839      Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower
     840      form of ``TypeA`` (it can even be a wider form) and this may lead to
     841      type-unsafe results.  The main reason is to allow for things like
     842      narrowing ``List[object]`` to ``List[str]`` even though the latter is not
     843      a subtype of the former, since ``List`` is invariant.  The responsibility of
     844      writing type-safe type guards is left to the user.
     845  
     846      ``TypeGuard`` also works with type variables.  For more information, see
     847      PEP 647 (User-Defined Type Guards).
     848      """
     849      item = _type_check(parameters, f'{self} accepts only single type.')
     850      return _GenericAlias(self, (item,))
     851  
     852  
     853  class ESC[4;38;5;81mForwardRef(ESC[4;38;5;149m_Final, _root=ESC[4;38;5;149mTrue):
     854      """Internal wrapper to hold a forward reference."""
     855  
     856      __slots__ = ('__forward_arg__', '__forward_code__',
     857                   '__forward_evaluated__', '__forward_value__',
     858                   '__forward_is_argument__', '__forward_is_class__',
     859                   '__forward_module__')
     860  
     861      def __init__(self, arg, is_argument=True, module=None, *, is_class=False):
     862          if not isinstance(arg, str):
     863              raise TypeError(f"Forward reference must be a string -- got {arg!r}")
     864  
     865          # If we do `def f(*args: *Ts)`, then we'll have `arg = '*Ts'`.
     866          # Unfortunately, this isn't a valid expression on its own, so we
     867          # do the unpacking manually.
     868          if arg[0] == '*':
     869              arg_to_compile = f'({arg},)[0]'  # E.g. (*Ts,)[0] or (*tuple[int, int],)[0]
     870          else:
     871              arg_to_compile = arg
     872          try:
     873              code = compile(arg_to_compile, '<string>', 'eval')
     874          except SyntaxError:
     875              raise SyntaxError(f"Forward reference must be an expression -- got {arg!r}")
     876  
     877          self.__forward_arg__ = arg
     878          self.__forward_code__ = code
     879          self.__forward_evaluated__ = False
     880          self.__forward_value__ = None
     881          self.__forward_is_argument__ = is_argument
     882          self.__forward_is_class__ = is_class
     883          self.__forward_module__ = module
     884  
     885      def _evaluate(self, globalns, localns, recursive_guard):
     886          if self.__forward_arg__ in recursive_guard:
     887              return self
     888          if not self.__forward_evaluated__ or localns is not globalns:
     889              if globalns is None and localns is None:
     890                  globalns = localns = {}
     891              elif globalns is None:
     892                  globalns = localns
     893              elif localns is None:
     894                  localns = globalns
     895              if self.__forward_module__ is not None:
     896                  globalns = getattr(
     897                      sys.modules.get(self.__forward_module__, None), '__dict__', globalns
     898                  )
     899              type_ = _type_check(
     900                  eval(self.__forward_code__, globalns, localns),
     901                  "Forward references must evaluate to types.",
     902                  is_argument=self.__forward_is_argument__,
     903                  allow_special_forms=self.__forward_is_class__,
     904              )
     905              self.__forward_value__ = _eval_type(
     906                  type_, globalns, localns, recursive_guard | {self.__forward_arg__}
     907              )
     908              self.__forward_evaluated__ = True
     909          return self.__forward_value__
     910  
     911      def __eq__(self, other):
     912          if not isinstance(other, ForwardRef):
     913              return NotImplemented
     914          if self.__forward_evaluated__ and other.__forward_evaluated__:
     915              return (self.__forward_arg__ == other.__forward_arg__ and
     916                      self.__forward_value__ == other.__forward_value__)
     917          return (self.__forward_arg__ == other.__forward_arg__ and
     918                  self.__forward_module__ == other.__forward_module__)
     919  
     920      def __hash__(self):
     921          return hash((self.__forward_arg__, self.__forward_module__))
     922  
     923      def __or__(self, other):
     924          return Union[self, other]
     925  
     926      def __ror__(self, other):
     927          return Union[other, self]
     928  
     929      def __repr__(self):
     930          if self.__forward_module__ is None:
     931              module_repr = ''
     932          else:
     933              module_repr = f', module={self.__forward_module__!r}'
     934          return f'ForwardRef({self.__forward_arg__!r}{module_repr})'
     935  
     936  
     937  def _is_unpacked_typevartuple(x: Any) -> bool:
     938      return ((not isinstance(x, type)) and
     939              getattr(x, '__typing_is_unpacked_typevartuple__', False))
     940  
     941  
     942  def _is_typevar_like(x: Any) -> bool:
     943      return isinstance(x, (TypeVar, ParamSpec)) or _is_unpacked_typevartuple(x)
     944  
     945  
     946  class ESC[4;38;5;81m_PickleUsingNameMixin:
     947      """Mixin enabling pickling based on self.__name__."""
     948  
     949      def __reduce__(self):
     950          return self.__name__
     951  
     952  
     953  def _typevar_subst(self, arg):
     954      msg = "Parameters to generic types must be types."
     955      arg = _type_check(arg, msg, is_argument=True)
     956      if ((isinstance(arg, _GenericAlias) and arg.__origin__ is Unpack) or
     957          (isinstance(arg, GenericAlias) and getattr(arg, '__unpacked__', False))):
     958          raise TypeError(f"{arg} is not valid as type argument")
     959      return arg
     960  
     961  
     962  def _typevartuple_prepare_subst(self, alias, args):
     963      params = alias.__parameters__
     964      typevartuple_index = params.index(self)
     965      for param in params[typevartuple_index + 1:]:
     966          if isinstance(param, TypeVarTuple):
     967              raise TypeError(f"More than one TypeVarTuple parameter in {alias}")
     968  
     969      alen = len(args)
     970      plen = len(params)
     971      left = typevartuple_index
     972      right = plen - typevartuple_index - 1
     973      var_tuple_index = None
     974      fillarg = None
     975      for k, arg in enumerate(args):
     976          if not isinstance(arg, type):
     977              subargs = getattr(arg, '__typing_unpacked_tuple_args__', None)
     978              if subargs and len(subargs) == 2 and subargs[-1] is ...:
     979                  if var_tuple_index is not None:
     980                      raise TypeError("More than one unpacked arbitrary-length tuple argument")
     981                  var_tuple_index = k
     982                  fillarg = subargs[0]
     983      if var_tuple_index is not None:
     984          left = min(left, var_tuple_index)
     985          right = min(right, alen - var_tuple_index - 1)
     986      elif left + right > alen:
     987          raise TypeError(f"Too few arguments for {alias};"
     988                          f" actual {alen}, expected at least {plen-1}")
     989  
     990      return (
     991          *args[:left],
     992          *([fillarg]*(typevartuple_index - left)),
     993          tuple(args[left: alen - right]),
     994          *([fillarg]*(plen - right - left - typevartuple_index - 1)),
     995          *args[alen - right:],
     996      )
     997  
     998  
     999  def _paramspec_subst(self, arg):
    1000      if isinstance(arg, (list, tuple)):
    1001          arg = tuple(_type_check(a, "Expected a type.") for a in arg)
    1002      elif not _is_param_expr(arg):
    1003          raise TypeError(f"Expected a list of types, an ellipsis, "
    1004                          f"ParamSpec, or Concatenate. Got {arg}")
    1005      return arg
    1006  
    1007  
    1008  def _paramspec_prepare_subst(self, alias, args):
    1009      params = alias.__parameters__
    1010      i = params.index(self)
    1011      if i >= len(args):
    1012          raise TypeError(f"Too few arguments for {alias}")
    1013      # Special case where Z[[int, str, bool]] == Z[int, str, bool] in PEP 612.
    1014      if len(params) == 1 and not _is_param_expr(args[0]):
    1015          assert i == 0
    1016          args = (args,)
    1017      # Convert lists to tuples to help other libraries cache the results.
    1018      elif isinstance(args[i], list):
    1019          args = (*args[:i], tuple(args[i]), *args[i+1:])
    1020      return args
    1021  
    1022  
    1023  @_tp_cache
    1024  def _generic_class_getitem(cls, params):
    1025      """Parameterizes a generic class.
    1026  
    1027      At least, parameterizing a generic class is the *main* thing this method
    1028      does. For example, for some generic class `Foo`, this is called when we
    1029      do `Foo[int]` - there, with `cls=Foo` and `params=int`.
    1030  
    1031      However, note that this method is also called when defining generic
    1032      classes in the first place with `class Foo(Generic[T]): ...`.
    1033      """
    1034      if not isinstance(params, tuple):
    1035          params = (params,)
    1036  
    1037      params = tuple(_type_convert(p) for p in params)
    1038      is_generic_or_protocol = cls in (Generic, Protocol)
    1039  
    1040      if is_generic_or_protocol:
    1041          # Generic and Protocol can only be subscripted with unique type variables.
    1042          if not params:
    1043              raise TypeError(
    1044                  f"Parameter list to {cls.__qualname__}[...] cannot be empty"
    1045              )
    1046          if not all(_is_typevar_like(p) for p in params):
    1047              raise TypeError(
    1048                  f"Parameters to {cls.__name__}[...] must all be type variables "
    1049                  f"or parameter specification variables.")
    1050          if len(set(params)) != len(params):
    1051              raise TypeError(
    1052                  f"Parameters to {cls.__name__}[...] must all be unique")
    1053      else:
    1054          # Subscripting a regular Generic subclass.
    1055          for param in cls.__parameters__:
    1056              prepare = getattr(param, '__typing_prepare_subst__', None)
    1057              if prepare is not None:
    1058                  params = prepare(cls, params)
    1059          _check_generic(cls, params, len(cls.__parameters__))
    1060  
    1061          new_args = []
    1062          for param, new_arg in zip(cls.__parameters__, params):
    1063              if isinstance(param, TypeVarTuple):
    1064                  new_args.extend(new_arg)
    1065              else:
    1066                  new_args.append(new_arg)
    1067          params = tuple(new_args)
    1068  
    1069      return _GenericAlias(cls, params)
    1070  
    1071  
    1072  def _generic_init_subclass(cls, *args, **kwargs):
    1073      super(Generic, cls).__init_subclass__(*args, **kwargs)
    1074      tvars = []
    1075      if '__orig_bases__' in cls.__dict__:
    1076          error = Generic in cls.__orig_bases__
    1077      else:
    1078          error = (Generic in cls.__bases__ and
    1079                      cls.__name__ != 'Protocol' and
    1080                      type(cls) != _TypedDictMeta)
    1081      if error:
    1082          raise TypeError("Cannot inherit from plain Generic")
    1083      if '__orig_bases__' in cls.__dict__:
    1084          tvars = _collect_parameters(cls.__orig_bases__)
    1085          # Look for Generic[T1, ..., Tn].
    1086          # If found, tvars must be a subset of it.
    1087          # If not found, tvars is it.
    1088          # Also check for and reject plain Generic,
    1089          # and reject multiple Generic[...].
    1090          gvars = None
    1091          for base in cls.__orig_bases__:
    1092              if (isinstance(base, _GenericAlias) and
    1093                      base.__origin__ is Generic):
    1094                  if gvars is not None:
    1095                      raise TypeError(
    1096                          "Cannot inherit from Generic[...] multiple times.")
    1097                  gvars = base.__parameters__
    1098          if gvars is not None:
    1099              tvarset = set(tvars)
    1100              gvarset = set(gvars)
    1101              if not tvarset <= gvarset:
    1102                  s_vars = ', '.join(str(t) for t in tvars if t not in gvarset)
    1103                  s_args = ', '.join(str(g) for g in gvars)
    1104                  raise TypeError(f"Some type variables ({s_vars}) are"
    1105                                  f" not listed in Generic[{s_args}]")
    1106              tvars = gvars
    1107      cls.__parameters__ = tuple(tvars)
    1108  
    1109  
    1110  def _is_dunder(attr):
    1111      return attr.startswith('__') and attr.endswith('__')
    1112  
    1113  class ESC[4;38;5;81m_BaseGenericAlias(ESC[4;38;5;149m_Final, _root=ESC[4;38;5;149mTrue):
    1114      """The central part of the internal API.
    1115  
    1116      This represents a generic version of type 'origin' with type arguments 'params'.
    1117      There are two kind of these aliases: user defined and special. The special ones
    1118      are wrappers around builtin collections and ABCs in collections.abc. These must
    1119      have 'name' always set. If 'inst' is False, then the alias can't be instantiated;
    1120      this is used by e.g. typing.List and typing.Dict.
    1121      """
    1122  
    1123      def __init__(self, origin, *, inst=True, name=None):
    1124          self._inst = inst
    1125          self._name = name
    1126          self.__origin__ = origin
    1127          self.__slots__ = None  # This is not documented.
    1128  
    1129      def __call__(self, *args, **kwargs):
    1130          if not self._inst:
    1131              raise TypeError(f"Type {self._name} cannot be instantiated; "
    1132                              f"use {self.__origin__.__name__}() instead")
    1133          result = self.__origin__(*args, **kwargs)
    1134          try:
    1135              result.__orig_class__ = self
    1136          except AttributeError:
    1137              pass
    1138          return result
    1139  
    1140      def __mro_entries__(self, bases):
    1141          res = []
    1142          if self.__origin__ not in bases:
    1143              res.append(self.__origin__)
    1144          i = bases.index(self)
    1145          for b in bases[i+1:]:
    1146              if isinstance(b, _BaseGenericAlias) or issubclass(b, Generic):
    1147                  break
    1148          else:
    1149              res.append(Generic)
    1150          return tuple(res)
    1151  
    1152      def __getattr__(self, attr):
    1153          if attr in {'__name__', '__qualname__'}:
    1154              return self._name or self.__origin__.__name__
    1155  
    1156          # We are careful for copy and pickle.
    1157          # Also for simplicity we don't relay any dunder names
    1158          if '__origin__' in self.__dict__ and not _is_dunder(attr):
    1159              return getattr(self.__origin__, attr)
    1160          raise AttributeError(attr)
    1161  
    1162      def __setattr__(self, attr, val):
    1163          if _is_dunder(attr) or attr in {'_name', '_inst', '_nparams'}:
    1164              super().__setattr__(attr, val)
    1165          else:
    1166              setattr(self.__origin__, attr, val)
    1167  
    1168      def __instancecheck__(self, obj):
    1169          return self.__subclasscheck__(type(obj))
    1170  
    1171      def __subclasscheck__(self, cls):
    1172          raise TypeError("Subscripted generics cannot be used with"
    1173                          " class and instance checks")
    1174  
    1175      def __dir__(self):
    1176          return list(set(super().__dir__()
    1177                  + [attr for attr in dir(self.__origin__) if not _is_dunder(attr)]))
    1178  
    1179  
    1180  # Special typing constructs Union, Optional, Generic, Callable and Tuple
    1181  # use three special attributes for internal bookkeeping of generic types:
    1182  # * __parameters__ is a tuple of unique free type parameters of a generic
    1183  #   type, for example, Dict[T, T].__parameters__ == (T,);
    1184  # * __origin__ keeps a reference to a type that was subscripted,
    1185  #   e.g., Union[T, int].__origin__ == Union, or the non-generic version of
    1186  #   the type.
    1187  # * __args__ is a tuple of all arguments used in subscripting,
    1188  #   e.g., Dict[T, int].__args__ == (T, int).
    1189  
    1190  
    1191  class ESC[4;38;5;81m_GenericAlias(ESC[4;38;5;149m_BaseGenericAlias, _root=ESC[4;38;5;149mTrue):
    1192      # The type of parameterized generics.
    1193      #
    1194      # That is, for example, `type(List[int])` is `_GenericAlias`.
    1195      #
    1196      # Objects which are instances of this class include:
    1197      # * Parameterized container types, e.g. `Tuple[int]`, `List[int]`.
    1198      #  * Note that native container types, e.g. `tuple`, `list`, use
    1199      #    `types.GenericAlias` instead.
    1200      # * Parameterized classes:
    1201      #     class C[T]: pass
    1202      #     # C[int] is a _GenericAlias
    1203      # * `Callable` aliases, generic `Callable` aliases, and
    1204      #   parameterized `Callable` aliases:
    1205      #     T = TypeVar('T')
    1206      #     # _CallableGenericAlias inherits from _GenericAlias.
    1207      #     A = Callable[[], None]  # _CallableGenericAlias
    1208      #     B = Callable[[T], None]  # _CallableGenericAlias
    1209      #     C = B[int]  # _CallableGenericAlias
    1210      # * Parameterized `Final`, `ClassVar` and `TypeGuard`:
    1211      #     # All _GenericAlias
    1212      #     Final[int]
    1213      #     ClassVar[float]
    1214      #     TypeVar[bool]
    1215  
    1216      def __init__(self, origin, args, *, inst=True, name=None):
    1217          super().__init__(origin, inst=inst, name=name)
    1218          if not isinstance(args, tuple):
    1219              args = (args,)
    1220          self.__args__ = tuple(... if a is _TypingEllipsis else
    1221                                a for a in args)
    1222          self.__parameters__ = _collect_parameters(args)
    1223          if not name:
    1224              self.__module__ = origin.__module__
    1225  
    1226      def __eq__(self, other):
    1227          if not isinstance(other, _GenericAlias):
    1228              return NotImplemented
    1229          return (self.__origin__ == other.__origin__
    1230                  and self.__args__ == other.__args__)
    1231  
    1232      def __hash__(self):
    1233          return hash((self.__origin__, self.__args__))
    1234  
    1235      def __or__(self, right):
    1236          return Union[self, right]
    1237  
    1238      def __ror__(self, left):
    1239          return Union[left, self]
    1240  
    1241      @_tp_cache
    1242      def __getitem__(self, args):
    1243          # Parameterizes an already-parameterized object.
    1244          #
    1245          # For example, we arrive here doing something like:
    1246          #   T1 = TypeVar('T1')
    1247          #   T2 = TypeVar('T2')
    1248          #   T3 = TypeVar('T3')
    1249          #   class A(Generic[T1]): pass
    1250          #   B = A[T2]  # B is a _GenericAlias
    1251          #   C = B[T3]  # Invokes _GenericAlias.__getitem__
    1252          #
    1253          # We also arrive here when parameterizing a generic `Callable` alias:
    1254          #   T = TypeVar('T')
    1255          #   C = Callable[[T], None]
    1256          #   C[int]  # Invokes _GenericAlias.__getitem__
    1257  
    1258          if self.__origin__ in (Generic, Protocol):
    1259              # Can't subscript Generic[...] or Protocol[...].
    1260              raise TypeError(f"Cannot subscript already-subscripted {self}")
    1261          if not self.__parameters__:
    1262              raise TypeError(f"{self} is not a generic class")
    1263  
    1264          # Preprocess `args`.
    1265          if not isinstance(args, tuple):
    1266              args = (args,)
    1267          args = tuple(_type_convert(p) for p in args)
    1268          args = _unpack_args(args)
    1269          new_args = self._determine_new_args(args)
    1270          r = self.copy_with(new_args)
    1271          return r
    1272  
    1273      def _determine_new_args(self, args):
    1274          # Determines new __args__ for __getitem__.
    1275          #
    1276          # For example, suppose we had:
    1277          #   T1 = TypeVar('T1')
    1278          #   T2 = TypeVar('T2')
    1279          #   class A(Generic[T1, T2]): pass
    1280          #   T3 = TypeVar('T3')
    1281          #   B = A[int, T3]
    1282          #   C = B[str]
    1283          # `B.__args__` is `(int, T3)`, so `C.__args__` should be `(int, str)`.
    1284          # Unfortunately, this is harder than it looks, because if `T3` is
    1285          # anything more exotic than a plain `TypeVar`, we need to consider
    1286          # edge cases.
    1287  
    1288          params = self.__parameters__
    1289          # In the example above, this would be {T3: str}
    1290          for param in params:
    1291              prepare = getattr(param, '__typing_prepare_subst__', None)
    1292              if prepare is not None:
    1293                  args = prepare(self, args)
    1294          alen = len(args)
    1295          plen = len(params)
    1296          if alen != plen:
    1297              raise TypeError(f"Too {'many' if alen > plen else 'few'} arguments for {self};"
    1298                              f" actual {alen}, expected {plen}")
    1299          new_arg_by_param = dict(zip(params, args))
    1300          return tuple(self._make_substitution(self.__args__, new_arg_by_param))
    1301  
    1302      def _make_substitution(self, args, new_arg_by_param):
    1303          """Create a list of new type arguments."""
    1304          new_args = []
    1305          for old_arg in args:
    1306              if isinstance(old_arg, type):
    1307                  new_args.append(old_arg)
    1308                  continue
    1309  
    1310              substfunc = getattr(old_arg, '__typing_subst__', None)
    1311              if substfunc:
    1312                  new_arg = substfunc(new_arg_by_param[old_arg])
    1313              else:
    1314                  subparams = getattr(old_arg, '__parameters__', ())
    1315                  if not subparams:
    1316                      new_arg = old_arg
    1317                  else:
    1318                      subargs = []
    1319                      for x in subparams:
    1320                          if isinstance(x, TypeVarTuple):
    1321                              subargs.extend(new_arg_by_param[x])
    1322                          else:
    1323                              subargs.append(new_arg_by_param[x])
    1324                      new_arg = old_arg[tuple(subargs)]
    1325  
    1326              if self.__origin__ == collections.abc.Callable and isinstance(new_arg, tuple):
    1327                  # Consider the following `Callable`.
    1328                  #   C = Callable[[int], str]
    1329                  # Here, `C.__args__` should be (int, str) - NOT ([int], str).
    1330                  # That means that if we had something like...
    1331                  #   P = ParamSpec('P')
    1332                  #   T = TypeVar('T')
    1333                  #   C = Callable[P, T]
    1334                  #   D = C[[int, str], float]
    1335                  # ...we need to be careful; `new_args` should end up as
    1336                  # `(int, str, float)` rather than `([int, str], float)`.
    1337                  new_args.extend(new_arg)
    1338              elif _is_unpacked_typevartuple(old_arg):
    1339                  # Consider the following `_GenericAlias`, `B`:
    1340                  #   class A(Generic[*Ts]): ...
    1341                  #   B = A[T, *Ts]
    1342                  # If we then do:
    1343                  #   B[float, int, str]
    1344                  # The `new_arg` corresponding to `T` will be `float`, and the
    1345                  # `new_arg` corresponding to `*Ts` will be `(int, str)`. We
    1346                  # should join all these types together in a flat list
    1347                  # `(float, int, str)` - so again, we should `extend`.
    1348                  new_args.extend(new_arg)
    1349              elif isinstance(old_arg, tuple):
    1350                  # Corner case:
    1351                  #    P = ParamSpec('P')
    1352                  #    T = TypeVar('T')
    1353                  #    class Base(Generic[P]): ...
    1354                  # Can be substituted like this:
    1355                  #    X = Base[[int, T]]
    1356                  # In this case, `old_arg` will be a tuple:
    1357                  new_args.append(
    1358                      tuple(self._make_substitution(old_arg, new_arg_by_param)),
    1359                  )
    1360              else:
    1361                  new_args.append(new_arg)
    1362          return new_args
    1363  
    1364      def copy_with(self, args):
    1365          return self.__class__(self.__origin__, args, name=self._name, inst=self._inst)
    1366  
    1367      def __repr__(self):
    1368          if self._name:
    1369              name = 'typing.' + self._name
    1370          else:
    1371              name = _type_repr(self.__origin__)
    1372          if self.__args__:
    1373              args = ", ".join([_type_repr(a) for a in self.__args__])
    1374          else:
    1375              # To ensure the repr is eval-able.
    1376              args = "()"
    1377          return f'{name}[{args}]'
    1378  
    1379      def __reduce__(self):
    1380          if self._name:
    1381              origin = globals()[self._name]
    1382          else:
    1383              origin = self.__origin__
    1384          args = tuple(self.__args__)
    1385          if len(args) == 1 and not isinstance(args[0], tuple):
    1386              args, = args
    1387          return operator.getitem, (origin, args)
    1388  
    1389      def __mro_entries__(self, bases):
    1390          if isinstance(self.__origin__, _SpecialForm):
    1391              raise TypeError(f"Cannot subclass {self!r}")
    1392  
    1393          if self._name:  # generic version of an ABC or built-in class
    1394              return super().__mro_entries__(bases)
    1395          if self.__origin__ is Generic:
    1396              if Protocol in bases:
    1397                  return ()
    1398              i = bases.index(self)
    1399              for b in bases[i+1:]:
    1400                  if isinstance(b, _BaseGenericAlias) and b is not self:
    1401                      return ()
    1402          return (self.__origin__,)
    1403  
    1404      def __iter__(self):
    1405          yield Unpack[self]
    1406  
    1407  
    1408  # _nparams is the number of accepted parameters, e.g. 0 for Hashable,
    1409  # 1 for List and 2 for Dict.  It may be -1 if variable number of
    1410  # parameters are accepted (needs custom __getitem__).
    1411  
    1412  class ESC[4;38;5;81m_SpecialGenericAlias(ESC[4;38;5;149m_NotIterable, ESC[4;38;5;149m_BaseGenericAlias, _root=ESC[4;38;5;149mTrue):
    1413      def __init__(self, origin, nparams, *, inst=True, name=None):
    1414          if name is None:
    1415              name = origin.__name__
    1416          super().__init__(origin, inst=inst, name=name)
    1417          self._nparams = nparams
    1418          if origin.__module__ == 'builtins':
    1419              self.__doc__ = f'A generic version of {origin.__qualname__}.'
    1420          else:
    1421              self.__doc__ = f'A generic version of {origin.__module__}.{origin.__qualname__}.'
    1422  
    1423      @_tp_cache
    1424      def __getitem__(self, params):
    1425          if not isinstance(params, tuple):
    1426              params = (params,)
    1427          msg = "Parameters to generic types must be types."
    1428          params = tuple(_type_check(p, msg) for p in params)
    1429          _check_generic(self, params, self._nparams)
    1430          return self.copy_with(params)
    1431  
    1432      def copy_with(self, params):
    1433          return _GenericAlias(self.__origin__, params,
    1434                               name=self._name, inst=self._inst)
    1435  
    1436      def __repr__(self):
    1437          return 'typing.' + self._name
    1438  
    1439      def __subclasscheck__(self, cls):
    1440          if isinstance(cls, _SpecialGenericAlias):
    1441              return issubclass(cls.__origin__, self.__origin__)
    1442          if not isinstance(cls, _GenericAlias):
    1443              return issubclass(cls, self.__origin__)
    1444          return super().__subclasscheck__(cls)
    1445  
    1446      def __reduce__(self):
    1447          return self._name
    1448  
    1449      def __or__(self, right):
    1450          return Union[self, right]
    1451  
    1452      def __ror__(self, left):
    1453          return Union[left, self]
    1454  
    1455  
    1456  class ESC[4;38;5;81m_DeprecatedGenericAlias(ESC[4;38;5;149m_SpecialGenericAlias, _root=ESC[4;38;5;149mTrue):
    1457      def __init__(
    1458          self, origin, nparams, *, removal_version, inst=True, name=None
    1459      ):
    1460          super().__init__(origin, nparams, inst=inst, name=name)
    1461          self._removal_version = removal_version
    1462  
    1463      def __instancecheck__(self, inst):
    1464          import warnings
    1465          warnings._deprecated(
    1466              f"{self.__module__}.{self._name}", remove=self._removal_version
    1467          )
    1468          return super().__instancecheck__(inst)
    1469  
    1470  
    1471  class ESC[4;38;5;81m_CallableGenericAlias(ESC[4;38;5;149m_NotIterable, ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1472      def __repr__(self):
    1473          assert self._name == 'Callable'
    1474          args = self.__args__
    1475          if len(args) == 2 and _is_param_expr(args[0]):
    1476              return super().__repr__()
    1477          return (f'typing.Callable'
    1478                  f'[[{", ".join([_type_repr(a) for a in args[:-1]])}], '
    1479                  f'{_type_repr(args[-1])}]')
    1480  
    1481      def __reduce__(self):
    1482          args = self.__args__
    1483          if not (len(args) == 2 and _is_param_expr(args[0])):
    1484              args = list(args[:-1]), args[-1]
    1485          return operator.getitem, (Callable, args)
    1486  
    1487  
    1488  class ESC[4;38;5;81m_CallableType(ESC[4;38;5;149m_SpecialGenericAlias, _root=ESC[4;38;5;149mTrue):
    1489      def copy_with(self, params):
    1490          return _CallableGenericAlias(self.__origin__, params,
    1491                                       name=self._name, inst=self._inst)
    1492  
    1493      def __getitem__(self, params):
    1494          if not isinstance(params, tuple) or len(params) != 2:
    1495              raise TypeError("Callable must be used as "
    1496                              "Callable[[arg, ...], result].")
    1497          args, result = params
    1498          # This relaxes what args can be on purpose to allow things like
    1499          # PEP 612 ParamSpec.  Responsibility for whether a user is using
    1500          # Callable[...] properly is deferred to static type checkers.
    1501          if isinstance(args, list):
    1502              params = (tuple(args), result)
    1503          else:
    1504              params = (args, result)
    1505          return self.__getitem_inner__(params)
    1506  
    1507      @_tp_cache
    1508      def __getitem_inner__(self, params):
    1509          args, result = params
    1510          msg = "Callable[args, result]: result must be a type."
    1511          result = _type_check(result, msg)
    1512          if args is Ellipsis:
    1513              return self.copy_with((_TypingEllipsis, result))
    1514          if not isinstance(args, tuple):
    1515              args = (args,)
    1516          args = tuple(_type_convert(arg) for arg in args)
    1517          params = args + (result,)
    1518          return self.copy_with(params)
    1519  
    1520  
    1521  class ESC[4;38;5;81m_TupleType(ESC[4;38;5;149m_SpecialGenericAlias, _root=ESC[4;38;5;149mTrue):
    1522      @_tp_cache
    1523      def __getitem__(self, params):
    1524          if not isinstance(params, tuple):
    1525              params = (params,)
    1526          if len(params) >= 2 and params[-1] is ...:
    1527              msg = "Tuple[t, ...]: t must be a type."
    1528              params = tuple(_type_check(p, msg) for p in params[:-1])
    1529              return self.copy_with((*params, _TypingEllipsis))
    1530          msg = "Tuple[t0, t1, ...]: each t must be a type."
    1531          params = tuple(_type_check(p, msg) for p in params)
    1532          return self.copy_with(params)
    1533  
    1534  
    1535  class ESC[4;38;5;81m_UnionGenericAlias(ESC[4;38;5;149m_NotIterable, ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1536      def copy_with(self, params):
    1537          return Union[params]
    1538  
    1539      def __eq__(self, other):
    1540          if not isinstance(other, (_UnionGenericAlias, types.UnionType)):
    1541              return NotImplemented
    1542          return set(self.__args__) == set(other.__args__)
    1543  
    1544      def __hash__(self):
    1545          return hash(frozenset(self.__args__))
    1546  
    1547      def __repr__(self):
    1548          args = self.__args__
    1549          if len(args) == 2:
    1550              if args[0] is type(None):
    1551                  return f'typing.Optional[{_type_repr(args[1])}]'
    1552              elif args[1] is type(None):
    1553                  return f'typing.Optional[{_type_repr(args[0])}]'
    1554          return super().__repr__()
    1555  
    1556      def __instancecheck__(self, obj):
    1557          return self.__subclasscheck__(type(obj))
    1558  
    1559      def __subclasscheck__(self, cls):
    1560          for arg in self.__args__:
    1561              if issubclass(cls, arg):
    1562                  return True
    1563  
    1564      def __reduce__(self):
    1565          func, (origin, args) = super().__reduce__()
    1566          return func, (Union, args)
    1567  
    1568  
    1569  def _value_and_type_iter(parameters):
    1570      return ((p, type(p)) for p in parameters)
    1571  
    1572  
    1573  class ESC[4;38;5;81m_LiteralGenericAlias(ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1574      def __eq__(self, other):
    1575          if not isinstance(other, _LiteralGenericAlias):
    1576              return NotImplemented
    1577  
    1578          return set(_value_and_type_iter(self.__args__)) == set(_value_and_type_iter(other.__args__))
    1579  
    1580      def __hash__(self):
    1581          return hash(frozenset(_value_and_type_iter(self.__args__)))
    1582  
    1583  
    1584  class ESC[4;38;5;81m_ConcatenateGenericAlias(ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1585      def copy_with(self, params):
    1586          if isinstance(params[-1], (list, tuple)):
    1587              return (*params[:-1], *params[-1])
    1588          if isinstance(params[-1], _ConcatenateGenericAlias):
    1589              params = (*params[:-1], *params[-1].__args__)
    1590          return super().copy_with(params)
    1591  
    1592  
    1593  @_SpecialForm
    1594  def Unpack(self, parameters):
    1595      """Type unpack operator.
    1596  
    1597      The type unpack operator takes the child types from some container type,
    1598      such as `tuple[int, str]` or a `TypeVarTuple`, and 'pulls them out'.
    1599  
    1600      For example::
    1601  
    1602          # For some generic class `Foo`:
    1603          Foo[Unpack[tuple[int, str]]]  # Equivalent to Foo[int, str]
    1604  
    1605          Ts = TypeVarTuple('Ts')
    1606          # Specifies that `Bar` is generic in an arbitrary number of types.
    1607          # (Think of `Ts` as a tuple of an arbitrary number of individual
    1608          #  `TypeVar`s, which the `Unpack` is 'pulling out' directly into the
    1609          #  `Generic[]`.)
    1610          class Bar(Generic[Unpack[Ts]]): ...
    1611          Bar[int]  # Valid
    1612          Bar[int, str]  # Also valid
    1613  
    1614      From Python 3.11, this can also be done using the `*` operator::
    1615  
    1616          Foo[*tuple[int, str]]
    1617          class Bar(Generic[*Ts]): ...
    1618  
    1619      And from Python 3.12, it can be done using built-in syntax for generics::
    1620  
    1621          Foo[*tuple[int, str]]
    1622          class Bar[*Ts]: ...
    1623  
    1624      The operator can also be used along with a `TypedDict` to annotate
    1625      `**kwargs` in a function signature::
    1626  
    1627          class Movie(TypedDict):
    1628              name: str
    1629              year: int
    1630  
    1631          # This function expects two keyword arguments - *name* of type `str` and
    1632          # *year* of type `int`.
    1633          def foo(**kwargs: Unpack[Movie]): ...
    1634  
    1635      Note that there is only some runtime checking of this operator. Not
    1636      everything the runtime allows may be accepted by static type checkers.
    1637  
    1638      For more information, see PEPs 646 and 692.
    1639      """
    1640      item = _type_check(parameters, f'{self} accepts only single type.')
    1641      return _UnpackGenericAlias(origin=self, args=(item,))
    1642  
    1643  
    1644  class ESC[4;38;5;81m_UnpackGenericAlias(ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1645      def __repr__(self):
    1646          # `Unpack` only takes one argument, so __args__ should contain only
    1647          # a single item.
    1648          return f'typing.Unpack[{_type_repr(self.__args__[0])}]'
    1649  
    1650      def __getitem__(self, args):
    1651          if self.__typing_is_unpacked_typevartuple__:
    1652              return args
    1653          return super().__getitem__(args)
    1654  
    1655      @property
    1656      def __typing_unpacked_tuple_args__(self):
    1657          assert self.__origin__ is Unpack
    1658          assert len(self.__args__) == 1
    1659          arg, = self.__args__
    1660          if isinstance(arg, _GenericAlias):
    1661              assert arg.__origin__ is tuple
    1662              return arg.__args__
    1663          return None
    1664  
    1665      @property
    1666      def __typing_is_unpacked_typevartuple__(self):
    1667          assert self.__origin__ is Unpack
    1668          assert len(self.__args__) == 1
    1669          return isinstance(self.__args__[0], TypeVarTuple)
    1670  
    1671  
    1672  class ESC[4;38;5;81m_TypingEllipsis:
    1673      """Internal placeholder for ... (ellipsis)."""
    1674  
    1675  
    1676  _TYPING_INTERNALS = frozenset({
    1677      '__parameters__', '__orig_bases__',  '__orig_class__',
    1678      '_is_protocol', '_is_runtime_protocol', '__protocol_attrs__',
    1679      '__callable_proto_members_only__', '__type_params__',
    1680  })
    1681  
    1682  _SPECIAL_NAMES = frozenset({
    1683      '__abstractmethods__', '__annotations__', '__dict__', '__doc__',
    1684      '__init__', '__module__', '__new__', '__slots__',
    1685      '__subclasshook__', '__weakref__', '__class_getitem__'
    1686  })
    1687  
    1688  # These special attributes will be not collected as protocol members.
    1689  EXCLUDED_ATTRIBUTES = _TYPING_INTERNALS | _SPECIAL_NAMES | {'_MutableMapping__marker'}
    1690  
    1691  
    1692  def _get_protocol_attrs(cls):
    1693      """Collect protocol members from a protocol class objects.
    1694  
    1695      This includes names actually defined in the class dictionary, as well
    1696      as names that appear in annotations. Special names (above) are skipped.
    1697      """
    1698      attrs = set()
    1699      for base in cls.__mro__[:-1]:  # without object
    1700          if base.__name__ in {'Protocol', 'Generic'}:
    1701              continue
    1702          annotations = getattr(base, '__annotations__', {})
    1703          for attr in (*base.__dict__, *annotations):
    1704              if not attr.startswith('_abc_') and attr not in EXCLUDED_ATTRIBUTES:
    1705                  attrs.add(attr)
    1706      return attrs
    1707  
    1708  
    1709  def _no_init_or_replace_init(self, *args, **kwargs):
    1710      cls = type(self)
    1711  
    1712      if cls._is_protocol:
    1713          raise TypeError('Protocols cannot be instantiated')
    1714  
    1715      # Already using a custom `__init__`. No need to calculate correct
    1716      # `__init__` to call. This can lead to RecursionError. See bpo-45121.
    1717      if cls.__init__ is not _no_init_or_replace_init:
    1718          return
    1719  
    1720      # Initially, `__init__` of a protocol subclass is set to `_no_init_or_replace_init`.
    1721      # The first instantiation of the subclass will call `_no_init_or_replace_init` which
    1722      # searches for a proper new `__init__` in the MRO. The new `__init__`
    1723      # replaces the subclass' old `__init__` (ie `_no_init_or_replace_init`). Subsequent
    1724      # instantiation of the protocol subclass will thus use the new
    1725      # `__init__` and no longer call `_no_init_or_replace_init`.
    1726      for base in cls.__mro__:
    1727          init = base.__dict__.get('__init__', _no_init_or_replace_init)
    1728          if init is not _no_init_or_replace_init:
    1729              cls.__init__ = init
    1730              break
    1731      else:
    1732          # should not happen
    1733          cls.__init__ = object.__init__
    1734  
    1735      cls.__init__(self, *args, **kwargs)
    1736  
    1737  
    1738  def _caller(depth=1, default='__main__'):
    1739      try:
    1740          return sys._getframemodulename(depth + 1) or default
    1741      except AttributeError:  # For platforms without _getframemodulename()
    1742          pass
    1743      try:
    1744          return sys._getframe(depth + 1).f_globals.get('__name__', default)
    1745      except (AttributeError, ValueError):  # For platforms without _getframe()
    1746          pass
    1747      return None
    1748  
    1749  def _allow_reckless_class_checks(depth=2):
    1750      """Allow instance and class checks for special stdlib modules.
    1751  
    1752      The abc and functools modules indiscriminately call isinstance() and
    1753      issubclass() on the whole MRO of a user class, which may contain protocols.
    1754      """
    1755      return _caller(depth) in {'abc', 'functools', None}
    1756  
    1757  
    1758  _PROTO_ALLOWLIST = {
    1759      'collections.abc': [
    1760          'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable',
    1761          'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', 'Buffer',
    1762      ],
    1763      'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'],
    1764  }
    1765  
    1766  
    1767  @functools.cache
    1768  def _lazy_load_getattr_static():
    1769      # Import getattr_static lazily so as not to slow down the import of typing.py
    1770      # Cache the result so we don't slow down _ProtocolMeta.__instancecheck__ unnecessarily
    1771      from inspect import getattr_static
    1772      return getattr_static
    1773  
    1774  
    1775  _cleanups.append(_lazy_load_getattr_static.cache_clear)
    1776  
    1777  def _pickle_psargs(psargs):
    1778      return ParamSpecArgs, (psargs.__origin__,)
    1779  
    1780  copyreg.pickle(ParamSpecArgs, _pickle_psargs)
    1781  
    1782  def _pickle_pskwargs(pskwargs):
    1783      return ParamSpecKwargs, (pskwargs.__origin__,)
    1784  
    1785  copyreg.pickle(ParamSpecKwargs, _pickle_pskwargs)
    1786  
    1787  del _pickle_psargs, _pickle_pskwargs
    1788  
    1789  
    1790  class ESC[4;38;5;81m_ProtocolMeta(ESC[4;38;5;149mABCMeta):
    1791      # This metaclass is somewhat unfortunate,
    1792      # but is necessary for several reasons...
    1793      def __new__(mcls, name, bases, namespace, /, **kwargs):
    1794          if name == "Protocol" and bases == (Generic,):
    1795              pass
    1796          elif Protocol in bases:
    1797              for base in bases:
    1798                  if not (
    1799                      base in {object, Generic}
    1800                      or base.__name__ in _PROTO_ALLOWLIST.get(base.__module__, [])
    1801                      or (
    1802                          issubclass(base, Generic)
    1803                          and getattr(base, "_is_protocol", False)
    1804                      )
    1805                  ):
    1806                      raise TypeError(
    1807                          f"Protocols can only inherit from other protocols, "
    1808                          f"got {base!r}"
    1809                      )
    1810          return super().__new__(mcls, name, bases, namespace, **kwargs)
    1811  
    1812      def __init__(cls, *args, **kwargs):
    1813          super().__init__(*args, **kwargs)
    1814          if getattr(cls, "_is_protocol", False):
    1815              cls.__protocol_attrs__ = _get_protocol_attrs(cls)
    1816              # PEP 544 prohibits using issubclass()
    1817              # with protocols that have non-method members.
    1818              cls.__callable_proto_members_only__ = all(
    1819                  callable(getattr(cls, attr, None)) for attr in cls.__protocol_attrs__
    1820              )
    1821  
    1822      def __subclasscheck__(cls, other):
    1823          if cls is Protocol:
    1824              return type.__subclasscheck__(cls, other)
    1825          if (
    1826              getattr(cls, '_is_protocol', False)
    1827              and not _allow_reckless_class_checks()
    1828          ):
    1829              if not isinstance(other, type):
    1830                  # Same error message as for issubclass(1, int).
    1831                  raise TypeError('issubclass() arg 1 must be a class')
    1832              if (
    1833                  not cls.__callable_proto_members_only__
    1834                  and cls.__dict__.get("__subclasshook__") is _proto_hook
    1835              ):
    1836                  raise TypeError(
    1837                      "Protocols with non-method members don't support issubclass()"
    1838                  )
    1839              if not getattr(cls, '_is_runtime_protocol', False):
    1840                  raise TypeError(
    1841                      "Instance and class checks can only be used with "
    1842                      "@runtime_checkable protocols"
    1843                  )
    1844          return super().__subclasscheck__(other)
    1845  
    1846      def __instancecheck__(cls, instance):
    1847          # We need this method for situations where attributes are
    1848          # assigned in __init__.
    1849          if cls is Protocol:
    1850              return type.__instancecheck__(cls, instance)
    1851          if not getattr(cls, "_is_protocol", False):
    1852              # i.e., it's a concrete subclass of a protocol
    1853              return super().__instancecheck__(instance)
    1854  
    1855          if (
    1856              not getattr(cls, '_is_runtime_protocol', False) and
    1857              not _allow_reckless_class_checks()
    1858          ):
    1859              raise TypeError("Instance and class checks can only be used with"
    1860                              " @runtime_checkable protocols")
    1861  
    1862          if super().__instancecheck__(instance):
    1863              return True
    1864  
    1865          getattr_static = _lazy_load_getattr_static()
    1866          for attr in cls.__protocol_attrs__:
    1867              try:
    1868                  val = getattr_static(instance, attr)
    1869              except AttributeError:
    1870                  break
    1871              if val is None and callable(getattr(cls, attr, None)):
    1872                  break
    1873          else:
    1874              return True
    1875  
    1876          return False
    1877  
    1878  
    1879  @classmethod
    1880  def _proto_hook(cls, other):
    1881      if not cls.__dict__.get('_is_protocol', False):
    1882          return NotImplemented
    1883  
    1884      for attr in cls.__protocol_attrs__:
    1885          for base in other.__mro__:
    1886              # Check if the members appears in the class dictionary...
    1887              if attr in base.__dict__:
    1888                  if base.__dict__[attr] is None:
    1889                      return NotImplemented
    1890                  break
    1891  
    1892              # ...or in annotations, if it is a sub-protocol.
    1893              annotations = getattr(base, '__annotations__', {})
    1894              if (isinstance(annotations, collections.abc.Mapping) and
    1895                      attr in annotations and
    1896                      issubclass(other, Generic) and getattr(other, '_is_protocol', False)):
    1897                  break
    1898          else:
    1899              return NotImplemented
    1900      return True
    1901  
    1902  
    1903  class ESC[4;38;5;81mProtocol(ESC[4;38;5;149mGeneric, metaclass=ESC[4;38;5;149m_ProtocolMeta):
    1904      """Base class for protocol classes.
    1905  
    1906      Protocol classes are defined as::
    1907  
    1908          class Proto(Protocol):
    1909              def meth(self) -> int:
    1910                  ...
    1911  
    1912      Such classes are primarily used with static type checkers that recognize
    1913      structural subtyping (static duck-typing).
    1914  
    1915      For example::
    1916  
    1917          class C:
    1918              def meth(self) -> int:
    1919                  return 0
    1920  
    1921          def func(x: Proto) -> int:
    1922              return x.meth()
    1923  
    1924          func(C())  # Passes static type check
    1925  
    1926      See PEP 544 for details. Protocol classes decorated with
    1927      @typing.runtime_checkable act as simple-minded runtime protocols that check
    1928      only the presence of given attributes, ignoring their type signatures.
    1929      Protocol classes can be generic, they are defined as::
    1930  
    1931          class GenProto[T](Protocol):
    1932              def meth(self) -> T:
    1933                  ...
    1934      """
    1935  
    1936      __slots__ = ()
    1937      _is_protocol = True
    1938      _is_runtime_protocol = False
    1939  
    1940      def __init_subclass__(cls, *args, **kwargs):
    1941          super().__init_subclass__(*args, **kwargs)
    1942  
    1943          # Determine if this is a protocol or a concrete subclass.
    1944          if not cls.__dict__.get('_is_protocol', False):
    1945              cls._is_protocol = any(b is Protocol for b in cls.__bases__)
    1946  
    1947          # Set (or override) the protocol subclass hook.
    1948          if '__subclasshook__' not in cls.__dict__:
    1949              cls.__subclasshook__ = _proto_hook
    1950  
    1951          # Prohibit instantiation for protocol classes
    1952          if cls._is_protocol and cls.__init__ is Protocol.__init__:
    1953              cls.__init__ = _no_init_or_replace_init
    1954  
    1955  
    1956  class ESC[4;38;5;81m_AnnotatedAlias(ESC[4;38;5;149m_NotIterable, ESC[4;38;5;149m_GenericAlias, _root=ESC[4;38;5;149mTrue):
    1957      """Runtime representation of an annotated type.
    1958  
    1959      At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't'
    1960      with extra annotations. The alias behaves like a normal typing alias.
    1961      Instantiating is the same as instantiating the underlying type; binding
    1962      it to types is also the same.
    1963  
    1964      The metadata itself is stored in a '__metadata__' attribute as a tuple.
    1965      """
    1966  
    1967      def __init__(self, origin, metadata):
    1968          if isinstance(origin, _AnnotatedAlias):
    1969              metadata = origin.__metadata__ + metadata
    1970              origin = origin.__origin__
    1971          super().__init__(origin, origin, name='Annotated')
    1972          self.__metadata__ = metadata
    1973  
    1974      def copy_with(self, params):
    1975          assert len(params) == 1
    1976          new_type = params[0]
    1977          return _AnnotatedAlias(new_type, self.__metadata__)
    1978  
    1979      def __repr__(self):
    1980          return "typing.Annotated[{}, {}]".format(
    1981              _type_repr(self.__origin__),
    1982              ", ".join(repr(a) for a in self.__metadata__)
    1983          )
    1984  
    1985      def __reduce__(self):
    1986          return operator.getitem, (
    1987              Annotated, (self.__origin__,) + self.__metadata__
    1988          )
    1989  
    1990      def __eq__(self, other):
    1991          if not isinstance(other, _AnnotatedAlias):
    1992              return NotImplemented
    1993          return (self.__origin__ == other.__origin__
    1994                  and self.__metadata__ == other.__metadata__)
    1995  
    1996      def __hash__(self):
    1997          return hash((self.__origin__, self.__metadata__))
    1998  
    1999      def __getattr__(self, attr):
    2000          if attr in {'__name__', '__qualname__'}:
    2001              return 'Annotated'
    2002          return super().__getattr__(attr)
    2003  
    2004      def __mro_entries__(self, bases):
    2005          return (self.__origin__,)
    2006  
    2007  
    2008  class ESC[4;38;5;81mAnnotated:
    2009      """Add context-specific metadata to a type.
    2010  
    2011      Example: Annotated[int, runtime_check.Unsigned] indicates to the
    2012      hypothetical runtime_check module that this type is an unsigned int.
    2013      Every other consumer of this type can ignore this metadata and treat
    2014      this type as int.
    2015  
    2016      The first argument to Annotated must be a valid type.
    2017  
    2018      Details:
    2019  
    2020      - It's an error to call `Annotated` with less than two arguments.
    2021      - Access the metadata via the ``__metadata__`` attribute::
    2022  
    2023          assert Annotated[int, '$'].__metadata__ == ('$',)
    2024  
    2025      - Nested Annotated types are flattened::
    2026  
    2027          assert Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
    2028  
    2029      - Instantiating an annotated type is equivalent to instantiating the
    2030      underlying type::
    2031  
    2032          assert Annotated[C, Ann1](5) == C(5)
    2033  
    2034      - Annotated can be used as a generic type alias::
    2035  
    2036          type Optimized[T] = Annotated[T, runtime.Optimize()]
    2037          # type checker will treat Optimized[int]
    2038          # as equivalent to Annotated[int, runtime.Optimize()]
    2039  
    2040          type OptimizedList[T] = Annotated[list[T], runtime.Optimize()]
    2041          # type checker will treat OptimizedList[int]
    2042          # as equivalent to Annotated[list[int], runtime.Optimize()]
    2043  
    2044      - Annotated cannot be used with an unpacked TypeVarTuple::
    2045  
    2046          type Variadic[*Ts] = Annotated[*Ts, Ann1]  # NOT valid
    2047  
    2048        This would be equivalent to::
    2049  
    2050          Annotated[T1, T2, T3, ..., Ann1]
    2051  
    2052        where T1, T2 etc. are TypeVars, which would be invalid, because
    2053        only one type should be passed to Annotated.
    2054      """
    2055  
    2056      __slots__ = ()
    2057  
    2058      def __new__(cls, *args, **kwargs):
    2059          raise TypeError("Type Annotated cannot be instantiated.")
    2060  
    2061      @_tp_cache
    2062      def __class_getitem__(cls, params):
    2063          if not isinstance(params, tuple) or len(params) < 2:
    2064              raise TypeError("Annotated[...] should be used "
    2065                              "with at least two arguments (a type and an "
    2066                              "annotation).")
    2067          if _is_unpacked_typevartuple(params[0]):
    2068              raise TypeError("Annotated[...] should not be used with an "
    2069                              "unpacked TypeVarTuple")
    2070          msg = "Annotated[t, ...]: t must be a type."
    2071          origin = _type_check(params[0], msg, allow_special_forms=True)
    2072          metadata = tuple(params[1:])
    2073          return _AnnotatedAlias(origin, metadata)
    2074  
    2075      def __init_subclass__(cls, *args, **kwargs):
    2076          raise TypeError(
    2077              "Cannot subclass {}.Annotated".format(cls.__module__)
    2078          )
    2079  
    2080  
    2081  def runtime_checkable(cls):
    2082      """Mark a protocol class as a runtime protocol.
    2083  
    2084      Such protocol can be used with isinstance() and issubclass().
    2085      Raise TypeError if applied to a non-protocol class.
    2086      This allows a simple-minded structural check very similar to
    2087      one trick ponies in collections.abc such as Iterable.
    2088  
    2089      For example::
    2090  
    2091          @runtime_checkable
    2092          class Closable(Protocol):
    2093              def close(self): ...
    2094  
    2095          assert isinstance(open('/some/file'), Closable)
    2096  
    2097      Warning: this will check only the presence of the required methods,
    2098      not their type signatures!
    2099      """
    2100      if not issubclass(cls, Generic) or not getattr(cls, '_is_protocol', False):
    2101          raise TypeError('@runtime_checkable can be only applied to protocol classes,'
    2102                          ' got %r' % cls)
    2103      cls._is_runtime_protocol = True
    2104      return cls
    2105  
    2106  
    2107  def cast(typ, val):
    2108      """Cast a value to a type.
    2109  
    2110      This returns the value unchanged.  To the type checker this
    2111      signals that the return value has the designated type, but at
    2112      runtime we intentionally don't check anything (we want this
    2113      to be as fast as possible).
    2114      """
    2115      return val
    2116  
    2117  
    2118  def assert_type(val, typ, /):
    2119      """Ask a static type checker to confirm that the value is of the given type.
    2120  
    2121      At runtime this does nothing: it returns the first argument unchanged with no
    2122      checks or side effects, no matter the actual type of the argument.
    2123  
    2124      When a static type checker encounters a call to assert_type(), it
    2125      emits an error if the value is not of the specified type::
    2126  
    2127          def greet(name: str) -> None:
    2128              assert_type(name, str)  # OK
    2129              assert_type(name, int)  # type checker error
    2130      """
    2131      return val
    2132  
    2133  
    2134  _allowed_types = (types.FunctionType, types.BuiltinFunctionType,
    2135                    types.MethodType, types.ModuleType,
    2136                    WrapperDescriptorType, MethodWrapperType, MethodDescriptorType)
    2137  
    2138  
    2139  def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
    2140      """Return type hints for an object.
    2141  
    2142      This is often the same as obj.__annotations__, but it handles
    2143      forward references encoded as string literals and recursively replaces all
    2144      'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
    2145  
    2146      The argument may be a module, class, method, or function. The annotations
    2147      are returned as a dictionary. For classes, annotations include also
    2148      inherited members.
    2149  
    2150      TypeError is raised if the argument is not of a type that can contain
    2151      annotations, and an empty dictionary is returned if no annotations are
    2152      present.
    2153  
    2154      BEWARE -- the behavior of globalns and localns is counterintuitive
    2155      (unless you are familiar with how eval() and exec() work).  The
    2156      search order is locals first, then globals.
    2157  
    2158      - If no dict arguments are passed, an attempt is made to use the
    2159        globals from obj (or the respective module's globals for classes),
    2160        and these are also used as the locals.  If the object does not appear
    2161        to have globals, an empty dictionary is used.  For classes, the search
    2162        order is globals first then locals.
    2163  
    2164      - If one dict argument is passed, it is used for both globals and
    2165        locals.
    2166  
    2167      - If two dict arguments are passed, they specify globals and
    2168        locals, respectively.
    2169      """
    2170      if getattr(obj, '__no_type_check__', None):
    2171          return {}
    2172      # Classes require a special treatment.
    2173      if isinstance(obj, type):
    2174          hints = {}
    2175          for base in reversed(obj.__mro__):
    2176              if globalns is None:
    2177                  base_globals = getattr(sys.modules.get(base.__module__, None), '__dict__', {})
    2178              else:
    2179                  base_globals = globalns
    2180              ann = base.__dict__.get('__annotations__', {})
    2181              if isinstance(ann, types.GetSetDescriptorType):
    2182                  ann = {}
    2183              base_locals = dict(vars(base)) if localns is None else localns
    2184              if localns is None and globalns is None:
    2185                  # This is surprising, but required.  Before Python 3.10,
    2186                  # get_type_hints only evaluated the globalns of
    2187                  # a class.  To maintain backwards compatibility, we reverse
    2188                  # the globalns and localns order so that eval() looks into
    2189                  # *base_globals* first rather than *base_locals*.
    2190                  # This only affects ForwardRefs.
    2191                  base_globals, base_locals = base_locals, base_globals
    2192              for name, value in ann.items():
    2193                  if value is None:
    2194                      value = type(None)
    2195                  if isinstance(value, str):
    2196                      value = ForwardRef(value, is_argument=False, is_class=True)
    2197                  value = _eval_type(value, base_globals, base_locals)
    2198                  hints[name] = value
    2199          return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
    2200  
    2201      if globalns is None:
    2202          if isinstance(obj, types.ModuleType):
    2203              globalns = obj.__dict__
    2204          else:
    2205              nsobj = obj
    2206              # Find globalns for the unwrapped object.
    2207              while hasattr(nsobj, '__wrapped__'):
    2208                  nsobj = nsobj.__wrapped__
    2209              globalns = getattr(nsobj, '__globals__', {})
    2210          if localns is None:
    2211              localns = globalns
    2212      elif localns is None:
    2213          localns = globalns
    2214      hints = getattr(obj, '__annotations__', None)
    2215      if hints is None:
    2216          # Return empty annotations for something that _could_ have them.
    2217          if isinstance(obj, _allowed_types):
    2218              return {}
    2219          else:
    2220              raise TypeError('{!r} is not a module, class, method, '
    2221                              'or function.'.format(obj))
    2222      hints = dict(hints)
    2223      for name, value in hints.items():
    2224          if value is None:
    2225              value = type(None)
    2226          if isinstance(value, str):
    2227              # class-level forward refs were handled above, this must be either
    2228              # a module-level annotation or a function argument annotation
    2229              value = ForwardRef(
    2230                  value,
    2231                  is_argument=not isinstance(obj, types.ModuleType),
    2232                  is_class=False,
    2233              )
    2234          hints[name] = _eval_type(value, globalns, localns)
    2235      return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
    2236  
    2237  
    2238  def _strip_annotations(t):
    2239      """Strip the annotations from a given type."""
    2240      if isinstance(t, _AnnotatedAlias):
    2241          return _strip_annotations(t.__origin__)
    2242      if hasattr(t, "__origin__") and t.__origin__ in (Required, NotRequired):
    2243          return _strip_annotations(t.__args__[0])
    2244      if isinstance(t, _GenericAlias):
    2245          stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
    2246          if stripped_args == t.__args__:
    2247              return t
    2248          return t.copy_with(stripped_args)
    2249      if isinstance(t, GenericAlias):
    2250          stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
    2251          if stripped_args == t.__args__:
    2252              return t
    2253          return GenericAlias(t.__origin__, stripped_args)
    2254      if isinstance(t, types.UnionType):
    2255          stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
    2256          if stripped_args == t.__args__:
    2257              return t
    2258          return functools.reduce(operator.or_, stripped_args)
    2259  
    2260      return t
    2261  
    2262  
    2263  def get_origin(tp):
    2264      """Get the unsubscripted version of a type.
    2265  
    2266      This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar,
    2267      Annotated, and others. Return None for unsupported types.
    2268  
    2269      Examples::
    2270  
    2271          assert get_origin(Literal[42]) is Literal
    2272          assert get_origin(int) is None
    2273          assert get_origin(ClassVar[int]) is ClassVar
    2274          assert get_origin(Generic) is Generic
    2275          assert get_origin(Generic[T]) is Generic
    2276          assert get_origin(Union[T, int]) is Union
    2277          assert get_origin(List[Tuple[T, T]][int]) is list
    2278          assert get_origin(P.args) is P
    2279      """
    2280      if isinstance(tp, _AnnotatedAlias):
    2281          return Annotated
    2282      if isinstance(tp, (_BaseGenericAlias, GenericAlias,
    2283                         ParamSpecArgs, ParamSpecKwargs)):
    2284          return tp.__origin__
    2285      if tp is Generic:
    2286          return Generic
    2287      if isinstance(tp, types.UnionType):
    2288          return types.UnionType
    2289      return None
    2290  
    2291  
    2292  def get_args(tp):
    2293      """Get type arguments with all substitutions performed.
    2294  
    2295      For unions, basic simplifications used by Union constructor are performed.
    2296  
    2297      Examples::
    2298  
    2299          assert get_args(Dict[str, int]) == (str, int)
    2300          assert get_args(int) == ()
    2301          assert get_args(Union[int, Union[T, int], str][int]) == (int, str)
    2302          assert get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
    2303          assert get_args(Callable[[], T][int]) == ([], int)
    2304      """
    2305      if isinstance(tp, _AnnotatedAlias):
    2306          return (tp.__origin__,) + tp.__metadata__
    2307      if isinstance(tp, (_GenericAlias, GenericAlias)):
    2308          res = tp.__args__
    2309          if _should_unflatten_callable_args(tp, res):
    2310              res = (list(res[:-1]), res[-1])
    2311          return res
    2312      if isinstance(tp, types.UnionType):
    2313          return tp.__args__
    2314      return ()
    2315  
    2316  
    2317  def is_typeddict(tp):
    2318      """Check if an annotation is a TypedDict class.
    2319  
    2320      For example::
    2321  
    2322          class Film(TypedDict):
    2323              title: str
    2324              year: int
    2325  
    2326          is_typeddict(Film)              # => True
    2327          is_typeddict(Union[list, str])  # => False
    2328      """
    2329      return isinstance(tp, _TypedDictMeta)
    2330  
    2331  
    2332  _ASSERT_NEVER_REPR_MAX_LENGTH = 100
    2333  
    2334  
    2335  def assert_never(arg: Never, /) -> Never:
    2336      """Statically assert that a line of code is unreachable.
    2337  
    2338      Example::
    2339  
    2340          def int_or_str(arg: int | str) -> None:
    2341              match arg:
    2342                  case int():
    2343                      print("It's an int")
    2344                  case str():
    2345                      print("It's a str")
    2346                  case _:
    2347                      assert_never(arg)
    2348  
    2349      If a type checker finds that a call to assert_never() is
    2350      reachable, it will emit an error.
    2351  
    2352      At runtime, this throws an exception when called.
    2353      """
    2354      value = repr(arg)
    2355      if len(value) > _ASSERT_NEVER_REPR_MAX_LENGTH:
    2356          value = value[:_ASSERT_NEVER_REPR_MAX_LENGTH] + '...'
    2357      raise AssertionError(f"Expected code to be unreachable, but got: {value}")
    2358  
    2359  
    2360  def no_type_check(arg):
    2361      """Decorator to indicate that annotations are not type hints.
    2362  
    2363      The argument must be a class or function; if it is a class, it
    2364      applies recursively to all methods and classes defined in that class
    2365      (but not to methods defined in its superclasses or subclasses).
    2366  
    2367      This mutates the function(s) or class(es) in place.
    2368      """
    2369      if isinstance(arg, type):
    2370          for key in dir(arg):
    2371              obj = getattr(arg, key)
    2372              if (
    2373                  not hasattr(obj, '__qualname__')
    2374                  or obj.__qualname__ != f'{arg.__qualname__}.{obj.__name__}'
    2375                  or getattr(obj, '__module__', None) != arg.__module__
    2376              ):
    2377                  # We only modify objects that are defined in this type directly.
    2378                  # If classes / methods are nested in multiple layers,
    2379                  # we will modify them when processing their direct holders.
    2380                  continue
    2381              # Instance, class, and static methods:
    2382              if isinstance(obj, types.FunctionType):
    2383                  obj.__no_type_check__ = True
    2384              if isinstance(obj, types.MethodType):
    2385                  obj.__func__.__no_type_check__ = True
    2386              # Nested types:
    2387              if isinstance(obj, type):
    2388                  no_type_check(obj)
    2389      try:
    2390          arg.__no_type_check__ = True
    2391      except TypeError:  # built-in classes
    2392          pass
    2393      return arg
    2394  
    2395  
    2396  def no_type_check_decorator(decorator):
    2397      """Decorator to give another decorator the @no_type_check effect.
    2398  
    2399      This wraps the decorator with something that wraps the decorated
    2400      function in @no_type_check.
    2401      """
    2402      @functools.wraps(decorator)
    2403      def wrapped_decorator(*args, **kwds):
    2404          func = decorator(*args, **kwds)
    2405          func = no_type_check(func)
    2406          return func
    2407  
    2408      return wrapped_decorator
    2409  
    2410  
    2411  def _overload_dummy(*args, **kwds):
    2412      """Helper for @overload to raise when called."""
    2413      raise NotImplementedError(
    2414          "You should not call an overloaded function. "
    2415          "A series of @overload-decorated functions "
    2416          "outside a stub module should always be followed "
    2417          "by an implementation that is not @overload-ed.")
    2418  
    2419  
    2420  # {module: {qualname: {firstlineno: func}}}
    2421  _overload_registry = defaultdict(functools.partial(defaultdict, dict))
    2422  
    2423  
    2424  def overload(func):
    2425      """Decorator for overloaded functions/methods.
    2426  
    2427      In a stub file, place two or more stub definitions for the same
    2428      function in a row, each decorated with @overload.
    2429  
    2430      For example::
    2431  
    2432          @overload
    2433          def utf8(value: None) -> None: ...
    2434          @overload
    2435          def utf8(value: bytes) -> bytes: ...
    2436          @overload
    2437          def utf8(value: str) -> bytes: ...
    2438  
    2439      In a non-stub file (i.e. a regular .py file), do the same but
    2440      follow it with an implementation.  The implementation should *not*
    2441      be decorated with @overload::
    2442  
    2443          @overload
    2444          def utf8(value: None) -> None: ...
    2445          @overload
    2446          def utf8(value: bytes) -> bytes: ...
    2447          @overload
    2448          def utf8(value: str) -> bytes: ...
    2449          def utf8(value):
    2450              ...  # implementation goes here
    2451  
    2452      The overloads for a function can be retrieved at runtime using the
    2453      get_overloads() function.
    2454      """
    2455      # classmethod and staticmethod
    2456      f = getattr(func, "__func__", func)
    2457      try:
    2458          _overload_registry[f.__module__][f.__qualname__][f.__code__.co_firstlineno] = func
    2459      except AttributeError:
    2460          # Not a normal function; ignore.
    2461          pass
    2462      return _overload_dummy
    2463  
    2464  
    2465  def get_overloads(func):
    2466      """Return all defined overloads for *func* as a sequence."""
    2467      # classmethod and staticmethod
    2468      f = getattr(func, "__func__", func)
    2469      if f.__module__ not in _overload_registry:
    2470          return []
    2471      mod_dict = _overload_registry[f.__module__]
    2472      if f.__qualname__ not in mod_dict:
    2473          return []
    2474      return list(mod_dict[f.__qualname__].values())
    2475  
    2476  
    2477  def clear_overloads():
    2478      """Clear all overloads in the registry."""
    2479      _overload_registry.clear()
    2480  
    2481  
    2482  def final(f):
    2483      """Decorator to indicate final methods and final classes.
    2484  
    2485      Use this decorator to indicate to type checkers that the decorated
    2486      method cannot be overridden, and decorated class cannot be subclassed.
    2487  
    2488      For example::
    2489  
    2490          class Base:
    2491              @final
    2492              def done(self) -> None:
    2493                  ...
    2494          class Sub(Base):
    2495              def done(self) -> None:  # Error reported by type checker
    2496                  ...
    2497  
    2498          @final
    2499          class Leaf:
    2500              ...
    2501          class Other(Leaf):  # Error reported by type checker
    2502              ...
    2503  
    2504      There is no runtime checking of these properties. The decorator
    2505      attempts to set the ``__final__`` attribute to ``True`` on the decorated
    2506      object to allow runtime introspection.
    2507      """
    2508      try:
    2509          f.__final__ = True
    2510      except (AttributeError, TypeError):
    2511          # Skip the attribute silently if it is not writable.
    2512          # AttributeError happens if the object has __slots__ or a
    2513          # read-only property, TypeError if it's a builtin class.
    2514          pass
    2515      return f
    2516  
    2517  
    2518  # Some unconstrained type variables.  These were initially used by the container types.
    2519  # They were never meant for export and are now unused, but we keep them around to
    2520  # avoid breaking compatibility with users who import them.
    2521  T = TypeVar('T')  # Any type.
    2522  KT = TypeVar('KT')  # Key type.
    2523  VT = TypeVar('VT')  # Value type.
    2524  T_co = TypeVar('T_co', covariant=True)  # Any type covariant containers.
    2525  V_co = TypeVar('V_co', covariant=True)  # Any type covariant containers.
    2526  VT_co = TypeVar('VT_co', covariant=True)  # Value type covariant containers.
    2527  T_contra = TypeVar('T_contra', contravariant=True)  # Ditto contravariant.
    2528  # Internal type variable used for Type[].
    2529  CT_co = TypeVar('CT_co', covariant=True, bound=type)
    2530  
    2531  
    2532  # A useful type variable with constraints.  This represents string types.
    2533  # (This one *is* for export!)
    2534  AnyStr = TypeVar('AnyStr', bytes, str)
    2535  
    2536  
    2537  # Various ABCs mimicking those in collections.abc.
    2538  _alias = _SpecialGenericAlias
    2539  
    2540  Hashable = _alias(collections.abc.Hashable, 0)  # Not generic.
    2541  Awaitable = _alias(collections.abc.Awaitable, 1)
    2542  Coroutine = _alias(collections.abc.Coroutine, 3)
    2543  AsyncIterable = _alias(collections.abc.AsyncIterable, 1)
    2544  AsyncIterator = _alias(collections.abc.AsyncIterator, 1)
    2545  Iterable = _alias(collections.abc.Iterable, 1)
    2546  Iterator = _alias(collections.abc.Iterator, 1)
    2547  Reversible = _alias(collections.abc.Reversible, 1)
    2548  Sized = _alias(collections.abc.Sized, 0)  # Not generic.
    2549  Container = _alias(collections.abc.Container, 1)
    2550  Collection = _alias(collections.abc.Collection, 1)
    2551  Callable = _CallableType(collections.abc.Callable, 2)
    2552  Callable.__doc__ = \
    2553      """Deprecated alias to collections.abc.Callable.
    2554  
    2555      Callable[[int], str] signifies a function that takes a single
    2556      parameter of type int and returns a str.
    2557  
    2558      The subscription syntax must always be used with exactly two
    2559      values: the argument list and the return type.
    2560      The argument list must be a list of types, a ParamSpec,
    2561      Concatenate or ellipsis. The return type must be a single type.
    2562  
    2563      There is no syntax to indicate optional or keyword arguments;
    2564      such function types are rarely used as callback types.
    2565      """
    2566  AbstractSet = _alias(collections.abc.Set, 1, name='AbstractSet')
    2567  MutableSet = _alias(collections.abc.MutableSet, 1)
    2568  # NOTE: Mapping is only covariant in the value type.
    2569  Mapping = _alias(collections.abc.Mapping, 2)
    2570  MutableMapping = _alias(collections.abc.MutableMapping, 2)
    2571  Sequence = _alias(collections.abc.Sequence, 1)
    2572  MutableSequence = _alias(collections.abc.MutableSequence, 1)
    2573  ByteString = _DeprecatedGenericAlias(
    2574      collections.abc.ByteString, 0, removal_version=(3, 14)  # Not generic.
    2575  )
    2576  # Tuple accepts variable number of parameters.
    2577  Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
    2578  Tuple.__doc__ = \
    2579      """Deprecated alias to builtins.tuple.
    2580  
    2581      Tuple[X, Y] is the cross-product type of X and Y.
    2582  
    2583      Example: Tuple[T1, T2] is a tuple of two elements corresponding
    2584      to type variables T1 and T2.  Tuple[int, float, str] is a tuple
    2585      of an int, a float and a string.
    2586  
    2587      To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].
    2588      """
    2589  List = _alias(list, 1, inst=False, name='List')
    2590  Deque = _alias(collections.deque, 1, name='Deque')
    2591  Set = _alias(set, 1, inst=False, name='Set')
    2592  FrozenSet = _alias(frozenset, 1, inst=False, name='FrozenSet')
    2593  MappingView = _alias(collections.abc.MappingView, 1)
    2594  KeysView = _alias(collections.abc.KeysView, 1)
    2595  ItemsView = _alias(collections.abc.ItemsView, 2)
    2596  ValuesView = _alias(collections.abc.ValuesView, 1)
    2597  ContextManager = _alias(contextlib.AbstractContextManager, 1, name='ContextManager')
    2598  AsyncContextManager = _alias(contextlib.AbstractAsyncContextManager, 1, name='AsyncContextManager')
    2599  Dict = _alias(dict, 2, inst=False, name='Dict')
    2600  DefaultDict = _alias(collections.defaultdict, 2, name='DefaultDict')
    2601  OrderedDict = _alias(collections.OrderedDict, 2)
    2602  Counter = _alias(collections.Counter, 1)
    2603  ChainMap = _alias(collections.ChainMap, 2)
    2604  Generator = _alias(collections.abc.Generator, 3)
    2605  AsyncGenerator = _alias(collections.abc.AsyncGenerator, 2)
    2606  Type = _alias(type, 1, inst=False, name='Type')
    2607  Type.__doc__ = \
    2608      """Deprecated alias to builtins.type.
    2609  
    2610      builtins.type or typing.Type can be used to annotate class objects.
    2611      For example, suppose we have the following classes::
    2612  
    2613          class User: ...  # Abstract base for User classes
    2614          class BasicUser(User): ...
    2615          class ProUser(User): ...
    2616          class TeamUser(User): ...
    2617  
    2618      And a function that takes a class argument that's a subclass of
    2619      User and returns an instance of the corresponding class::
    2620  
    2621          def new_user[U](user_class: Type[U]) -> U:
    2622              user = user_class()
    2623              # (Here we could write the user object to a database)
    2624              return user
    2625  
    2626          joe = new_user(BasicUser)
    2627  
    2628      At this point the type checker knows that joe has type BasicUser.
    2629      """
    2630  
    2631  
    2632  @runtime_checkable
    2633  class ESC[4;38;5;81mSupportsInt(ESC[4;38;5;149mProtocol):
    2634      """An ABC with one abstract method __int__."""
    2635  
    2636      __slots__ = ()
    2637  
    2638      @abstractmethod
    2639      def __int__(self) -> int:
    2640          pass
    2641  
    2642  
    2643  @runtime_checkable
    2644  class ESC[4;38;5;81mSupportsFloat(ESC[4;38;5;149mProtocol):
    2645      """An ABC with one abstract method __float__."""
    2646  
    2647      __slots__ = ()
    2648  
    2649      @abstractmethod
    2650      def __float__(self) -> float:
    2651          pass
    2652  
    2653  
    2654  @runtime_checkable
    2655  class ESC[4;38;5;81mSupportsComplex(ESC[4;38;5;149mProtocol):
    2656      """An ABC with one abstract method __complex__."""
    2657  
    2658      __slots__ = ()
    2659  
    2660      @abstractmethod
    2661      def __complex__(self) -> complex:
    2662          pass
    2663  
    2664  
    2665  @runtime_checkable
    2666  class ESC[4;38;5;81mSupportsBytes(ESC[4;38;5;149mProtocol):
    2667      """An ABC with one abstract method __bytes__."""
    2668  
    2669      __slots__ = ()
    2670  
    2671      @abstractmethod
    2672      def __bytes__(self) -> bytes:
    2673          pass
    2674  
    2675  
    2676  @runtime_checkable
    2677  class ESC[4;38;5;81mSupportsIndex(ESC[4;38;5;149mProtocol):
    2678      """An ABC with one abstract method __index__."""
    2679  
    2680      __slots__ = ()
    2681  
    2682      @abstractmethod
    2683      def __index__(self) -> int:
    2684          pass
    2685  
    2686  
    2687  @runtime_checkable
    2688  class ESC[4;38;5;81mSupportsAbs[ESC[4;38;5;81mT](ESC[4;38;5;149mProtocol):
    2689      """An ABC with one abstract method __abs__ that is covariant in its return type."""
    2690  
    2691      __slots__ = ()
    2692  
    2693      @abstractmethod
    2694      def __abs__(self) -> T:
    2695          pass
    2696  
    2697  
    2698  @runtime_checkable
    2699  class ESC[4;38;5;81mSupportsRound[ESC[4;38;5;81mT](ESC[4;38;5;149mProtocol):
    2700      """An ABC with one abstract method __round__ that is covariant in its return type."""
    2701  
    2702      __slots__ = ()
    2703  
    2704      @abstractmethod
    2705      def __round__(self, ndigits: int = 0) -> T:
    2706          pass
    2707  
    2708  
    2709  def _make_nmtuple(name, types, module, defaults = ()):
    2710      fields = [n for n, t in types]
    2711      types = {n: _type_check(t, f"field {n} annotation must be a type")
    2712               for n, t in types}
    2713      nm_tpl = collections.namedtuple(name, fields,
    2714                                      defaults=defaults, module=module)
    2715      nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = types
    2716      return nm_tpl
    2717  
    2718  
    2719  # attributes prohibited to set in NamedTuple class syntax
    2720  _prohibited = frozenset({'__new__', '__init__', '__slots__', '__getnewargs__',
    2721                           '_fields', '_field_defaults',
    2722                           '_make', '_replace', '_asdict', '_source'})
    2723  
    2724  _special = frozenset({'__module__', '__name__', '__annotations__'})
    2725  
    2726  
    2727  class ESC[4;38;5;81mNamedTupleMeta(ESC[4;38;5;149mtype):
    2728      def __new__(cls, typename, bases, ns):
    2729          assert _NamedTuple in bases
    2730          for base in bases:
    2731              if base is not _NamedTuple and base is not Generic:
    2732                  raise TypeError(
    2733                      'can only inherit from a NamedTuple type and Generic')
    2734          bases = tuple(tuple if base is _NamedTuple else base for base in bases)
    2735          types = ns.get('__annotations__', {})
    2736          default_names = []
    2737          for field_name in types:
    2738              if field_name in ns:
    2739                  default_names.append(field_name)
    2740              elif default_names:
    2741                  raise TypeError(f"Non-default namedtuple field {field_name} "
    2742                                  f"cannot follow default field"
    2743                                  f"{'s' if len(default_names) > 1 else ''} "
    2744                                  f"{', '.join(default_names)}")
    2745          nm_tpl = _make_nmtuple(typename, types.items(),
    2746                                 defaults=[ns[n] for n in default_names],
    2747                                 module=ns['__module__'])
    2748          nm_tpl.__bases__ = bases
    2749          if Generic in bases:
    2750              class_getitem = _generic_class_getitem
    2751              nm_tpl.__class_getitem__ = classmethod(class_getitem)
    2752          # update from user namespace without overriding special namedtuple attributes
    2753          for key in ns:
    2754              if key in _prohibited:
    2755                  raise AttributeError("Cannot overwrite NamedTuple attribute " + key)
    2756              elif key not in _special and key not in nm_tpl._fields:
    2757                  setattr(nm_tpl, key, ns[key])
    2758          if Generic in bases:
    2759              nm_tpl.__init_subclass__()
    2760          return nm_tpl
    2761  
    2762  
    2763  def NamedTuple(typename, fields=None, /, **kwargs):
    2764      """Typed version of namedtuple.
    2765  
    2766      Usage::
    2767  
    2768          class Employee(NamedTuple):
    2769              name: str
    2770              id: int
    2771  
    2772      This is equivalent to::
    2773  
    2774          Employee = collections.namedtuple('Employee', ['name', 'id'])
    2775  
    2776      The resulting class has an extra __annotations__ attribute, giving a
    2777      dict that maps field names to types.  (The field names are also in
    2778      the _fields attribute, which is part of the namedtuple API.)
    2779      An alternative equivalent functional syntax is also accepted::
    2780  
    2781          Employee = NamedTuple('Employee', [('name', str), ('id', int)])
    2782      """
    2783      if fields is None:
    2784          fields = kwargs.items()
    2785      elif kwargs:
    2786          raise TypeError("Either list of fields or keywords"
    2787                          " can be provided to NamedTuple, not both")
    2788      nt = _make_nmtuple(typename, fields, module=_caller())
    2789      nt.__orig_bases__ = (NamedTuple,)
    2790      return nt
    2791  
    2792  _NamedTuple = type.__new__(NamedTupleMeta, 'NamedTuple', (), {})
    2793  
    2794  def _namedtuple_mro_entries(bases):
    2795      assert NamedTuple in bases
    2796      return (_NamedTuple,)
    2797  
    2798  NamedTuple.__mro_entries__ = _namedtuple_mro_entries
    2799  
    2800  
    2801  class ESC[4;38;5;81m_TypedDictMeta(ESC[4;38;5;149mtype):
    2802      def __new__(cls, name, bases, ns, total=True):
    2803          """Create a new typed dict class object.
    2804  
    2805          This method is called when TypedDict is subclassed,
    2806          or when TypedDict is instantiated. This way
    2807          TypedDict supports all three syntax forms described in its docstring.
    2808          Subclasses and instances of TypedDict return actual dictionaries.
    2809          """
    2810          for base in bases:
    2811              if type(base) is not _TypedDictMeta and base is not Generic:
    2812                  raise TypeError('cannot inherit from both a TypedDict type '
    2813                                  'and a non-TypedDict base class')
    2814  
    2815          if any(issubclass(b, Generic) for b in bases):
    2816              generic_base = (Generic,)
    2817          else:
    2818              generic_base = ()
    2819  
    2820          tp_dict = type.__new__(_TypedDictMeta, name, (*generic_base, dict), ns)
    2821  
    2822          if not hasattr(tp_dict, '__orig_bases__'):
    2823              tp_dict.__orig_bases__ = bases
    2824  
    2825          annotations = {}
    2826          own_annotations = ns.get('__annotations__', {})
    2827          msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
    2828          own_annotations = {
    2829              n: _type_check(tp, msg, module=tp_dict.__module__)
    2830              for n, tp in own_annotations.items()
    2831          }
    2832          required_keys = set()
    2833          optional_keys = set()
    2834  
    2835          for base in bases:
    2836              annotations.update(base.__dict__.get('__annotations__', {}))
    2837              required_keys.update(base.__dict__.get('__required_keys__', ()))
    2838              optional_keys.update(base.__dict__.get('__optional_keys__', ()))
    2839  
    2840          annotations.update(own_annotations)
    2841          for annotation_key, annotation_type in own_annotations.items():
    2842              annotation_origin = get_origin(annotation_type)
    2843              if annotation_origin is Annotated:
    2844                  annotation_args = get_args(annotation_type)
    2845                  if annotation_args:
    2846                      annotation_type = annotation_args[0]
    2847                      annotation_origin = get_origin(annotation_type)
    2848  
    2849              if annotation_origin is Required:
    2850                  required_keys.add(annotation_key)
    2851              elif annotation_origin is NotRequired:
    2852                  optional_keys.add(annotation_key)
    2853              elif total:
    2854                  required_keys.add(annotation_key)
    2855              else:
    2856                  optional_keys.add(annotation_key)
    2857  
    2858          tp_dict.__annotations__ = annotations
    2859          tp_dict.__required_keys__ = frozenset(required_keys)
    2860          tp_dict.__optional_keys__ = frozenset(optional_keys)
    2861          if not hasattr(tp_dict, '__total__'):
    2862              tp_dict.__total__ = total
    2863          return tp_dict
    2864  
    2865      __call__ = dict  # static method
    2866  
    2867      def __subclasscheck__(cls, other):
    2868          # Typed dicts are only for static structural subtyping.
    2869          raise TypeError('TypedDict does not support instance and class checks')
    2870  
    2871      __instancecheck__ = __subclasscheck__
    2872  
    2873  
    2874  def TypedDict(typename, fields=None, /, *, total=True, **kwargs):
    2875      """A simple typed namespace. At runtime it is equivalent to a plain dict.
    2876  
    2877      TypedDict creates a dictionary type such that a type checker will expect all
    2878      instances to have a certain set of keys, where each key is
    2879      associated with a value of a consistent type. This expectation
    2880      is not checked at runtime.
    2881  
    2882      Usage::
    2883  
    2884          class Point2D(TypedDict):
    2885              x: int
    2886              y: int
    2887              label: str
    2888  
    2889          a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
    2890          b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check
    2891  
    2892          assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
    2893  
    2894      The type info can be accessed via the Point2D.__annotations__ dict, and
    2895      the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
    2896      TypedDict supports an additional equivalent form::
    2897  
    2898          Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
    2899  
    2900      By default, all keys must be present in a TypedDict. It is possible
    2901      to override this by specifying totality::
    2902  
    2903          class Point2D(TypedDict, total=False):
    2904              x: int
    2905              y: int
    2906  
    2907      This means that a Point2D TypedDict can have any of the keys omitted. A type
    2908      checker is only expected to support a literal False or True as the value of
    2909      the total argument. True is the default, and makes all items defined in the
    2910      class body be required.
    2911  
    2912      The Required and NotRequired special forms can also be used to mark
    2913      individual keys as being required or not required::
    2914  
    2915          class Point2D(TypedDict):
    2916              x: int               # the "x" key must always be present (Required is the default)
    2917              y: NotRequired[int]  # the "y" key can be omitted
    2918  
    2919      See PEP 655 for more details on Required and NotRequired.
    2920      """
    2921      if fields is None:
    2922          fields = kwargs
    2923      elif kwargs:
    2924          raise TypeError("TypedDict takes either a dict or keyword arguments,"
    2925                          " but not both")
    2926      if kwargs:
    2927          warnings.warn(
    2928              "The kwargs-based syntax for TypedDict definitions is deprecated "
    2929              "in Python 3.11, will be removed in Python 3.13, and may not be "
    2930              "understood by third-party type checkers.",
    2931              DeprecationWarning,
    2932              stacklevel=2,
    2933          )
    2934  
    2935      ns = {'__annotations__': dict(fields)}
    2936      module = _caller()
    2937      if module is not None:
    2938          # Setting correct module is necessary to make typed dict classes pickleable.
    2939          ns['__module__'] = module
    2940  
    2941      td = _TypedDictMeta(typename, (), ns, total=total)
    2942      td.__orig_bases__ = (TypedDict,)
    2943      return td
    2944  
    2945  _TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {})
    2946  TypedDict.__mro_entries__ = lambda bases: (_TypedDict,)
    2947  
    2948  
    2949  @_SpecialForm
    2950  def Required(self, parameters):
    2951      """Special typing construct to mark a TypedDict key as required.
    2952  
    2953      This is mainly useful for total=False TypedDicts.
    2954  
    2955      For example::
    2956  
    2957          class Movie(TypedDict, total=False):
    2958              title: Required[str]
    2959              year: int
    2960  
    2961          m = Movie(
    2962              title='The Matrix',  # typechecker error if key is omitted
    2963              year=1999,
    2964          )
    2965  
    2966      There is no runtime checking that a required key is actually provided
    2967      when instantiating a related TypedDict.
    2968      """
    2969      item = _type_check(parameters, f'{self._name} accepts only a single type.')
    2970      return _GenericAlias(self, (item,))
    2971  
    2972  
    2973  @_SpecialForm
    2974  def NotRequired(self, parameters):
    2975      """Special typing construct to mark a TypedDict key as potentially missing.
    2976  
    2977      For example::
    2978  
    2979          class Movie(TypedDict):
    2980              title: str
    2981              year: NotRequired[int]
    2982  
    2983          m = Movie(
    2984              title='The Matrix',  # typechecker error if key is omitted
    2985              year=1999,
    2986          )
    2987      """
    2988      item = _type_check(parameters, f'{self._name} accepts only a single type.')
    2989      return _GenericAlias(self, (item,))
    2990  
    2991  
    2992  class ESC[4;38;5;81mNewType:
    2993      """NewType creates simple unique types with almost zero runtime overhead.
    2994  
    2995      NewType(name, tp) is considered a subtype of tp
    2996      by static type checkers. At runtime, NewType(name, tp) returns
    2997      a dummy callable that simply returns its argument.
    2998  
    2999      Usage::
    3000  
    3001          UserId = NewType('UserId', int)
    3002  
    3003          def name_by_id(user_id: UserId) -> str:
    3004              ...
    3005  
    3006          UserId('user')          # Fails type check
    3007  
    3008          name_by_id(42)          # Fails type check
    3009          name_by_id(UserId(42))  # OK
    3010  
    3011          num = UserId(5) + 1     # type: int
    3012      """
    3013  
    3014      __call__ = _idfunc
    3015  
    3016      def __init__(self, name, tp):
    3017          self.__qualname__ = name
    3018          if '.' in name:
    3019              name = name.rpartition('.')[-1]
    3020          self.__name__ = name
    3021          self.__supertype__ = tp
    3022          def_mod = _caller()
    3023          if def_mod != 'typing':
    3024              self.__module__ = def_mod
    3025  
    3026      def __mro_entries__(self, bases):
    3027          # We defined __mro_entries__ to get a better error message
    3028          # if a user attempts to subclass a NewType instance. bpo-46170
    3029          superclass_name = self.__name__
    3030  
    3031          class ESC[4;38;5;81mDummy:
    3032              def __init_subclass__(cls):
    3033                  subclass_name = cls.__name__
    3034                  raise TypeError(
    3035                      f"Cannot subclass an instance of NewType. Perhaps you were looking for: "
    3036                      f"`{subclass_name} = NewType({subclass_name!r}, {superclass_name})`"
    3037                  )
    3038  
    3039          return (Dummy,)
    3040  
    3041      def __repr__(self):
    3042          return f'{self.__module__}.{self.__qualname__}'
    3043  
    3044      def __reduce__(self):
    3045          return self.__qualname__
    3046  
    3047      def __or__(self, other):
    3048          return Union[self, other]
    3049  
    3050      def __ror__(self, other):
    3051          return Union[other, self]
    3052  
    3053  
    3054  # Python-version-specific alias (Python 2: unicode; Python 3: str)
    3055  Text = str
    3056  
    3057  
    3058  # Constant that's True when type checking, but False here.
    3059  TYPE_CHECKING = False
    3060  
    3061  
    3062  class ESC[4;38;5;81mIO(ESC[4;38;5;149mGeneric[AnyStr]):
    3063      """Generic base class for TextIO and BinaryIO.
    3064  
    3065      This is an abstract, generic version of the return of open().
    3066  
    3067      NOTE: This does not distinguish between the different possible
    3068      classes (text vs. binary, read vs. write vs. read/write,
    3069      append-only, unbuffered).  The TextIO and BinaryIO subclasses
    3070      below capture the distinctions between text vs. binary, which is
    3071      pervasive in the interface; however we currently do not offer a
    3072      way to track the other distinctions in the type system.
    3073      """
    3074  
    3075      __slots__ = ()
    3076  
    3077      @property
    3078      @abstractmethod
    3079      def mode(self) -> str:
    3080          pass
    3081  
    3082      @property
    3083      @abstractmethod
    3084      def name(self) -> str:
    3085          pass
    3086  
    3087      @abstractmethod
    3088      def close(self) -> None:
    3089          pass
    3090  
    3091      @property
    3092      @abstractmethod
    3093      def closed(self) -> bool:
    3094          pass
    3095  
    3096      @abstractmethod
    3097      def fileno(self) -> int:
    3098          pass
    3099  
    3100      @abstractmethod
    3101      def flush(self) -> None:
    3102          pass
    3103  
    3104      @abstractmethod
    3105      def isatty(self) -> bool:
    3106          pass
    3107  
    3108      @abstractmethod
    3109      def read(self, n: int = -1) -> AnyStr:
    3110          pass
    3111  
    3112      @abstractmethod
    3113      def readable(self) -> bool:
    3114          pass
    3115  
    3116      @abstractmethod
    3117      def readline(self, limit: int = -1) -> AnyStr:
    3118          pass
    3119  
    3120      @abstractmethod
    3121      def readlines(self, hint: int = -1) -> List[AnyStr]:
    3122          pass
    3123  
    3124      @abstractmethod
    3125      def seek(self, offset: int, whence: int = 0) -> int:
    3126          pass
    3127  
    3128      @abstractmethod
    3129      def seekable(self) -> bool:
    3130          pass
    3131  
    3132      @abstractmethod
    3133      def tell(self) -> int:
    3134          pass
    3135  
    3136      @abstractmethod
    3137      def truncate(self, size: int = None) -> int:
    3138          pass
    3139  
    3140      @abstractmethod
    3141      def writable(self) -> bool:
    3142          pass
    3143  
    3144      @abstractmethod
    3145      def write(self, s: AnyStr) -> int:
    3146          pass
    3147  
    3148      @abstractmethod
    3149      def writelines(self, lines: List[AnyStr]) -> None:
    3150          pass
    3151  
    3152      @abstractmethod
    3153      def __enter__(self) -> 'IO[AnyStr]':
    3154          pass
    3155  
    3156      @abstractmethod
    3157      def __exit__(self, type, value, traceback) -> None:
    3158          pass
    3159  
    3160  
    3161  class ESC[4;38;5;81mBinaryIO(ESC[4;38;5;149mIO[bytes]):
    3162      """Typed version of the return of open() in binary mode."""
    3163  
    3164      __slots__ = ()
    3165  
    3166      @abstractmethod
    3167      def write(self, s: Union[bytes, bytearray]) -> int:
    3168          pass
    3169  
    3170      @abstractmethod
    3171      def __enter__(self) -> 'BinaryIO':
    3172          pass
    3173  
    3174  
    3175  class ESC[4;38;5;81mTextIO(ESC[4;38;5;149mIO[str]):
    3176      """Typed version of the return of open() in text mode."""
    3177  
    3178      __slots__ = ()
    3179  
    3180      @property
    3181      @abstractmethod
    3182      def buffer(self) -> BinaryIO:
    3183          pass
    3184  
    3185      @property
    3186      @abstractmethod
    3187      def encoding(self) -> str:
    3188          pass
    3189  
    3190      @property
    3191      @abstractmethod
    3192      def errors(self) -> Optional[str]:
    3193          pass
    3194  
    3195      @property
    3196      @abstractmethod
    3197      def line_buffering(self) -> bool:
    3198          pass
    3199  
    3200      @property
    3201      @abstractmethod
    3202      def newlines(self) -> Any:
    3203          pass
    3204  
    3205      @abstractmethod
    3206      def __enter__(self) -> 'TextIO':
    3207          pass
    3208  
    3209  
    3210  class ESC[4;38;5;81m_DeprecatedType(ESC[4;38;5;149mtype):
    3211      def __getattribute__(cls, name):
    3212          if name not in ("__dict__", "__module__") and name in cls.__dict__:
    3213              warnings.warn(
    3214                  f"{cls.__name__} is deprecated, import directly "
    3215                  f"from typing instead. {cls.__name__} will be removed "
    3216                  "in Python 3.12.",
    3217                  DeprecationWarning,
    3218                  stacklevel=2,
    3219              )
    3220          return super().__getattribute__(name)
    3221  
    3222  
    3223  class ESC[4;38;5;81mio(metaclass=ESC[4;38;5;149m_DeprecatedType):
    3224      """Wrapper namespace for IO generic classes."""
    3225  
    3226      __all__ = ['IO', 'TextIO', 'BinaryIO']
    3227      IO = IO
    3228      TextIO = TextIO
    3229      BinaryIO = BinaryIO
    3230  
    3231  
    3232  io.__name__ = __name__ + '.io'
    3233  sys.modules[io.__name__] = io
    3234  
    3235  Pattern = _alias(stdlib_re.Pattern, 1)
    3236  Match = _alias(stdlib_re.Match, 1)
    3237  
    3238  class ESC[4;38;5;81mre(metaclass=ESC[4;38;5;149m_DeprecatedType):
    3239      """Wrapper namespace for re type aliases."""
    3240  
    3241      __all__ = ['Pattern', 'Match']
    3242      Pattern = Pattern
    3243      Match = Match
    3244  
    3245  
    3246  re.__name__ = __name__ + '.re'
    3247  sys.modules[re.__name__] = re
    3248  
    3249  
    3250  def reveal_type[T](obj: T, /) -> T:
    3251      """Reveal the inferred type of a variable.
    3252  
    3253      When a static type checker encounters a call to ``reveal_type()``,
    3254      it will emit the inferred type of the argument::
    3255  
    3256          x: int = 1
    3257          reveal_type(x)
    3258  
    3259      Running a static type checker (e.g., mypy) on this example
    3260      will produce output similar to 'Revealed type is "builtins.int"'.
    3261  
    3262      At runtime, the function prints the runtime type of the
    3263      argument and returns it unchanged.
    3264      """
    3265      print(f"Runtime type is {type(obj).__name__!r}", file=sys.stderr)
    3266      return obj
    3267  
    3268  
    3269  class ESC[4;38;5;81m_IdentityCallable(ESC[4;38;5;149mProtocol):
    3270      def __call__[T](self, arg: T, /) -> T:
    3271          ...
    3272  
    3273  
    3274  def dataclass_transform(
    3275      *,
    3276      eq_default: bool = True,
    3277      order_default: bool = False,
    3278      kw_only_default: bool = False,
    3279      frozen_default: bool = False,
    3280      field_specifiers: tuple[type[Any] | Callable[..., Any], ...] = (),
    3281      **kwargs: Any,
    3282  ) -> _IdentityCallable:
    3283      """Decorator to mark an object as providing dataclass-like behaviour.
    3284  
    3285      The decorator can be applied to a function, class, or metaclass.
    3286  
    3287      Example usage with a decorator function::
    3288  
    3289          @dataclass_transform()
    3290          def create_model[T](cls: type[T]) -> type[T]:
    3291              ...
    3292              return cls
    3293  
    3294          @create_model
    3295          class CustomerModel:
    3296              id: int
    3297              name: str
    3298  
    3299      On a base class::
    3300  
    3301          @dataclass_transform()
    3302          class ModelBase: ...
    3303  
    3304          class CustomerModel(ModelBase):
    3305              id: int
    3306              name: str
    3307  
    3308      On a metaclass::
    3309  
    3310          @dataclass_transform()
    3311          class ModelMeta(type): ...
    3312  
    3313          class ModelBase(metaclass=ModelMeta): ...
    3314  
    3315          class CustomerModel(ModelBase):
    3316              id: int
    3317              name: str
    3318  
    3319      The ``CustomerModel`` classes defined above will
    3320      be treated by type checkers similarly to classes created with
    3321      ``@dataclasses.dataclass``.
    3322      For example, type checkers will assume these classes have
    3323      ``__init__`` methods that accept ``id`` and ``name``.
    3324  
    3325      The arguments to this decorator can be used to customize this behavior:
    3326      - ``eq_default`` indicates whether the ``eq`` parameter is assumed to be
    3327          ``True`` or ``False`` if it is omitted by the caller.
    3328      - ``order_default`` indicates whether the ``order`` parameter is
    3329          assumed to be True or False if it is omitted by the caller.
    3330      - ``kw_only_default`` indicates whether the ``kw_only`` parameter is
    3331          assumed to be True or False if it is omitted by the caller.
    3332      - ``frozen_default`` indicates whether the ``frozen`` parameter is
    3333          assumed to be True or False if it is omitted by the caller.
    3334      - ``field_specifiers`` specifies a static list of supported classes
    3335          or functions that describe fields, similar to ``dataclasses.field()``.
    3336      - Arbitrary other keyword arguments are accepted in order to allow for
    3337          possible future extensions.
    3338  
    3339      At runtime, this decorator records its arguments in the
    3340      ``__dataclass_transform__`` attribute on the decorated object.
    3341      It has no other runtime effect.
    3342  
    3343      See PEP 681 for more details.
    3344      """
    3345      def decorator(cls_or_fn):
    3346          cls_or_fn.__dataclass_transform__ = {
    3347              "eq_default": eq_default,
    3348              "order_default": order_default,
    3349              "kw_only_default": kw_only_default,
    3350              "frozen_default": frozen_default,
    3351              "field_specifiers": field_specifiers,
    3352              "kwargs": kwargs,
    3353          }
    3354          return cls_or_fn
    3355      return decorator
    3356  
    3357  
    3358  type _Func = Callable[..., Any]
    3359  
    3360  
    3361  def override[F: _Func](method: F, /) -> F:
    3362      """Indicate that a method is intended to override a method in a base class.
    3363  
    3364      Usage::
    3365  
    3366          class Base:
    3367              def method(self) -> None: ...
    3368                  pass
    3369  
    3370          class Child(Base):
    3371              @override
    3372              def method(self) -> None:
    3373                  super().method()
    3374  
    3375      When this decorator is applied to a method, the type checker will
    3376      validate that it overrides a method or attribute with the same name on a
    3377      base class.  This helps prevent bugs that may occur when a base class is
    3378      changed without an equivalent change to a child class.
    3379  
    3380      There is no runtime checking of this property. The decorator attempts to
    3381      set the ``__override__`` attribute to ``True`` on the decorated object to
    3382      allow runtime introspection.
    3383  
    3384      See PEP 698 for details.
    3385      """
    3386      try:
    3387          method.__override__ = True
    3388      except (AttributeError, TypeError):
    3389          # Skip the attribute silently if it is not writable.
    3390          # AttributeError happens if the object has __slots__ or a
    3391          # read-only property, TypeError if it's a builtin class.
    3392          pass
    3393      return method