]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46981: Remove typing._TypingEmpty (GH-31836)
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 17 Mar 2022 07:52:24 +0000 (09:52 +0200)
committerGitHub <noreply@github.com>
Thu, 17 Mar 2022 07:52:24 +0000 (09:52 +0200)
* get_args(Tuple[()]) now returns () instead of ((),).
* Tuple[Unpack[Ts]][()] now returns the result equal to Tuple[()].

Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2022-03-12-11-30-42.bpo-46981.ltWCxH.rst [new file with mode: 0644]

index e88f7322b2fa8570943ed672054fbb1ea1c50aa8..bcffdc882dbe682e9cf7321574a89fc9948d98a2 100644 (file)
@@ -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), ())
index 6930f5ddac42acc1ca27fea4d28c04cdfdf34e89..e8613625c3044c27e201702bf17d16ead1050179 100644 (file)
@@ -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 (file)
index 0000000..29f7c93
--- /dev/null
@@ -0,0 +1,2 @@
+``typing.get_args(typing.Tuple[()])`` now returns ``()`` instead of
+``((),)``.