summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2022-03-17 07:52:24 (GMT)
committerGitHub <noreply@github.com>2022-03-17 07:52:24 (GMT)
commit15df8f8d89a0e563bdd15e4cd6734298736a5a1d (patch)
treef47f546faa84d3ae5e91cb8ca06edb30f9fc8134
parent4674fd4e938eb4a29ccd5b12c15455bd2a41c335 (diff)
downloadcpython-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.py8
-rw-r--r--Lib/typing.py10
-rw-r--r--Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst2
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
+``((),)``.