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