bpo-46981: Remove typing._TypingEmpty (GH-31836)

* get_args(Tuple[()]) now returns () instead of ((),).
* Tuple[Unpack[Ts]][()] now returns the result equal to Tuple[()].
This commit is contained in:
Serhiy Storchaka 2022-03-17 09:52:24 +02:00 committed by GitHub
parent 4674fd4e93
commit 15df8f8d89
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 15 deletions

View file

@ -469,14 +469,12 @@ class TypeVarTupleTests(BaseTestCase):
for A in G, Tuple: for A in G, Tuple:
B = A[Unpack[Ts]] 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], A[float])
self.assertEqual(B[float, str], A[float, str]) self.assertEqual(B[float, str], A[float, str])
C = List[A[Unpack[Ts]]] 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], List[A[float]])
self.assertEqual(C[float, str], List[A[float, str]]) 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]]), self.assertEqual(get_args(Union[int, Callable[[Tuple[T, ...]], str]]),
(int, Callable[[Tuple[T, ...]], str])) (int, Callable[[Tuple[T, ...]], str]))
self.assertEqual(get_args(Tuple[int, ...]), (int, ...)) 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(Annotated[T, 'one', 2, ['three']]), (T, 'one', 2, ['three']))
self.assertEqual(get_args(List), ()) self.assertEqual(get_args(List), ())
self.assertEqual(get_args(Tuple), ()) self.assertEqual(get_args(Tuple), ())

View file

@ -1220,7 +1220,6 @@ class _GenericAlias(_BaseGenericAlias, _root=True):
if not isinstance(args, tuple): if not isinstance(args, tuple):
args = (args,) args = (args,)
self.__args__ = tuple(... if a is _TypingEllipsis else self.__args__ = tuple(... if a is _TypingEllipsis else
() if a is _TypingEmpty else
a for a in args) a for a in args)
self.__parameters__ = _collect_parameters(args) self.__parameters__ = _collect_parameters(args)
self._paramspec_tvars = _paramspec_tvars self._paramspec_tvars = _paramspec_tvars
@ -1503,8 +1502,6 @@ class _CallableType(_SpecialGenericAlias, _root=True):
class _TupleType(_SpecialGenericAlias, _root=True): class _TupleType(_SpecialGenericAlias, _root=True):
@_tp_cache @_tp_cache
def __getitem__(self, params): def __getitem__(self, params):
if params == ():
return self.copy_with((_TypingEmpty,))
if not isinstance(params, tuple): if not isinstance(params, tuple):
params = (params,) params = (params,)
if len(params) >= 2 and params[-1] is ...: if len(params) >= 2 and params[-1] is ...:
@ -1735,13 +1732,6 @@ class Generic:
cls.__parameters__ = tuple(tvars) 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: class _TypingEllipsis:
"""Internal placeholder for ... (ellipsis).""" """Internal placeholder for ... (ellipsis)."""

View file

@ -0,0 +1,2 @@
``typing.get_args(typing.Tuple[()])`` now returns ``()`` instead of
``((),)``.