• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""
2The typing module: Support for gradual typing as defined by PEP 484.
3
4At large scale, the structure of the module is following:
5* Imports and exports, all public names should be explicitly added to __all__.
6* Internal helper functions: these should never be used in code outside this module.
7* _SpecialForm and its instances (special forms): Any, NoReturn, ClassVar, Union, Optional
8* Two classes whose instances can be type arguments in addition to types: ForwardRef and TypeVar
9* The core of internal generics API: _GenericAlias and _VariadicGenericAlias, the latter is
10  currently only used by Tuple and Callable. All subscripted types like X[int], Union[int, str],
11  etc., are instances of either of these classes.
12* The public counterpart of the generics API consists of two classes: Generic and Protocol.
13* Public helper functions: get_type_hints, overload, cast, no_type_check,
14  no_type_check_decorator.
15* Generic aliases for collections.abc ABCs and few additional protocols.
16* Special types: NewType, NamedTuple, TypedDict.
17* Wrapper submodules for re and io related types.
18"""
19
20from abc import abstractmethod, ABCMeta
21import collections
22import collections.abc
23import contextlib
24import functools
25import operator
26import re as stdlib_re  # Avoid confusion with the re we export.
27import sys
28import types
29from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias
30
31# Please keep __all__ alphabetized within each category.
32__all__ = [
33    # Super-special typing primitives.
34    'Annotated',
35    'Any',
36    'Callable',
37    'ClassVar',
38    'Final',
39    'ForwardRef',
40    'Generic',
41    'Literal',
42    'Optional',
43    'Protocol',
44    'Tuple',
45    'Type',
46    'TypeVar',
47    'Union',
48
49    # ABCs (from collections.abc).
50    'AbstractSet',  # collections.abc.Set.
51    'ByteString',
52    'Container',
53    'ContextManager',
54    'Hashable',
55    'ItemsView',
56    'Iterable',
57    'Iterator',
58    'KeysView',
59    'Mapping',
60    'MappingView',
61    'MutableMapping',
62    'MutableSequence',
63    'MutableSet',
64    'Sequence',
65    'Sized',
66    'ValuesView',
67    'Awaitable',
68    'AsyncIterator',
69    'AsyncIterable',
70    'Coroutine',
71    'Collection',
72    'AsyncGenerator',
73    'AsyncContextManager',
74
75    # Structural checks, a.k.a. protocols.
76    'Reversible',
77    'SupportsAbs',
78    'SupportsBytes',
79    'SupportsComplex',
80    'SupportsFloat',
81    'SupportsIndex',
82    'SupportsInt',
83    'SupportsRound',
84
85    # Concrete collection types.
86    'ChainMap',
87    'Counter',
88    'Deque',
89    'Dict',
90    'DefaultDict',
91    'List',
92    'OrderedDict',
93    'Set',
94    'FrozenSet',
95    'NamedTuple',  # Not really a type.
96    'TypedDict',  # Not really a type.
97    'Generator',
98
99    # One-off things.
100    'AnyStr',
101    'cast',
102    'final',
103    'get_args',
104    'get_origin',
105    'get_type_hints',
106    'NewType',
107    'no_type_check',
108    'no_type_check_decorator',
109    'NoReturn',
110    'overload',
111    'runtime_checkable',
112    'Text',
113    'TYPE_CHECKING',
114]
115
116# The pseudo-submodules 're' and 'io' are part of the public
117# namespace, but excluded from __all__ because they might stomp on
118# legitimate imports of those modules.
119
120
121def _type_convert(arg):
122    """For converting None to type(None), and strings to ForwardRef."""
123    if arg is None:
124        return type(None)
125    if isinstance(arg, str):
126        return ForwardRef(arg)
127    return arg
128
129
130def _type_check(arg, msg, is_argument=True):
131    """Check that the argument is a type, and return it (internal helper).
132
133    As a special case, accept None and return type(None) instead. Also wrap strings
134    into ForwardRef instances. Consider several corner cases, for example plain
135    special forms like Union are not valid, while Union[int, str] is OK, etc.
136    The msg argument is a human-readable error message, e.g::
137
138        "Union[arg, ...]: arg should be a type."
139
140    We append the repr() of the actual value (truncated to 100 chars).
141    """
142    invalid_generic_forms = (Generic, Protocol)
143    if is_argument:
144        invalid_generic_forms = invalid_generic_forms + (ClassVar, Final)
145
146    arg = _type_convert(arg)
147    if (isinstance(arg, _GenericAlias) and
148            arg.__origin__ in invalid_generic_forms):
149        raise TypeError(f"{arg} is not valid as type argument")
150    if arg in (Any, NoReturn):
151        return arg
152    if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol):
153        raise TypeError(f"Plain {arg} is not valid as type argument")
154    if isinstance(arg, (type, TypeVar, ForwardRef)):
155        return arg
156    if not callable(arg):
157        raise TypeError(f"{msg} Got {arg!r:.100}.")
158    return arg
159
160
161def _type_repr(obj):
162    """Return the repr() of an object, special-casing types (internal helper).
163
164    If obj is a type, we return a shorter version than the default
165    type.__repr__, based on the module and qualified name, which is
166    typically enough to uniquely identify a type.  For everything
167    else, we fall back on repr(obj).
168    """
169    if isinstance(obj, types.GenericAlias):
170        return repr(obj)
171    if isinstance(obj, type):
172        if obj.__module__ == 'builtins':
173            return obj.__qualname__
174        return f'{obj.__module__}.{obj.__qualname__}'
175    if obj is ...:
176        return('...')
177    if isinstance(obj, types.FunctionType):
178        return obj.__name__
179    return repr(obj)
180
181
182def _collect_type_vars(types):
183    """Collect all type variable contained in types in order of
184    first appearance (lexicographic order). For example::
185
186        _collect_type_vars((T, List[S, T])) == (T, S)
187    """
188    tvars = []
189    for t in types:
190        if isinstance(t, TypeVar) and t not in tvars:
191            tvars.append(t)
192        if isinstance(t, (_GenericAlias, GenericAlias)):
193            tvars.extend([t for t in t.__parameters__ if t not in tvars])
194    return tuple(tvars)
195
196
197def _check_generic(cls, parameters, elen):
198    """Check correct count for parameters of a generic cls (internal helper).
199    This gives a nice error message in case of count mismatch.
200    """
201    if not elen:
202        raise TypeError(f"{cls} is not a generic class")
203    alen = len(parameters)
204    if alen != elen:
205        raise TypeError(f"Too {'many' if alen > elen else 'few'} parameters for {cls};"
206                        f" actual {alen}, expected {elen}")
207
208
209def _deduplicate(params):
210    # Weed out strict duplicates, preserving the first of each occurrence.
211    all_params = set(params)
212    if len(all_params) < len(params):
213        new_params = []
214        for t in params:
215            if t in all_params:
216                new_params.append(t)
217                all_params.remove(t)
218        params = new_params
219        assert not all_params, all_params
220    return params
221
222
223def _remove_dups_flatten(parameters):
224    """An internal helper for Union creation and substitution: flatten Unions
225    among parameters, then remove duplicates.
226    """
227    # Flatten out Union[Union[...], ...].
228    params = []
229    for p in parameters:
230        if isinstance(p, _UnionGenericAlias):
231            params.extend(p.__args__)
232        elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:
233            params.extend(p[1:])
234        else:
235            params.append(p)
236
237    return tuple(_deduplicate(params))
238
239
240def _flatten_literal_params(parameters):
241    """An internal helper for Literal creation: flatten Literals among parameters"""
242    params = []
243    for p in parameters:
244        if isinstance(p, _LiteralGenericAlias):
245            params.extend(p.__args__)
246        else:
247            params.append(p)
248    return tuple(params)
249
250
251_cleanups = []
252
253
254def _tp_cache(func=None, /, *, typed=False):
255    """Internal wrapper caching __getitem__ of generic types with a fallback to
256    original function for non-hashable arguments.
257    """
258    def decorator(func):
259        cached = functools.lru_cache(typed=typed)(func)
260        _cleanups.append(cached.cache_clear)
261
262        @functools.wraps(func)
263        def inner(*args, **kwds):
264            try:
265                return cached(*args, **kwds)
266            except TypeError:
267                pass  # All real errors (not unhashable args) are raised below.
268            return func(*args, **kwds)
269        return inner
270
271    if func is not None:
272        return decorator(func)
273
274    return decorator
275
276def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
277    """Evaluate all forward references in the given type t.
278    For use of globalns and localns see the docstring for get_type_hints().
279    recursive_guard is used to prevent prevent infinite recursion
280    with recursive ForwardRef.
281    """
282    if isinstance(t, ForwardRef):
283        return t._evaluate(globalns, localns, recursive_guard)
284    if isinstance(t, (_GenericAlias, GenericAlias)):
285        ev_args = tuple(_eval_type(a, globalns, localns, recursive_guard) for a in t.__args__)
286        if ev_args == t.__args__:
287            return t
288        if isinstance(t, GenericAlias):
289            return GenericAlias(t.__origin__, ev_args)
290        else:
291            return t.copy_with(ev_args)
292    return t
293
294
295class _Final:
296    """Mixin to prohibit subclassing"""
297
298    __slots__ = ('__weakref__',)
299
300    def __init_subclass__(self, /, *args, **kwds):
301        if '_root' not in kwds:
302            raise TypeError("Cannot subclass special typing classes")
303
304class _Immutable:
305    """Mixin to indicate that object should not be copied."""
306    __slots__ = ()
307
308    def __copy__(self):
309        return self
310
311    def __deepcopy__(self, memo):
312        return self
313
314
315# Internal indicator of special typing constructs.
316# See __doc__ instance attribute for specific docs.
317class _SpecialForm(_Final, _root=True):
318    __slots__ = ('_name', '__doc__', '_getitem')
319
320    def __init__(self, getitem):
321        self._getitem = getitem
322        self._name = getitem.__name__
323        self.__doc__ = getitem.__doc__
324
325    def __mro_entries__(self, bases):
326        raise TypeError(f"Cannot subclass {self!r}")
327
328    def __repr__(self):
329        return 'typing.' + self._name
330
331    def __reduce__(self):
332        return self._name
333
334    def __call__(self, *args, **kwds):
335        raise TypeError(f"Cannot instantiate {self!r}")
336
337    def __instancecheck__(self, obj):
338        raise TypeError(f"{self} cannot be used with isinstance()")
339
340    def __subclasscheck__(self, cls):
341        raise TypeError(f"{self} cannot be used with issubclass()")
342
343    @_tp_cache
344    def __getitem__(self, parameters):
345        return self._getitem(self, parameters)
346
347
348class _LiteralSpecialForm(_SpecialForm, _root=True):
349    @_tp_cache(typed=True)
350    def __getitem__(self, parameters):
351        return self._getitem(self, parameters)
352
353
354@_SpecialForm
355def Any(self, parameters):
356    """Special type indicating an unconstrained type.
357
358    - Any is compatible with every type.
359    - Any assumed to have all methods.
360    - All values assumed to be instances of Any.
361
362    Note that all the above statements are true from the point of view of
363    static type checkers. At runtime, Any should not be used with instance
364    or class checks.
365    """
366    raise TypeError(f"{self} is not subscriptable")
367
368@_SpecialForm
369def NoReturn(self, parameters):
370    """Special type indicating functions that never return.
371    Example::
372
373      from typing import NoReturn
374
375      def stop() -> NoReturn:
376          raise Exception('no way')
377
378    This type is invalid in other positions, e.g., ``List[NoReturn]``
379    will fail in static type checkers.
380    """
381    raise TypeError(f"{self} is not subscriptable")
382
383@_SpecialForm
384def ClassVar(self, parameters):
385    """Special type construct to mark class variables.
386
387    An annotation wrapped in ClassVar indicates that a given
388    attribute is intended to be used as a class variable and
389    should not be set on instances of that class. Usage::
390
391      class Starship:
392          stats: ClassVar[Dict[str, int]] = {} # class variable
393          damage: int = 10                     # instance variable
394
395    ClassVar accepts only types and cannot be further subscribed.
396
397    Note that ClassVar is not a class itself, and should not
398    be used with isinstance() or issubclass().
399    """
400    item = _type_check(parameters, f'{self} accepts only single type.')
401    return _GenericAlias(self, (item,))
402
403@_SpecialForm
404def Final(self, parameters):
405    """Special typing construct to indicate final names to type checkers.
406
407    A final name cannot be re-assigned or overridden in a subclass.
408    For example:
409
410      MAX_SIZE: Final = 9000
411      MAX_SIZE += 1  # Error reported by type checker
412
413      class Connection:
414          TIMEOUT: Final[int] = 10
415
416      class FastConnector(Connection):
417          TIMEOUT = 1  # Error reported by type checker
418
419    There is no runtime checking of these properties.
420    """
421    item = _type_check(parameters, f'{self} accepts only single type.')
422    return _GenericAlias(self, (item,))
423
424@_SpecialForm
425def Union(self, parameters):
426    """Union type; Union[X, Y] means either X or Y.
427
428    To define a union, use e.g. Union[int, str].  Details:
429    - The arguments must be types and there must be at least one.
430    - None as an argument is a special case and is replaced by
431      type(None).
432    - Unions of unions are flattened, e.g.::
433
434        Union[Union[int, str], float] == Union[int, str, float]
435
436    - Unions of a single argument vanish, e.g.::
437
438        Union[int] == int  # The constructor actually returns int
439
440    - Redundant arguments are skipped, e.g.::
441
442        Union[int, str, int] == Union[int, str]
443
444    - When comparing unions, the argument order is ignored, e.g.::
445
446        Union[int, str] == Union[str, int]
447
448    - You cannot subclass or instantiate a union.
449    - You can use Optional[X] as a shorthand for Union[X, None].
450    """
451    if parameters == ():
452        raise TypeError("Cannot take a Union of no types.")
453    if not isinstance(parameters, tuple):
454        parameters = (parameters,)
455    msg = "Union[arg, ...]: each arg must be a type."
456    parameters = tuple(_type_check(p, msg) for p in parameters)
457    parameters = _remove_dups_flatten(parameters)
458    if len(parameters) == 1:
459        return parameters[0]
460    return _UnionGenericAlias(self, parameters)
461
462@_SpecialForm
463def Optional(self, parameters):
464    """Optional type.
465
466    Optional[X] is equivalent to Union[X, None].
467    """
468    arg = _type_check(parameters, f"{self} requires a single type.")
469    return Union[arg, type(None)]
470
471@_LiteralSpecialForm
472def Literal(self, parameters):
473    """Special typing form to define literal types (a.k.a. value types).
474
475    This form can be used to indicate to type checkers that the corresponding
476    variable or function parameter has a value equivalent to the provided
477    literal (or one of several literals):
478
479      def validate_simple(data: Any) -> Literal[True]:  # always returns True
480          ...
481
482      MODE = Literal['r', 'rb', 'w', 'wb']
483      def open_helper(file: str, mode: MODE) -> str:
484          ...
485
486      open_helper('/some/path', 'r')  # Passes type check
487      open_helper('/other/path', 'typo')  # Error in type checker
488
489    Literal[...] cannot be subclassed. At runtime, an arbitrary value
490    is allowed as type argument to Literal[...], but type checkers may
491    impose restrictions.
492    """
493    # There is no '_type_check' call because arguments to Literal[...] are
494    # values, not types.
495    if not isinstance(parameters, tuple):
496        parameters = (parameters,)
497
498    parameters = _flatten_literal_params(parameters)
499
500    try:
501        parameters = tuple(p for p, _ in _deduplicate(list(_value_and_type_iter(parameters))))
502    except TypeError:  # unhashable parameters
503        pass
504
505    return _LiteralGenericAlias(self, parameters)
506
507
508class ForwardRef(_Final, _root=True):
509    """Internal wrapper to hold a forward reference."""
510
511    __slots__ = ('__forward_arg__', '__forward_code__',
512                 '__forward_evaluated__', '__forward_value__',
513                 '__forward_is_argument__')
514
515    def __init__(self, arg, is_argument=True):
516        if not isinstance(arg, str):
517            raise TypeError(f"Forward reference must be a string -- got {arg!r}")
518        try:
519            code = compile(arg, '<string>', 'eval')
520        except SyntaxError:
521            raise SyntaxError(f"Forward reference must be an expression -- got {arg!r}")
522        self.__forward_arg__ = arg
523        self.__forward_code__ = code
524        self.__forward_evaluated__ = False
525        self.__forward_value__ = None
526        self.__forward_is_argument__ = is_argument
527
528    def _evaluate(self, globalns, localns, recursive_guard):
529        if self.__forward_arg__ in recursive_guard:
530            return self
531        if not self.__forward_evaluated__ or localns is not globalns:
532            if globalns is None and localns is None:
533                globalns = localns = {}
534            elif globalns is None:
535                globalns = localns
536            elif localns is None:
537                localns = globalns
538            type_ =_type_check(
539                eval(self.__forward_code__, globalns, localns),
540                "Forward references must evaluate to types.",
541                is_argument=self.__forward_is_argument__,
542            )
543            self.__forward_value__ = _eval_type(
544                type_, globalns, localns, recursive_guard | {self.__forward_arg__}
545            )
546            self.__forward_evaluated__ = True
547        return self.__forward_value__
548
549    def __eq__(self, other):
550        if not isinstance(other, ForwardRef):
551            return NotImplemented
552        if self.__forward_evaluated__ and other.__forward_evaluated__:
553            return (self.__forward_arg__ == other.__forward_arg__ and
554                    self.__forward_value__ == other.__forward_value__)
555        return self.__forward_arg__ == other.__forward_arg__
556
557    def __hash__(self):
558        return hash(self.__forward_arg__)
559
560    def __repr__(self):
561        return f'ForwardRef({self.__forward_arg__!r})'
562
563
564class TypeVar(_Final, _Immutable, _root=True):
565    """Type variable.
566
567    Usage::
568
569      T = TypeVar('T')  # Can be anything
570      A = TypeVar('A', str, bytes)  # Must be str or bytes
571
572    Type variables exist primarily for the benefit of static type
573    checkers.  They serve as the parameters for generic types as well
574    as for generic function definitions.  See class Generic for more
575    information on generic types.  Generic functions work as follows:
576
577      def repeat(x: T, n: int) -> List[T]:
578          '''Return a list containing n references to x.'''
579          return [x]*n
580
581      def longest(x: A, y: A) -> A:
582          '''Return the longest of two strings.'''
583          return x if len(x) >= len(y) else y
584
585    The latter example's signature is essentially the overloading
586    of (str, str) -> str and (bytes, bytes) -> bytes.  Also note
587    that if the arguments are instances of some subclass of str,
588    the return type is still plain str.
589
590    At runtime, isinstance(x, T) and issubclass(C, T) will raise TypeError.
591
592    Type variables defined with covariant=True or contravariant=True
593    can be used to declare covariant or contravariant generic types.
594    See PEP 484 for more details. By default generic types are invariant
595    in all type variables.
596
597    Type variables can be introspected. e.g.:
598
599      T.__name__ == 'T'
600      T.__constraints__ == ()
601      T.__covariant__ == False
602      T.__contravariant__ = False
603      A.__constraints__ == (str, bytes)
604
605    Note that only type variables defined in global scope can be pickled.
606    """
607
608    __slots__ = ('__name__', '__bound__', '__constraints__',
609                 '__covariant__', '__contravariant__', '__dict__')
610
611    def __init__(self, name, *constraints, bound=None,
612                 covariant=False, contravariant=False):
613        self.__name__ = name
614        if covariant and contravariant:
615            raise ValueError("Bivariant types are not supported.")
616        self.__covariant__ = bool(covariant)
617        self.__contravariant__ = bool(contravariant)
618        if constraints and bound is not None:
619            raise TypeError("Constraints cannot be combined with bound=...")
620        if constraints and len(constraints) == 1:
621            raise TypeError("A single constraint is not allowed")
622        msg = "TypeVar(name, constraint, ...): constraints must be types."
623        self.__constraints__ = tuple(_type_check(t, msg) for t in constraints)
624        if bound:
625            self.__bound__ = _type_check(bound, "Bound must be a type.")
626        else:
627            self.__bound__ = None
628        try:
629            def_mod = sys._getframe(1).f_globals.get('__name__', '__main__')  # for pickling
630        except (AttributeError, ValueError):
631            def_mod = None
632        if def_mod != 'typing':
633            self.__module__ = def_mod
634
635    def __repr__(self):
636        if self.__covariant__:
637            prefix = '+'
638        elif self.__contravariant__:
639            prefix = '-'
640        else:
641            prefix = '~'
642        return prefix + self.__name__
643
644    def __reduce__(self):
645        return self.__name__
646
647
648def _is_dunder(attr):
649    return attr.startswith('__') and attr.endswith('__')
650
651class _BaseGenericAlias(_Final, _root=True):
652    """The central part of internal API.
653
654    This represents a generic version of type 'origin' with type arguments 'params'.
655    There are two kind of these aliases: user defined and special. The special ones
656    are wrappers around builtin collections and ABCs in collections.abc. These must
657    have 'name' always set. If 'inst' is False, then the alias can't be instantiated,
658    this is used by e.g. typing.List and typing.Dict.
659    """
660    def __init__(self, origin, *, inst=True, name=None):
661        self._inst = inst
662        self._name = name
663        self.__origin__ = origin
664        self.__slots__ = None  # This is not documented.
665
666    def __call__(self, *args, **kwargs):
667        if not self._inst:
668            raise TypeError(f"Type {self._name} cannot be instantiated; "
669                            f"use {self.__origin__.__name__}() instead")
670        result = self.__origin__(*args, **kwargs)
671        try:
672            result.__orig_class__ = self
673        except AttributeError:
674            pass
675        return result
676
677    def __mro_entries__(self, bases):
678        res = []
679        if self.__origin__ not in bases:
680            res.append(self.__origin__)
681        i = bases.index(self)
682        for b in bases[i+1:]:
683            if isinstance(b, _BaseGenericAlias) or issubclass(b, Generic):
684                break
685        else:
686            res.append(Generic)
687        return tuple(res)
688
689    def __getattr__(self, attr):
690        # We are careful for copy and pickle.
691        # Also for simplicity we just don't relay all dunder names
692        if '__origin__' in self.__dict__ and not _is_dunder(attr):
693            return getattr(self.__origin__, attr)
694        raise AttributeError(attr)
695
696    def __setattr__(self, attr, val):
697        if _is_dunder(attr) or attr in ('_name', '_inst', '_nparams'):
698            super().__setattr__(attr, val)
699        else:
700            setattr(self.__origin__, attr, val)
701
702    def __instancecheck__(self, obj):
703        return self.__subclasscheck__(type(obj))
704
705    def __subclasscheck__(self, cls):
706        raise TypeError("Subscripted generics cannot be used with"
707                        " class and instance checks")
708
709
710# Special typing constructs Union, Optional, Generic, Callable and Tuple
711# use three special attributes for internal bookkeeping of generic types:
712# * __parameters__ is a tuple of unique free type parameters of a generic
713#   type, for example, Dict[T, T].__parameters__ == (T,);
714# * __origin__ keeps a reference to a type that was subscripted,
715#   e.g., Union[T, int].__origin__ == Union, or the non-generic version of
716#   the type.
717# * __args__ is a tuple of all arguments used in subscripting,
718#   e.g., Dict[T, int].__args__ == (T, int).
719
720
721class _GenericAlias(_BaseGenericAlias, _root=True):
722    def __init__(self, origin, params, *, inst=True, name=None):
723        super().__init__(origin, inst=inst, name=name)
724        if not isinstance(params, tuple):
725            params = (params,)
726        self.__args__ = tuple(... if a is _TypingEllipsis else
727                              () if a is _TypingEmpty else
728                              a for a in params)
729        self.__parameters__ = _collect_type_vars(params)
730        if not name:
731            self.__module__ = origin.__module__
732
733    def __eq__(self, other):
734        if not isinstance(other, _GenericAlias):
735            return NotImplemented
736        return (self.__origin__ == other.__origin__
737                and self.__args__ == other.__args__)
738
739    def __hash__(self):
740        return hash((self.__origin__, self.__args__))
741
742    @_tp_cache
743    def __getitem__(self, params):
744        if self.__origin__ in (Generic, Protocol):
745            # Can't subscript Generic[...] or Protocol[...].
746            raise TypeError(f"Cannot subscript already-subscripted {self}")
747        if not isinstance(params, tuple):
748            params = (params,)
749        msg = "Parameters to generic types must be types."
750        params = tuple(_type_check(p, msg) for p in params)
751        _check_generic(self, params, len(self.__parameters__))
752
753        subst = dict(zip(self.__parameters__, params))
754        new_args = []
755        for arg in self.__args__:
756            if isinstance(arg, TypeVar):
757                arg = subst[arg]
758            elif isinstance(arg, (_GenericAlias, GenericAlias)):
759                subparams = arg.__parameters__
760                if subparams:
761                    subargs = tuple(subst[x] for x in subparams)
762                    arg = arg[subargs]
763            new_args.append(arg)
764        return self.copy_with(tuple(new_args))
765
766    def copy_with(self, params):
767        return self.__class__(self.__origin__, params, name=self._name, inst=self._inst)
768
769    def __repr__(self):
770        if self._name:
771            name = 'typing.' + self._name
772        else:
773            name = _type_repr(self.__origin__)
774        args = ", ".join([_type_repr(a) for a in self.__args__])
775        return f'{name}[{args}]'
776
777    def __reduce__(self):
778        if self._name:
779            origin = globals()[self._name]
780        else:
781            origin = self.__origin__
782        args = tuple(self.__args__)
783        if len(args) == 1 and not isinstance(args[0], tuple):
784            args, = args
785        return operator.getitem, (origin, args)
786
787    def __mro_entries__(self, bases):
788        if self._name:  # generic version of an ABC or built-in class
789            return super().__mro_entries__(bases)
790        if self.__origin__ is Generic:
791            if Protocol in bases:
792                return ()
793            i = bases.index(self)
794            for b in bases[i+1:]:
795                if isinstance(b, _BaseGenericAlias) and b is not self:
796                    return ()
797        return (self.__origin__,)
798
799
800# _nparams is the number of accepted parameters, e.g. 0 for Hashable,
801# 1 for List and 2 for Dict.  It may be -1 if variable number of
802# parameters are accepted (needs custom __getitem__).
803
804class _SpecialGenericAlias(_BaseGenericAlias, _root=True):
805    def __init__(self, origin, nparams, *, inst=True, name=None):
806        if name is None:
807            name = origin.__name__
808        super().__init__(origin, inst=inst, name=name)
809        self._nparams = nparams
810        if origin.__module__ == 'builtins':
811            self.__doc__ = f'A generic version of {origin.__qualname__}.'
812        else:
813            self.__doc__ = f'A generic version of {origin.__module__}.{origin.__qualname__}.'
814
815    @_tp_cache
816    def __getitem__(self, params):
817        if not isinstance(params, tuple):
818            params = (params,)
819        msg = "Parameters to generic types must be types."
820        params = tuple(_type_check(p, msg) for p in params)
821        _check_generic(self, params, self._nparams)
822        return self.copy_with(params)
823
824    def copy_with(self, params):
825        return _GenericAlias(self.__origin__, params,
826                             name=self._name, inst=self._inst)
827
828    def __repr__(self):
829        return 'typing.' + self._name
830
831    def __subclasscheck__(self, cls):
832        if isinstance(cls, _SpecialGenericAlias):
833            return issubclass(cls.__origin__, self.__origin__)
834        if not isinstance(cls, _GenericAlias):
835            return issubclass(cls, self.__origin__)
836        return super().__subclasscheck__(cls)
837
838    def __reduce__(self):
839        return self._name
840
841
842class _CallableGenericAlias(_GenericAlias, _root=True):
843    def __repr__(self):
844        assert self._name == 'Callable'
845        if len(self.__args__) == 2 and self.__args__[0] is Ellipsis:
846            return super().__repr__()
847        return (f'typing.Callable'
848                f'[[{", ".join([_type_repr(a) for a in self.__args__[:-1]])}], '
849                f'{_type_repr(self.__args__[-1])}]')
850
851    def __reduce__(self):
852        args = self.__args__
853        if not (len(args) == 2 and args[0] is ...):
854            args = list(args[:-1]), args[-1]
855        return operator.getitem, (Callable, args)
856
857
858class _CallableType(_SpecialGenericAlias, _root=True):
859    def copy_with(self, params):
860        return _CallableGenericAlias(self.__origin__, params,
861                                     name=self._name, inst=self._inst)
862
863    def __getitem__(self, params):
864        if not isinstance(params, tuple) or len(params) != 2:
865            raise TypeError("Callable must be used as "
866                            "Callable[[arg, ...], result].")
867        args, result = params
868        # This relaxes what args can be on purpose to allow things like
869        # PEP 612 ParamSpec.  Responsibility for whether a user is using
870        # Callable[...] properly is deferred to static type checkers.
871        if isinstance(args, list):
872            params = (tuple(args), result)
873        else:
874            params = (args, result)
875        return self.__getitem_inner__(params)
876
877    @_tp_cache
878    def __getitem_inner__(self, params):
879        args, result = params
880        msg = "Callable[args, result]: result must be a type."
881        result = _type_check(result, msg)
882        if args is Ellipsis:
883            return self.copy_with((_TypingEllipsis, result))
884        if not isinstance(args, tuple):
885            args = (args,)
886        args = tuple(_type_convert(arg) for arg in args)
887        params = args + (result,)
888        return self.copy_with(params)
889
890
891class _TupleType(_SpecialGenericAlias, _root=True):
892    @_tp_cache
893    def __getitem__(self, params):
894        if params == ():
895            return self.copy_with((_TypingEmpty,))
896        if not isinstance(params, tuple):
897            params = (params,)
898        if len(params) == 2 and params[1] is ...:
899            msg = "Tuple[t, ...]: t must be a type."
900            p = _type_check(params[0], msg)
901            return self.copy_with((p, _TypingEllipsis))
902        msg = "Tuple[t0, t1, ...]: each t must be a type."
903        params = tuple(_type_check(p, msg) for p in params)
904        return self.copy_with(params)
905
906
907class _UnionGenericAlias(_GenericAlias, _root=True):
908    def copy_with(self, params):
909        return Union[params]
910
911    def __eq__(self, other):
912        if not isinstance(other, _UnionGenericAlias):
913            return NotImplemented
914        return set(self.__args__) == set(other.__args__)
915
916    def __hash__(self):
917        return hash(frozenset(self.__args__))
918
919    def __repr__(self):
920        args = self.__args__
921        if len(args) == 2:
922            if args[0] is type(None):
923                return f'typing.Optional[{_type_repr(args[1])}]'
924            elif args[1] is type(None):
925                return f'typing.Optional[{_type_repr(args[0])}]'
926        return super().__repr__()
927
928
929def _value_and_type_iter(parameters):
930    return ((p, type(p)) for p in parameters)
931
932
933class _LiteralGenericAlias(_GenericAlias, _root=True):
934
935    def __eq__(self, other):
936        if not isinstance(other, _LiteralGenericAlias):
937            return NotImplemented
938
939        return set(_value_and_type_iter(self.__args__)) == set(_value_and_type_iter(other.__args__))
940
941    def __hash__(self):
942        return hash(frozenset(_value_and_type_iter(self.__args__)))
943
944
945class Generic:
946    """Abstract base class for generic types.
947
948    A generic type is typically declared by inheriting from
949    this class parameterized with one or more type variables.
950    For example, a generic mapping type might be defined as::
951
952      class Mapping(Generic[KT, VT]):
953          def __getitem__(self, key: KT) -> VT:
954              ...
955          # Etc.
956
957    This class can then be used as follows::
958
959      def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
960          try:
961              return mapping[key]
962          except KeyError:
963              return default
964    """
965    __slots__ = ()
966    _is_protocol = False
967
968    @_tp_cache
969    def __class_getitem__(cls, params):
970        if not isinstance(params, tuple):
971            params = (params,)
972        if not params and cls is not Tuple:
973            raise TypeError(
974                f"Parameter list to {cls.__qualname__}[...] cannot be empty")
975        msg = "Parameters to generic types must be types."
976        params = tuple(_type_check(p, msg) for p in params)
977        if cls in (Generic, Protocol):
978            # Generic and Protocol can only be subscripted with unique type variables.
979            if not all(isinstance(p, TypeVar) for p in params):
980                raise TypeError(
981                    f"Parameters to {cls.__name__}[...] must all be type variables")
982            if len(set(params)) != len(params):
983                raise TypeError(
984                    f"Parameters to {cls.__name__}[...] must all be unique")
985        else:
986            # Subscripting a regular Generic subclass.
987            _check_generic(cls, params, len(cls.__parameters__))
988        return _GenericAlias(cls, params)
989
990    def __init_subclass__(cls, *args, **kwargs):
991        super().__init_subclass__(*args, **kwargs)
992        tvars = []
993        if '__orig_bases__' in cls.__dict__:
994            error = Generic in cls.__orig_bases__
995        else:
996            error = Generic in cls.__bases__ and cls.__name__ != 'Protocol'
997        if error:
998            raise TypeError("Cannot inherit from plain Generic")
999        if '__orig_bases__' in cls.__dict__:
1000            tvars = _collect_type_vars(cls.__orig_bases__)
1001            # Look for Generic[T1, ..., Tn].
1002            # If found, tvars must be a subset of it.
1003            # If not found, tvars is it.
1004            # Also check for and reject plain Generic,
1005            # and reject multiple Generic[...].
1006            gvars = None
1007            for base in cls.__orig_bases__:
1008                if (isinstance(base, _GenericAlias) and
1009                        base.__origin__ is Generic):
1010                    if gvars is not None:
1011                        raise TypeError(
1012                            "Cannot inherit from Generic[...] multiple types.")
1013                    gvars = base.__parameters__
1014            if gvars is not None:
1015                tvarset = set(tvars)
1016                gvarset = set(gvars)
1017                if not tvarset <= gvarset:
1018                    s_vars = ', '.join(str(t) for t in tvars if t not in gvarset)
1019                    s_args = ', '.join(str(g) for g in gvars)
1020                    raise TypeError(f"Some type variables ({s_vars}) are"
1021                                    f" not listed in Generic[{s_args}]")
1022                tvars = gvars
1023        cls.__parameters__ = tuple(tvars)
1024
1025
1026class _TypingEmpty:
1027    """Internal placeholder for () or []. Used by TupleMeta and CallableMeta
1028    to allow empty list/tuple in specific places, without allowing them
1029    to sneak in where prohibited.
1030    """
1031
1032
1033class _TypingEllipsis:
1034    """Internal placeholder for ... (ellipsis)."""
1035
1036
1037_TYPING_INTERNALS = ['__parameters__', '__orig_bases__',  '__orig_class__',
1038                     '_is_protocol', '_is_runtime_protocol']
1039
1040_SPECIAL_NAMES = ['__abstractmethods__', '__annotations__', '__dict__', '__doc__',
1041                  '__init__', '__module__', '__new__', '__slots__',
1042                  '__subclasshook__', '__weakref__', '__class_getitem__']
1043
1044# These special attributes will be not collected as protocol members.
1045EXCLUDED_ATTRIBUTES = _TYPING_INTERNALS + _SPECIAL_NAMES + ['_MutableMapping__marker']
1046
1047
1048def _get_protocol_attrs(cls):
1049    """Collect protocol members from a protocol class objects.
1050
1051    This includes names actually defined in the class dictionary, as well
1052    as names that appear in annotations. Special names (above) are skipped.
1053    """
1054    attrs = set()
1055    for base in cls.__mro__[:-1]:  # without object
1056        if base.__name__ in ('Protocol', 'Generic'):
1057            continue
1058        annotations = getattr(base, '__annotations__', {})
1059        for attr in list(base.__dict__.keys()) + list(annotations.keys()):
1060            if not attr.startswith('_abc_') and attr not in EXCLUDED_ATTRIBUTES:
1061                attrs.add(attr)
1062    return attrs
1063
1064
1065def _is_callable_members_only(cls):
1066    # PEP 544 prohibits using issubclass() with protocols that have non-method members.
1067    return all(callable(getattr(cls, attr, None)) for attr in _get_protocol_attrs(cls))
1068
1069
1070def _no_init(self, *args, **kwargs):
1071    if type(self)._is_protocol:
1072        raise TypeError('Protocols cannot be instantiated')
1073
1074
1075def _allow_reckless_class_cheks():
1076    """Allow instance and class checks for special stdlib modules.
1077
1078    The abc and functools modules indiscriminately call isinstance() and
1079    issubclass() on the whole MRO of a user class, which may contain protocols.
1080    """
1081    try:
1082        return sys._getframe(3).f_globals['__name__'] in ['abc', 'functools']
1083    except (AttributeError, ValueError):  # For platforms without _getframe().
1084        return True
1085
1086
1087_PROTO_WHITELIST = {
1088    'collections.abc': [
1089        'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable',
1090        'Hashable', 'Sized', 'Container', 'Collection', 'Reversible',
1091    ],
1092    'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'],
1093}
1094
1095
1096class _ProtocolMeta(ABCMeta):
1097    # This metaclass is really unfortunate and exists only because of
1098    # the lack of __instancehook__.
1099    def __instancecheck__(cls, instance):
1100        # We need this method for situations where attributes are
1101        # assigned in __init__.
1102        if ((not getattr(cls, '_is_protocol', False) or
1103                _is_callable_members_only(cls)) and
1104                issubclass(instance.__class__, cls)):
1105            return True
1106        if cls._is_protocol:
1107            if all(hasattr(instance, attr) and
1108                    # All *methods* can be blocked by setting them to None.
1109                    (not callable(getattr(cls, attr, None)) or
1110                     getattr(instance, attr) is not None)
1111                    for attr in _get_protocol_attrs(cls)):
1112                return True
1113        return super().__instancecheck__(instance)
1114
1115
1116class Protocol(Generic, metaclass=_ProtocolMeta):
1117    """Base class for protocol classes.
1118
1119    Protocol classes are defined as::
1120
1121        class Proto(Protocol):
1122            def meth(self) -> int:
1123                ...
1124
1125    Such classes are primarily used with static type checkers that recognize
1126    structural subtyping (static duck-typing), for example::
1127
1128        class C:
1129            def meth(self) -> int:
1130                return 0
1131
1132        def func(x: Proto) -> int:
1133            return x.meth()
1134
1135        func(C())  # Passes static type check
1136
1137    See PEP 544 for details. Protocol classes decorated with
1138    @typing.runtime_checkable act as simple-minded runtime protocols that check
1139    only the presence of given attributes, ignoring their type signatures.
1140    Protocol classes can be generic, they are defined as::
1141
1142        class GenProto(Protocol[T]):
1143            def meth(self) -> T:
1144                ...
1145    """
1146    __slots__ = ()
1147    _is_protocol = True
1148    _is_runtime_protocol = False
1149
1150    def __init_subclass__(cls, *args, **kwargs):
1151        super().__init_subclass__(*args, **kwargs)
1152
1153        # Determine if this is a protocol or a concrete subclass.
1154        if not cls.__dict__.get('_is_protocol', False):
1155            cls._is_protocol = any(b is Protocol for b in cls.__bases__)
1156
1157        # Set (or override) the protocol subclass hook.
1158        def _proto_hook(other):
1159            if not cls.__dict__.get('_is_protocol', False):
1160                return NotImplemented
1161
1162            # First, perform various sanity checks.
1163            if not getattr(cls, '_is_runtime_protocol', False):
1164                if _allow_reckless_class_cheks():
1165                    return NotImplemented
1166                raise TypeError("Instance and class checks can only be used with"
1167                                " @runtime_checkable protocols")
1168            if not _is_callable_members_only(cls):
1169                if _allow_reckless_class_cheks():
1170                    return NotImplemented
1171                raise TypeError("Protocols with non-method members"
1172                                " don't support issubclass()")
1173            if not isinstance(other, type):
1174                # Same error message as for issubclass(1, int).
1175                raise TypeError('issubclass() arg 1 must be a class')
1176
1177            # Second, perform the actual structural compatibility check.
1178            for attr in _get_protocol_attrs(cls):
1179                for base in other.__mro__:
1180                    # Check if the members appears in the class dictionary...
1181                    if attr in base.__dict__:
1182                        if base.__dict__[attr] is None:
1183                            return NotImplemented
1184                        break
1185
1186                    # ...or in annotations, if it is a sub-protocol.
1187                    annotations = getattr(base, '__annotations__', {})
1188                    if (isinstance(annotations, collections.abc.Mapping) and
1189                            attr in annotations and
1190                            issubclass(other, Generic) and other._is_protocol):
1191                        break
1192                else:
1193                    return NotImplemented
1194            return True
1195
1196        if '__subclasshook__' not in cls.__dict__:
1197            cls.__subclasshook__ = _proto_hook
1198
1199        # We have nothing more to do for non-protocols...
1200        if not cls._is_protocol:
1201            return
1202
1203        # ... otherwise check consistency of bases, and prohibit instantiation.
1204        for base in cls.__bases__:
1205            if not (base in (object, Generic) or
1206                    base.__module__ in _PROTO_WHITELIST and
1207                    base.__name__ in _PROTO_WHITELIST[base.__module__] or
1208                    issubclass(base, Generic) and base._is_protocol):
1209                raise TypeError('Protocols can only inherit from other'
1210                                ' protocols, got %r' % base)
1211        cls.__init__ = _no_init
1212
1213
1214class _AnnotatedAlias(_GenericAlias, _root=True):
1215    """Runtime representation of an annotated type.
1216
1217    At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't'
1218    with extra annotations. The alias behaves like a normal typing alias,
1219    instantiating is the same as instantiating the underlying type, binding
1220    it to types is also the same.
1221    """
1222    def __init__(self, origin, metadata):
1223        if isinstance(origin, _AnnotatedAlias):
1224            metadata = origin.__metadata__ + metadata
1225            origin = origin.__origin__
1226        super().__init__(origin, origin)
1227        self.__metadata__ = metadata
1228
1229    def copy_with(self, params):
1230        assert len(params) == 1
1231        new_type = params[0]
1232        return _AnnotatedAlias(new_type, self.__metadata__)
1233
1234    def __repr__(self):
1235        return "typing.Annotated[{}, {}]".format(
1236            _type_repr(self.__origin__),
1237            ", ".join(repr(a) for a in self.__metadata__)
1238        )
1239
1240    def __reduce__(self):
1241        return operator.getitem, (
1242            Annotated, (self.__origin__,) + self.__metadata__
1243        )
1244
1245    def __eq__(self, other):
1246        if not isinstance(other, _AnnotatedAlias):
1247            return NotImplemented
1248        return (self.__origin__ == other.__origin__
1249                and self.__metadata__ == other.__metadata__)
1250
1251    def __hash__(self):
1252        return hash((self.__origin__, self.__metadata__))
1253
1254
1255class Annotated:
1256    """Add context specific metadata to a type.
1257
1258    Example: Annotated[int, runtime_check.Unsigned] indicates to the
1259    hypothetical runtime_check module that this type is an unsigned int.
1260    Every other consumer of this type can ignore this metadata and treat
1261    this type as int.
1262
1263    The first argument to Annotated must be a valid type.
1264
1265    Details:
1266
1267    - It's an error to call `Annotated` with less than two arguments.
1268    - Nested Annotated are flattened::
1269
1270        Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
1271
1272    - Instantiating an annotated type is equivalent to instantiating the
1273    underlying type::
1274
1275        Annotated[C, Ann1](5) == C(5)
1276
1277    - Annotated can be used as a generic type alias::
1278
1279        Optimized = Annotated[T, runtime.Optimize()]
1280        Optimized[int] == Annotated[int, runtime.Optimize()]
1281
1282        OptimizedList = Annotated[List[T], runtime.Optimize()]
1283        OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
1284    """
1285
1286    __slots__ = ()
1287
1288    def __new__(cls, *args, **kwargs):
1289        raise TypeError("Type Annotated cannot be instantiated.")
1290
1291    @_tp_cache
1292    def __class_getitem__(cls, params):
1293        if not isinstance(params, tuple) or len(params) < 2:
1294            raise TypeError("Annotated[...] should be used "
1295                            "with at least two arguments (a type and an "
1296                            "annotation).")
1297        msg = "Annotated[t, ...]: t must be a type."
1298        origin = _type_check(params[0], msg)
1299        metadata = tuple(params[1:])
1300        return _AnnotatedAlias(origin, metadata)
1301
1302    def __init_subclass__(cls, *args, **kwargs):
1303        raise TypeError(
1304            "Cannot subclass {}.Annotated".format(cls.__module__)
1305        )
1306
1307
1308def runtime_checkable(cls):
1309    """Mark a protocol class as a runtime protocol.
1310
1311    Such protocol can be used with isinstance() and issubclass().
1312    Raise TypeError if applied to a non-protocol class.
1313    This allows a simple-minded structural check very similar to
1314    one trick ponies in collections.abc such as Iterable.
1315    For example::
1316
1317        @runtime_checkable
1318        class Closable(Protocol):
1319            def close(self): ...
1320
1321        assert isinstance(open('/some/file'), Closable)
1322
1323    Warning: this will check only the presence of the required methods,
1324    not their type signatures!
1325    """
1326    if not issubclass(cls, Generic) or not cls._is_protocol:
1327        raise TypeError('@runtime_checkable can be only applied to protocol classes,'
1328                        ' got %r' % cls)
1329    cls._is_runtime_protocol = True
1330    return cls
1331
1332
1333def cast(typ, val):
1334    """Cast a value to a type.
1335
1336    This returns the value unchanged.  To the type checker this
1337    signals that the return value has the designated type, but at
1338    runtime we intentionally don't check anything (we want this
1339    to be as fast as possible).
1340    """
1341    return val
1342
1343
1344def _get_defaults(func):
1345    """Internal helper to extract the default arguments, by name."""
1346    try:
1347        code = func.__code__
1348    except AttributeError:
1349        # Some built-in functions don't have __code__, __defaults__, etc.
1350        return {}
1351    pos_count = code.co_argcount
1352    arg_names = code.co_varnames
1353    arg_names = arg_names[:pos_count]
1354    defaults = func.__defaults__ or ()
1355    kwdefaults = func.__kwdefaults__
1356    res = dict(kwdefaults) if kwdefaults else {}
1357    pos_offset = pos_count - len(defaults)
1358    for name, value in zip(arg_names[pos_offset:], defaults):
1359        assert name not in res
1360        res[name] = value
1361    return res
1362
1363
1364_allowed_types = (types.FunctionType, types.BuiltinFunctionType,
1365                  types.MethodType, types.ModuleType,
1366                  WrapperDescriptorType, MethodWrapperType, MethodDescriptorType)
1367
1368
1369def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
1370    """Return type hints for an object.
1371
1372    This is often the same as obj.__annotations__, but it handles
1373    forward references encoded as string literals, adds Optional[t] if a
1374    default value equal to None is set and recursively replaces all
1375    'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
1376
1377    The argument may be a module, class, method, or function. The annotations
1378    are returned as a dictionary. For classes, annotations include also
1379    inherited members.
1380
1381    TypeError is raised if the argument is not of a type that can contain
1382    annotations, and an empty dictionary is returned if no annotations are
1383    present.
1384
1385    BEWARE -- the behavior of globalns and localns is counterintuitive
1386    (unless you are familiar with how eval() and exec() work).  The
1387    search order is locals first, then globals.
1388
1389    - If no dict arguments are passed, an attempt is made to use the
1390      globals from obj (or the respective module's globals for classes),
1391      and these are also used as the locals.  If the object does not appear
1392      to have globals, an empty dictionary is used.
1393
1394    - If one dict argument is passed, it is used for both globals and
1395      locals.
1396
1397    - If two dict arguments are passed, they specify globals and
1398      locals, respectively.
1399    """
1400
1401    if getattr(obj, '__no_type_check__', None):
1402        return {}
1403    # Classes require a special treatment.
1404    if isinstance(obj, type):
1405        hints = {}
1406        for base in reversed(obj.__mro__):
1407            if globalns is None:
1408                base_globals = sys.modules[base.__module__].__dict__
1409            else:
1410                base_globals = globalns
1411            ann = base.__dict__.get('__annotations__', {})
1412            for name, value in ann.items():
1413                if value is None:
1414                    value = type(None)
1415                if isinstance(value, str):
1416                    value = ForwardRef(value, is_argument=False)
1417                value = _eval_type(value, base_globals, localns)
1418                hints[name] = value
1419        return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
1420
1421    if globalns is None:
1422        if isinstance(obj, types.ModuleType):
1423            globalns = obj.__dict__
1424        else:
1425            nsobj = obj
1426            # Find globalns for the unwrapped object.
1427            while hasattr(nsobj, '__wrapped__'):
1428                nsobj = nsobj.__wrapped__
1429            globalns = getattr(nsobj, '__globals__', {})
1430        if localns is None:
1431            localns = globalns
1432    elif localns is None:
1433        localns = globalns
1434    hints = getattr(obj, '__annotations__', None)
1435    if hints is None:
1436        # Return empty annotations for something that _could_ have them.
1437        if isinstance(obj, _allowed_types):
1438            return {}
1439        else:
1440            raise TypeError('{!r} is not a module, class, method, '
1441                            'or function.'.format(obj))
1442    defaults = _get_defaults(obj)
1443    hints = dict(hints)
1444    for name, value in hints.items():
1445        if value is None:
1446            value = type(None)
1447        if isinstance(value, str):
1448            value = ForwardRef(value)
1449        value = _eval_type(value, globalns, localns)
1450        if name in defaults and defaults[name] is None:
1451            value = Optional[value]
1452        hints[name] = value
1453    return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
1454
1455
1456def _strip_annotations(t):
1457    """Strips the annotations from a given type.
1458    """
1459    if isinstance(t, _AnnotatedAlias):
1460        return _strip_annotations(t.__origin__)
1461    if isinstance(t, _GenericAlias):
1462        stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
1463        if stripped_args == t.__args__:
1464            return t
1465        return t.copy_with(stripped_args)
1466    if isinstance(t, GenericAlias):
1467        stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
1468        if stripped_args == t.__args__:
1469            return t
1470        return GenericAlias(t.__origin__, stripped_args)
1471    return t
1472
1473
1474def get_origin(tp):
1475    """Get the unsubscripted version of a type.
1476
1477    This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
1478    and Annotated. Return None for unsupported types. Examples::
1479
1480        get_origin(Literal[42]) is Literal
1481        get_origin(int) is None
1482        get_origin(ClassVar[int]) is ClassVar
1483        get_origin(Generic) is Generic
1484        get_origin(Generic[T]) is Generic
1485        get_origin(Union[T, int]) is Union
1486        get_origin(List[Tuple[T, T]][int]) == list
1487    """
1488    if isinstance(tp, _AnnotatedAlias):
1489        return Annotated
1490    if isinstance(tp, (_BaseGenericAlias, GenericAlias)):
1491        return tp.__origin__
1492    if tp is Generic:
1493        return Generic
1494    return None
1495
1496
1497def get_args(tp):
1498    """Get type arguments with all substitutions performed.
1499
1500    For unions, basic simplifications used by Union constructor are performed.
1501    Examples::
1502        get_args(Dict[str, int]) == (str, int)
1503        get_args(int) == ()
1504        get_args(Union[int, Union[T, int], str][int]) == (int, str)
1505        get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
1506        get_args(Callable[[], T][int]) == ([], int)
1507    """
1508    if isinstance(tp, _AnnotatedAlias):
1509        return (tp.__origin__,) + tp.__metadata__
1510    if isinstance(tp, (_GenericAlias, GenericAlias)):
1511        res = tp.__args__
1512        if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
1513            res = (list(res[:-1]), res[-1])
1514        return res
1515    return ()
1516
1517
1518def no_type_check(arg):
1519    """Decorator to indicate that annotations are not type hints.
1520
1521    The argument must be a class or function; if it is a class, it
1522    applies recursively to all methods and classes defined in that class
1523    (but not to methods defined in its superclasses or subclasses).
1524
1525    This mutates the function(s) or class(es) in place.
1526    """
1527    if isinstance(arg, type):
1528        arg_attrs = arg.__dict__.copy()
1529        for attr, val in arg.__dict__.items():
1530            if val in arg.__bases__ + (arg,):
1531                arg_attrs.pop(attr)
1532        for obj in arg_attrs.values():
1533            if isinstance(obj, types.FunctionType):
1534                obj.__no_type_check__ = True
1535            if isinstance(obj, type):
1536                no_type_check(obj)
1537    try:
1538        arg.__no_type_check__ = True
1539    except TypeError:  # built-in classes
1540        pass
1541    return arg
1542
1543
1544def no_type_check_decorator(decorator):
1545    """Decorator to give another decorator the @no_type_check effect.
1546
1547    This wraps the decorator with something that wraps the decorated
1548    function in @no_type_check.
1549    """
1550
1551    @functools.wraps(decorator)
1552    def wrapped_decorator(*args, **kwds):
1553        func = decorator(*args, **kwds)
1554        func = no_type_check(func)
1555        return func
1556
1557    return wrapped_decorator
1558
1559
1560def _overload_dummy(*args, **kwds):
1561    """Helper for @overload to raise when called."""
1562    raise NotImplementedError(
1563        "You should not call an overloaded function. "
1564        "A series of @overload-decorated functions "
1565        "outside a stub module should always be followed "
1566        "by an implementation that is not @overload-ed.")
1567
1568
1569def overload(func):
1570    """Decorator for overloaded functions/methods.
1571
1572    In a stub file, place two or more stub definitions for the same
1573    function in a row, each decorated with @overload.  For example:
1574
1575      @overload
1576      def utf8(value: None) -> None: ...
1577      @overload
1578      def utf8(value: bytes) -> bytes: ...
1579      @overload
1580      def utf8(value: str) -> bytes: ...
1581
1582    In a non-stub file (i.e. a regular .py file), do the same but
1583    follow it with an implementation.  The implementation should *not*
1584    be decorated with @overload.  For example:
1585
1586      @overload
1587      def utf8(value: None) -> None: ...
1588      @overload
1589      def utf8(value: bytes) -> bytes: ...
1590      @overload
1591      def utf8(value: str) -> bytes: ...
1592      def utf8(value):
1593          # implementation goes here
1594    """
1595    return _overload_dummy
1596
1597
1598def final(f):
1599    """A decorator to indicate final methods and final classes.
1600
1601    Use this decorator to indicate to type checkers that the decorated
1602    method cannot be overridden, and decorated class cannot be subclassed.
1603    For example:
1604
1605      class Base:
1606          @final
1607          def done(self) -> None:
1608              ...
1609      class Sub(Base):
1610          def done(self) -> None:  # Error reported by type checker
1611                ...
1612
1613      @final
1614      class Leaf:
1615          ...
1616      class Other(Leaf):  # Error reported by type checker
1617          ...
1618
1619    There is no runtime checking of these properties.
1620    """
1621    return f
1622
1623
1624# Some unconstrained type variables.  These are used by the container types.
1625# (These are not for export.)
1626T = TypeVar('T')  # Any type.
1627KT = TypeVar('KT')  # Key type.
1628VT = TypeVar('VT')  # Value type.
1629T_co = TypeVar('T_co', covariant=True)  # Any type covariant containers.
1630V_co = TypeVar('V_co', covariant=True)  # Any type covariant containers.
1631VT_co = TypeVar('VT_co', covariant=True)  # Value type covariant containers.
1632T_contra = TypeVar('T_contra', contravariant=True)  # Ditto contravariant.
1633# Internal type variable used for Type[].
1634CT_co = TypeVar('CT_co', covariant=True, bound=type)
1635
1636# A useful type variable with constraints.  This represents string types.
1637# (This one *is* for export!)
1638AnyStr = TypeVar('AnyStr', bytes, str)
1639
1640
1641# Various ABCs mimicking those in collections.abc.
1642_alias = _SpecialGenericAlias
1643
1644Hashable = _alias(collections.abc.Hashable, 0)  # Not generic.
1645Awaitable = _alias(collections.abc.Awaitable, 1)
1646Coroutine = _alias(collections.abc.Coroutine, 3)
1647AsyncIterable = _alias(collections.abc.AsyncIterable, 1)
1648AsyncIterator = _alias(collections.abc.AsyncIterator, 1)
1649Iterable = _alias(collections.abc.Iterable, 1)
1650Iterator = _alias(collections.abc.Iterator, 1)
1651Reversible = _alias(collections.abc.Reversible, 1)
1652Sized = _alias(collections.abc.Sized, 0)  # Not generic.
1653Container = _alias(collections.abc.Container, 1)
1654Collection = _alias(collections.abc.Collection, 1)
1655Callable = _CallableType(collections.abc.Callable, 2)
1656Callable.__doc__ = \
1657    """Callable type; Callable[[int], str] is a function of (int) -> str.
1658
1659    The subscription syntax must always be used with exactly two
1660    values: the argument list and the return type.  The argument list
1661    must be a list of types or ellipsis; the return type must be a single type.
1662
1663    There is no syntax to indicate optional or keyword arguments,
1664    such function types are rarely used as callback types.
1665    """
1666AbstractSet = _alias(collections.abc.Set, 1, name='AbstractSet')
1667MutableSet = _alias(collections.abc.MutableSet, 1)
1668# NOTE: Mapping is only covariant in the value type.
1669Mapping = _alias(collections.abc.Mapping, 2)
1670MutableMapping = _alias(collections.abc.MutableMapping, 2)
1671Sequence = _alias(collections.abc.Sequence, 1)
1672MutableSequence = _alias(collections.abc.MutableSequence, 1)
1673ByteString = _alias(collections.abc.ByteString, 0)  # Not generic
1674# Tuple accepts variable number of parameters.
1675Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
1676Tuple.__doc__ = \
1677    """Tuple type; Tuple[X, Y] is the cross-product type of X and Y.
1678
1679    Example: Tuple[T1, T2] is a tuple of two elements corresponding
1680    to type variables T1 and T2.  Tuple[int, float, str] is a tuple
1681    of an int, a float and a string.
1682
1683    To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].
1684    """
1685List = _alias(list, 1, inst=False, name='List')
1686Deque = _alias(collections.deque, 1, name='Deque')
1687Set = _alias(set, 1, inst=False, name='Set')
1688FrozenSet = _alias(frozenset, 1, inst=False, name='FrozenSet')
1689MappingView = _alias(collections.abc.MappingView, 1)
1690KeysView = _alias(collections.abc.KeysView, 1)
1691ItemsView = _alias(collections.abc.ItemsView, 2)
1692ValuesView = _alias(collections.abc.ValuesView, 1)
1693ContextManager = _alias(contextlib.AbstractContextManager, 1, name='ContextManager')
1694AsyncContextManager = _alias(contextlib.AbstractAsyncContextManager, 1, name='AsyncContextManager')
1695Dict = _alias(dict, 2, inst=False, name='Dict')
1696DefaultDict = _alias(collections.defaultdict, 2, name='DefaultDict')
1697OrderedDict = _alias(collections.OrderedDict, 2)
1698Counter = _alias(collections.Counter, 1)
1699ChainMap = _alias(collections.ChainMap, 2)
1700Generator = _alias(collections.abc.Generator, 3)
1701AsyncGenerator = _alias(collections.abc.AsyncGenerator, 2)
1702Type = _alias(type, 1, inst=False, name='Type')
1703Type.__doc__ = \
1704    """A special construct usable to annotate class objects.
1705
1706    For example, suppose we have the following classes::
1707
1708      class User: ...  # Abstract base for User classes
1709      class BasicUser(User): ...
1710      class ProUser(User): ...
1711      class TeamUser(User): ...
1712
1713    And a function that takes a class argument that's a subclass of
1714    User and returns an instance of the corresponding class::
1715
1716      U = TypeVar('U', bound=User)
1717      def new_user(user_class: Type[U]) -> U:
1718          user = user_class()
1719          # (Here we could write the user object to a database)
1720          return user
1721
1722      joe = new_user(BasicUser)
1723
1724    At this point the type checker knows that joe has type BasicUser.
1725    """
1726
1727
1728@runtime_checkable
1729class SupportsInt(Protocol):
1730    """An ABC with one abstract method __int__."""
1731    __slots__ = ()
1732
1733    @abstractmethod
1734    def __int__(self) -> int:
1735        pass
1736
1737
1738@runtime_checkable
1739class SupportsFloat(Protocol):
1740    """An ABC with one abstract method __float__."""
1741    __slots__ = ()
1742
1743    @abstractmethod
1744    def __float__(self) -> float:
1745        pass
1746
1747
1748@runtime_checkable
1749class SupportsComplex(Protocol):
1750    """An ABC with one abstract method __complex__."""
1751    __slots__ = ()
1752
1753    @abstractmethod
1754    def __complex__(self) -> complex:
1755        pass
1756
1757
1758@runtime_checkable
1759class SupportsBytes(Protocol):
1760    """An ABC with one abstract method __bytes__."""
1761    __slots__ = ()
1762
1763    @abstractmethod
1764    def __bytes__(self) -> bytes:
1765        pass
1766
1767
1768@runtime_checkable
1769class SupportsIndex(Protocol):
1770    """An ABC with one abstract method __index__."""
1771    __slots__ = ()
1772
1773    @abstractmethod
1774    def __index__(self) -> int:
1775        pass
1776
1777
1778@runtime_checkable
1779class SupportsAbs(Protocol[T_co]):
1780    """An ABC with one abstract method __abs__ that is covariant in its return type."""
1781    __slots__ = ()
1782
1783    @abstractmethod
1784    def __abs__(self) -> T_co:
1785        pass
1786
1787
1788@runtime_checkable
1789class SupportsRound(Protocol[T_co]):
1790    """An ABC with one abstract method __round__ that is covariant in its return type."""
1791    __slots__ = ()
1792
1793    @abstractmethod
1794    def __round__(self, ndigits: int = 0) -> T_co:
1795        pass
1796
1797
1798def _make_nmtuple(name, types, module, defaults = ()):
1799    fields = [n for n, t in types]
1800    types = {n: _type_check(t, f"field {n} annotation must be a type")
1801             for n, t in types}
1802    nm_tpl = collections.namedtuple(name, fields,
1803                                    defaults=defaults, module=module)
1804    nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = types
1805    return nm_tpl
1806
1807
1808# attributes prohibited to set in NamedTuple class syntax
1809_prohibited = frozenset({'__new__', '__init__', '__slots__', '__getnewargs__',
1810                         '_fields', '_field_defaults',
1811                         '_make', '_replace', '_asdict', '_source'})
1812
1813_special = frozenset({'__module__', '__name__', '__annotations__'})
1814
1815
1816class NamedTupleMeta(type):
1817
1818    def __new__(cls, typename, bases, ns):
1819        assert bases[0] is _NamedTuple
1820        types = ns.get('__annotations__', {})
1821        default_names = []
1822        for field_name in types:
1823            if field_name in ns:
1824                default_names.append(field_name)
1825            elif default_names:
1826                raise TypeError(f"Non-default namedtuple field {field_name} "
1827                                f"cannot follow default field"
1828                                f"{'s' if len(default_names) > 1 else ''} "
1829                                f"{', '.join(default_names)}")
1830        nm_tpl = _make_nmtuple(typename, types.items(),
1831                               defaults=[ns[n] for n in default_names],
1832                               module=ns['__module__'])
1833        # update from user namespace without overriding special namedtuple attributes
1834        for key in ns:
1835            if key in _prohibited:
1836                raise AttributeError("Cannot overwrite NamedTuple attribute " + key)
1837            elif key not in _special and key not in nm_tpl._fields:
1838                setattr(nm_tpl, key, ns[key])
1839        return nm_tpl
1840
1841
1842def NamedTuple(typename, fields=None, /, **kwargs):
1843    """Typed version of namedtuple.
1844
1845    Usage in Python versions >= 3.6::
1846
1847        class Employee(NamedTuple):
1848            name: str
1849            id: int
1850
1851    This is equivalent to::
1852
1853        Employee = collections.namedtuple('Employee', ['name', 'id'])
1854
1855    The resulting class has an extra __annotations__ attribute, giving a
1856    dict that maps field names to types.  (The field names are also in
1857    the _fields attribute, which is part of the namedtuple API.)
1858    Alternative equivalent keyword syntax is also accepted::
1859
1860        Employee = NamedTuple('Employee', name=str, id=int)
1861
1862    In Python versions <= 3.5 use::
1863
1864        Employee = NamedTuple('Employee', [('name', str), ('id', int)])
1865    """
1866    if fields is None:
1867        fields = kwargs.items()
1868    elif kwargs:
1869        raise TypeError("Either list of fields or keywords"
1870                        " can be provided to NamedTuple, not both")
1871    try:
1872        module = sys._getframe(1).f_globals.get('__name__', '__main__')
1873    except (AttributeError, ValueError):
1874        module = None
1875    return _make_nmtuple(typename, fields, module=module)
1876
1877_NamedTuple = type.__new__(NamedTupleMeta, 'NamedTuple', (), {})
1878
1879def _namedtuple_mro_entries(bases):
1880    if len(bases) > 1:
1881        raise TypeError("Multiple inheritance with NamedTuple is not supported")
1882    assert bases[0] is NamedTuple
1883    return (_NamedTuple,)
1884
1885NamedTuple.__mro_entries__ = _namedtuple_mro_entries
1886
1887
1888class _TypedDictMeta(type):
1889    def __new__(cls, name, bases, ns, total=True):
1890        """Create new typed dict class object.
1891
1892        This method is called when TypedDict is subclassed,
1893        or when TypedDict is instantiated. This way
1894        TypedDict supports all three syntax forms described in its docstring.
1895        Subclasses and instances of TypedDict return actual dictionaries.
1896        """
1897        for base in bases:
1898            if type(base) is not _TypedDictMeta:
1899                raise TypeError('cannot inherit from both a TypedDict type '
1900                                'and a non-TypedDict base class')
1901        tp_dict = type.__new__(_TypedDictMeta, name, (dict,), ns)
1902
1903        annotations = {}
1904        own_annotations = ns.get('__annotations__', {})
1905        own_annotation_keys = set(own_annotations.keys())
1906        msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
1907        own_annotations = {
1908            n: _type_check(tp, msg) for n, tp in own_annotations.items()
1909        }
1910        required_keys = set()
1911        optional_keys = set()
1912
1913        for base in bases:
1914            annotations.update(base.__dict__.get('__annotations__', {}))
1915            required_keys.update(base.__dict__.get('__required_keys__', ()))
1916            optional_keys.update(base.__dict__.get('__optional_keys__', ()))
1917
1918        annotations.update(own_annotations)
1919        if total:
1920            required_keys.update(own_annotation_keys)
1921        else:
1922            optional_keys.update(own_annotation_keys)
1923
1924        tp_dict.__annotations__ = annotations
1925        tp_dict.__required_keys__ = frozenset(required_keys)
1926        tp_dict.__optional_keys__ = frozenset(optional_keys)
1927        if not hasattr(tp_dict, '__total__'):
1928            tp_dict.__total__ = total
1929        return tp_dict
1930
1931    __call__ = dict  # static method
1932
1933    def __subclasscheck__(cls, other):
1934        # Typed dicts are only for static structural subtyping.
1935        raise TypeError('TypedDict does not support instance and class checks')
1936
1937    __instancecheck__ = __subclasscheck__
1938
1939
1940def TypedDict(typename, fields=None, /, *, total=True, **kwargs):
1941    """A simple typed namespace. At runtime it is equivalent to a plain dict.
1942
1943    TypedDict creates a dictionary type that expects all of its
1944    instances to have a certain set of keys, where each key is
1945    associated with a value of a consistent type. This expectation
1946    is not checked at runtime but is only enforced by type checkers.
1947    Usage::
1948
1949        class Point2D(TypedDict):
1950            x: int
1951            y: int
1952            label: str
1953
1954        a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
1955        b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check
1956
1957        assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
1958
1959    The type info can be accessed via the Point2D.__annotations__ dict, and
1960    the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
1961    TypedDict supports two additional equivalent forms::
1962
1963        Point2D = TypedDict('Point2D', x=int, y=int, label=str)
1964        Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
1965
1966    By default, all keys must be present in a TypedDict. It is possible
1967    to override this by specifying totality.
1968    Usage::
1969
1970        class point2D(TypedDict, total=False):
1971            x: int
1972            y: int
1973
1974    This means that a point2D TypedDict can have any of the keys omitted.A type
1975    checker is only expected to support a literal False or True as the value of
1976    the total argument. True is the default, and makes all items defined in the
1977    class body be required.
1978
1979    The class syntax is only supported in Python 3.6+, while two other
1980    syntax forms work for Python 2.7 and 3.2+
1981    """
1982    if fields is None:
1983        fields = kwargs
1984    elif kwargs:
1985        raise TypeError("TypedDict takes either a dict or keyword arguments,"
1986                        " but not both")
1987
1988    ns = {'__annotations__': dict(fields)}
1989    try:
1990        # Setting correct module is necessary to make typed dict classes pickleable.
1991        ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__')
1992    except (AttributeError, ValueError):
1993        pass
1994
1995    return _TypedDictMeta(typename, (), ns, total=total)
1996
1997_TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {})
1998TypedDict.__mro_entries__ = lambda bases: (_TypedDict,)
1999
2000
2001def NewType(name, tp):
2002    """NewType creates simple unique types with almost zero
2003    runtime overhead. NewType(name, tp) is considered a subtype of tp
2004    by static type checkers. At runtime, NewType(name, tp) returns
2005    a dummy function that simply returns its argument. Usage::
2006
2007        UserId = NewType('UserId', int)
2008
2009        def name_by_id(user_id: UserId) -> str:
2010            ...
2011
2012        UserId('user')          # Fails type check
2013
2014        name_by_id(42)          # Fails type check
2015        name_by_id(UserId(42))  # OK
2016
2017        num = UserId(5) + 1     # type: int
2018    """
2019
2020    def new_type(x):
2021        return x
2022
2023    new_type.__name__ = name
2024    new_type.__supertype__ = tp
2025    return new_type
2026
2027
2028# Python-version-specific alias (Python 2: unicode; Python 3: str)
2029Text = str
2030
2031
2032# Constant that's True when type checking, but False here.
2033TYPE_CHECKING = False
2034
2035
2036class IO(Generic[AnyStr]):
2037    """Generic base class for TextIO and BinaryIO.
2038
2039    This is an abstract, generic version of the return of open().
2040
2041    NOTE: This does not distinguish between the different possible
2042    classes (text vs. binary, read vs. write vs. read/write,
2043    append-only, unbuffered).  The TextIO and BinaryIO subclasses
2044    below capture the distinctions between text vs. binary, which is
2045    pervasive in the interface; however we currently do not offer a
2046    way to track the other distinctions in the type system.
2047    """
2048
2049    __slots__ = ()
2050
2051    @property
2052    @abstractmethod
2053    def mode(self) -> str:
2054        pass
2055
2056    @property
2057    @abstractmethod
2058    def name(self) -> str:
2059        pass
2060
2061    @abstractmethod
2062    def close(self) -> None:
2063        pass
2064
2065    @property
2066    @abstractmethod
2067    def closed(self) -> bool:
2068        pass
2069
2070    @abstractmethod
2071    def fileno(self) -> int:
2072        pass
2073
2074    @abstractmethod
2075    def flush(self) -> None:
2076        pass
2077
2078    @abstractmethod
2079    def isatty(self) -> bool:
2080        pass
2081
2082    @abstractmethod
2083    def read(self, n: int = -1) -> AnyStr:
2084        pass
2085
2086    @abstractmethod
2087    def readable(self) -> bool:
2088        pass
2089
2090    @abstractmethod
2091    def readline(self, limit: int = -1) -> AnyStr:
2092        pass
2093
2094    @abstractmethod
2095    def readlines(self, hint: int = -1) -> List[AnyStr]:
2096        pass
2097
2098    @abstractmethod
2099    def seek(self, offset: int, whence: int = 0) -> int:
2100        pass
2101
2102    @abstractmethod
2103    def seekable(self) -> bool:
2104        pass
2105
2106    @abstractmethod
2107    def tell(self) -> int:
2108        pass
2109
2110    @abstractmethod
2111    def truncate(self, size: int = None) -> int:
2112        pass
2113
2114    @abstractmethod
2115    def writable(self) -> bool:
2116        pass
2117
2118    @abstractmethod
2119    def write(self, s: AnyStr) -> int:
2120        pass
2121
2122    @abstractmethod
2123    def writelines(self, lines: List[AnyStr]) -> None:
2124        pass
2125
2126    @abstractmethod
2127    def __enter__(self) -> 'IO[AnyStr]':
2128        pass
2129
2130    @abstractmethod
2131    def __exit__(self, type, value, traceback) -> None:
2132        pass
2133
2134
2135class BinaryIO(IO[bytes]):
2136    """Typed version of the return of open() in binary mode."""
2137
2138    __slots__ = ()
2139
2140    @abstractmethod
2141    def write(self, s: Union[bytes, bytearray]) -> int:
2142        pass
2143
2144    @abstractmethod
2145    def __enter__(self) -> 'BinaryIO':
2146        pass
2147
2148
2149class TextIO(IO[str]):
2150    """Typed version of the return of open() in text mode."""
2151
2152    __slots__ = ()
2153
2154    @property
2155    @abstractmethod
2156    def buffer(self) -> BinaryIO:
2157        pass
2158
2159    @property
2160    @abstractmethod
2161    def encoding(self) -> str:
2162        pass
2163
2164    @property
2165    @abstractmethod
2166    def errors(self) -> Optional[str]:
2167        pass
2168
2169    @property
2170    @abstractmethod
2171    def line_buffering(self) -> bool:
2172        pass
2173
2174    @property
2175    @abstractmethod
2176    def newlines(self) -> Any:
2177        pass
2178
2179    @abstractmethod
2180    def __enter__(self) -> 'TextIO':
2181        pass
2182
2183
2184class io:
2185    """Wrapper namespace for IO generic classes."""
2186
2187    __all__ = ['IO', 'TextIO', 'BinaryIO']
2188    IO = IO
2189    TextIO = TextIO
2190    BinaryIO = BinaryIO
2191
2192
2193io.__name__ = __name__ + '.io'
2194sys.modules[io.__name__] = io
2195
2196Pattern = _alias(stdlib_re.Pattern, 1)
2197Match = _alias(stdlib_re.Match, 1)
2198
2199class re:
2200    """Wrapper namespace for re type aliases."""
2201
2202    __all__ = ['Pattern', 'Match']
2203    Pattern = Pattern
2204    Match = Match
2205
2206
2207re.__name__ = __name__ + '.re'
2208sys.modules[re.__name__] = re
2209