diff --git a/stdlib/typing.pyi b/stdlib/typing.pyi index 2a09bda16609..1ab54a00b6a9 100644 --- a/stdlib/typing.pyi +++ b/stdlib/typing.pyi @@ -211,6 +211,7 @@ if sys.version_info >= (3, 11): NotRequired: _SpecialForm LiteralString: _SpecialForm + @_final class TypeVarTuple: @property def __name__(self) -> str: ... @@ -220,16 +221,19 @@ if sys.version_info >= (3, 11): def __typing_prepare_subst__(self, alias: Incomplete, args: Incomplete) -> Incomplete: ... if sys.version_info >= (3, 10): + @_final class ParamSpecArgs: @property def __origin__(self) -> ParamSpec: ... def __init__(self, origin: ParamSpec) -> None: ... + @_final class ParamSpecKwargs: @property def __origin__(self) -> ParamSpec: ... def __init__(self, origin: ParamSpec) -> None: ... + @_final class ParamSpec: @property def __name__(self) -> str: ... @@ -272,7 +276,7 @@ if sys.version_info >= (3, 10): class NewType: def __init__(self, name: str, tp: Any) -> None: ... - def __call__(self, x: _T) -> _T: ... + def __call__(self, __x: _T) -> _T: ... def __or__(self, other: Any) -> _SpecialForm: ... def __ror__(self, other: Any) -> _SpecialForm: ... __supertype__: type diff --git a/stdlib/typing_extensions.pyi b/stdlib/typing_extensions.pyi index 20f9e3928243..7e643469edb6 100644 --- a/stdlib/typing_extensions.pyi +++ b/stdlib/typing_extensions.pyi @@ -22,7 +22,6 @@ from typing import ( # noqa: Y022,Y039 DefaultDict as DefaultDict, Deque as Deque, Mapping, - NewType as NewType, NoReturn as NoReturn, Sequence, SupportsAbs as SupportsAbs, @@ -97,6 +96,7 @@ __all__ = [ "runtime_checkable", "Text", "TypeAlias", + "TypeAliasType", "TypeGuard", "TYPE_CHECKING", "Never", @@ -106,6 +106,7 @@ __all__ = [ "clear_overloads", "get_args", "get_origin", + "get_original_bases", "get_overloads", "get_type_hints", ] @@ -196,10 +197,11 @@ class SupportsIndex(Protocol, metaclass=abc.ABCMeta): @abc.abstractmethod def __index__(self) -> int: ... -# New things in 3.10 +# New and changed things in 3.10 if sys.version_info >= (3, 10): from typing import ( Concatenate as Concatenate, + NewType as NewType, ParamSpecArgs as ParamSpecArgs, ParamSpecKwargs as ParamSpecKwargs, TypeAlias as TypeAlias, @@ -207,12 +209,16 @@ if sys.version_info >= (3, 10): is_typeddict as is_typeddict, ) else: + @final class ParamSpecArgs: - __origin__: ParamSpec + @property + def __origin__(self) -> ParamSpec: ... def __init__(self, origin: ParamSpec) -> None: ... + @final class ParamSpecKwargs: - __origin__: ParamSpec + @property + def __origin__(self) -> ParamSpec: ... def __init__(self, origin: ParamSpec) -> None: ... Concatenate: _SpecialForm @@ -220,6 +226,11 @@ else: TypeGuard: _SpecialForm def is_typeddict(tp: object) -> bool: ... + class NewType: + def __init__(self, name: str, tp: Any) -> None: ... + def __call__(self, __x: _T) -> _T: ... + __supertype__: type + # New things in 3.11 # NamedTuples are not new, but the ability to create generic NamedTuples is new in 3.11 if sys.version_info >= (3, 11): diff --git a/tests/stubtest_allowlists/py310.txt b/tests/stubtest_allowlists/py310.txt index bbc90a3ca46a..e7849d077e9a 100644 --- a/tests/stubtest_allowlists/py310.txt +++ b/tests/stubtest_allowlists/py310.txt @@ -172,3 +172,14 @@ dataclasses.KW_ONLY # We pretend it's a read-only property for forward compatibility with 3.12 typing.ParamSpec(Args|Kwargs).__origin__ + +# https://github.com/python/mypy/issues/15302 +typing_extensions\.assert_never +typing_extensions\.assert_type +typing_extensions\.reveal_type +typing.NewType.__call__ + +# Super-special typing primitives +typing_extensions\.Final +typing\.NamedTuple +typing\.Annotated diff --git a/tests/stubtest_allowlists/py311.txt b/tests/stubtest_allowlists/py311.txt index 79925f2593d5..d0ad57c7a2cb 100644 --- a/tests/stubtest_allowlists/py311.txt +++ b/tests/stubtest_allowlists/py311.txt @@ -126,7 +126,7 @@ contextlib.AbstractAsyncContextManager.__class_getitem__ contextlib.AbstractContextManager.__class_getitem__ # Super-special typing primitives -typing._SpecialForm.__mro_entries__ +typing\._SpecialForm.* typing._TypedDict.__delitem__ typing._TypedDict.__ior__ typing._TypedDict.__or__ @@ -137,6 +137,10 @@ typing._TypedDict.pop typing._TypedDict.setdefault typing._TypedDict.update typing._TypedDict.values +typing_extensions\.Final +typing\.NamedTuple +typing\.LiteralString +typing\.Annotated # White lies around defaults dataclasses.KW_ONLY diff --git a/tests/stubtest_allowlists/py37.txt b/tests/stubtest_allowlists/py37.txt index f83cd84b6cdc..ab45331b5531 100644 --- a/tests/stubtest_allowlists/py37.txt +++ b/tests/stubtest_allowlists/py37.txt @@ -151,3 +151,11 @@ types.GetSetDescriptorType.__get__ types.MemberDescriptorType.__get__ types.MethodDescriptorType.__get__ types.WrapperDescriptorType.__get__ + +# https://github.com/python/mypy/issues/15302 +typing_extensions\.assert_never +typing_extensions\.assert_type +typing_extensions\.reveal_type + +# Doesn't exist at runtime +typing\.Protocol diff --git a/tests/stubtest_allowlists/py38.txt b/tests/stubtest_allowlists/py38.txt index 358719ad1426..8f1ee8184407 100644 --- a/tests/stubtest_allowlists/py38.txt +++ b/tests/stubtest_allowlists/py38.txt @@ -169,3 +169,11 @@ types.GetSetDescriptorType.__get__ types.MemberDescriptorType.__get__ types.MethodDescriptorType.__get__ types.WrapperDescriptorType.__get__ + +# https://github.com/python/mypy/issues/15302 +typing_extensions\.assert_never +typing_extensions\.assert_type +typing_extensions\.reveal_type + +# Super-special typing primitives +typing_extensions\.Final diff --git a/tests/stubtest_allowlists/py39.txt b/tests/stubtest_allowlists/py39.txt index 7825eae72f00..90c9a38aa0d4 100644 --- a/tests/stubtest_allowlists/py39.txt +++ b/tests/stubtest_allowlists/py39.txt @@ -165,3 +165,13 @@ types.GetSetDescriptorType.__get__ types.MemberDescriptorType.__get__ types.MethodDescriptorType.__get__ types.WrapperDescriptorType.__get__ + +# https://github.com/python/mypy/issues/15302 +typing_extensions\.assert_never +typing_extensions\.assert_type +typing_extensions\.reveal_type + +# Super-special typing primitives +typing_extensions\.Final +typing\.NamedTuple +typing\.Annotated diff --git a/tests/stubtest_allowlists/py3_common.txt b/tests/stubtest_allowlists/py3_common.txt index c2e0b96e64c9..c378d7922cbf 100644 --- a/tests/stubtest_allowlists/py3_common.txt +++ b/tests/stubtest_allowlists/py3_common.txt @@ -407,9 +407,68 @@ pickle.Unpickler.memo # undocumented implementation detail, has different type re.Pattern.scanner # Undocumented and not useful. #6405 tempfile._TemporaryFileWrapper.[\w_]+ # Dynamically specified by __getattr__, and thus don't exist on the class -# Various classes in typing aren't types at runtime. In addition, mypy thinks some special forms are tautologically defined. -typing.[A-Z]\w+ -typing_extensions\..* +# Details of runtime definition don't need to be in stubs +typing_extensions\._SpecialForm.* +typing_extensions\.TypeVar.* +typing_extensions\.ParamSpec.* +typing\.Generic +typing\.Protocol + +# Special primitives +typing_extensions\.Annotated +typing_extensions\.NamedTuple +typing_extensions\.LiteralString +typing_extensions\.Coroutine +typing_extensions\.Awaitable +typing_extensions\.AsyncIterator +typing_extensions\.AsyncIterable +typing_extensions\.AsyncGenerator +typing\.ValuesView +typing\.Sized +typing\.Sequence +typing\.Reversible +typing\.Pattern +typing\.MutableSet +typing\.MutableSequence +typing\.MutableMapping +typing\.Match +typing\.MappingView +typing\.Mapping +typing\.KeysView +typing\.Iterator +typing\.Iterable +typing\.ItemsView +typing\.Hashable +typing\.Generator +typing\.Coroutine +typing\.Collection +typing\.Container +typing\.ByteString +typing\.AwaitableGenerator +typing\.Awaitable +typing\.AsyncIterator +typing\.AsyncIterable +typing\.AsyncGenerator +typing\.AbstractSet + +# Internal attributes +.*\.__protocol_attrs__ +.*\.__callable_proto_members_only__ + +# Exist at runtime for internal reasons, no need to put them in the stub +typing_extensions\.TypeAliasType\.__call__ +typing_extensions\.TypeAliasType\.__init_subclass__ + +typing_extensions.NewType.__mro_entries__ # just exists for an error message + +# We call them read-only properties, runtime implementation is slightly different +typing_extensions\.TypeAliasType\.__(parameters|type_params|name|module|value)__ + +# https://github.com/python/mypy/issues/15302 +typing_extensions.NewType.__call__ +typing_extensions\.deprecated +typing_extensions\.get_original_bases +typing_extensions\.override # These are abstract properties at runtime, # but marking them as such in the stub breaks half the the typed-Python ecosystem (see #8726)