diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-03-17 07:52:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-17 07:52:24 (GMT) |
commit | 15df8f8d89a0e563bdd15e4cd6734298736a5a1d (patch) | |
tree | f47f546faa84d3ae5e91cb8ca06edb30f9fc8134 | |
parent | 4674fd4e938eb4a29ccd5b12c15455bd2a41c335 (diff) | |
download | cpython-15df8f8d89a0e563bdd15e4cd6734298736a5a1d.zip cpython-15df8f8d89a0e563bdd15e4cd6734298736a5a1d.tar.gz cpython-15df8f8d89a0e563bdd15e4cd6734298736a5a1d.tar.bz2 |
bpo-46981: Remove typing._TypingEmpty (GH-31836)
* get_args(Tuple[()]) now returns () instead of ((),).
* Tuple[Unpack[Ts]][()] now returns the result equal to Tuple[()].
-rw-r--r-- | Lib/test/test_typing.py | 8 | ||||
-rw-r--r-- | Lib/typing.py | 10 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst | 2 |
3 files changed, 5 insertions, 15 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index e88f732..bcffdc8 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -469,14 +469,12 @@ class TypeVarTupleTests(BaseTestCase): for A in G, Tuple: B = A[Unpack[Ts]] - if A != Tuple: - self.assertEqual(B[()], A[()]) + self.assertEqual(B[()], A[()]) self.assertEqual(B[float], A[float]) self.assertEqual(B[float, str], A[float, str]) C = List[A[Unpack[Ts]]] - if A != Tuple: - self.assertEqual(C[()], List[A[()]]) + self.assertEqual(C[()], List[A[()]]) self.assertEqual(C[float], List[A[float]]) self.assertEqual(C[float, str], List[A[float, str]]) @@ -4248,7 +4246,7 @@ class GetUtilitiesTestCase(TestCase): self.assertEqual(get_args(Union[int, Callable[[Tuple[T, ...]], str]]), (int, Callable[[Tuple[T, ...]], str])) self.assertEqual(get_args(Tuple[int, ...]), (int, ...)) - self.assertEqual(get_args(Tuple[()]), ((),)) + self.assertEqual(get_args(Tuple[()]), ()) self.assertEqual(get_args(Annotated[T, 'one', 2, ['three']]), (T, 'one', 2, ['three'])) self.assertEqual(get_args(List), ()) self.assertEqual(get_args(Tuple), ()) diff --git a/Lib/typing.py b/Lib/typing.py index 6930f5d..e861362 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1220,7 +1220,6 @@ class _GenericAlias(_BaseGenericAlias, _root=True): if not isinstance(args, tuple): args = (args,) self.__args__ = tuple(... if a is _TypingEllipsis else - () if a is _TypingEmpty else a for a in args) self.__parameters__ = _collect_parameters(args) self._paramspec_tvars = _paramspec_tvars @@ -1503,8 +1502,6 @@ class _CallableType(_SpecialGenericAlias, _root=True): class _TupleType(_SpecialGenericAlias, _root=True): @_tp_cache def __getitem__(self, params): - if params == (): - return self.copy_with((_TypingEmpty,)) if not isinstance(params, tuple): params = (params,) if len(params) >= 2 and params[-1] is ...: @@ -1735,13 +1732,6 @@ class Generic: cls.__parameters__ = tuple(tvars) -class _TypingEmpty: - """Internal placeholder for () or []. Used by TupleMeta and CallableMeta - to allow empty list/tuple in specific places, without allowing them - to sneak in where prohibited. - """ - - class _TypingEllipsis: """Internal placeholder for ... (ellipsis).""" diff --git a/Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst b/Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst new file mode 100644 index 0000000..29f7c93 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst @@ -0,0 +1,2 @@ +``typing.get_args(typing.Tuple[()])`` now returns ``()`` instead of +``((),)``. |