[New-bugs-announce] [issue46470] `_remove_dups_flatten` in `typing.py` contains dead branch
Nikita Sobolev
report at bugs.python.org
Sat Jan 22 05:16:13 EST 2022
New submission from Nikita Sobolev <mail at sobolevn.me>:
Here's how `_remove_dups_flatten` is defined right now:
```
def _remove_dups_flatten(parameters):
"""An internal helper for Union creation and substitution: flatten Unions
among parameters, then remove duplicates.
"""
# Flatten out Union[Union[...], ...].
params = []
for p in parameters:
if isinstance(p, (_UnionGenericAlias, types.UnionType)):
params.extend(p.__args__)
elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:
params.extend(p[1:])
else:
params.append(p)
return tuple(_deduplicate(params))
```
Source: https://github.com/python/cpython/blob/38afeb1a336f0451c0db86df567ef726f49f6438/Lib/typing.py#L274
It is only used in `def Union():`, source: https://github.com/python/cpython/blob/38afeb1a336f0451c0db86df567ef726f49f6438/Lib/typing.py#L522-L523
```
parameters = tuple(_type_check(p, msg) for p in parameters)
parameters = _remove_dups_flatten(parameters)
```
But, notice that `_remove_dups_flatten` contains this branch: `elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:`.
It is never executed, removing it does not change `test_typing` / `test_types` results. And it is reasonable: `_type_check` ensures that `parameters` can only contain types, not `tuple`s.
Proof:
```
>>> from typing import Union, get_type_hints
>>> Union[int, (Union, str, bool)]
# TypeError: Union[arg, ...]: each arg must be a type. Got (typing.Union, <class 'str'>, <class 'bool'>).
>>> class Some:
... x: 'Union[int, (Union, str, bool)]'
...
>>> get_type_hints(Some)
# TypeError: Union[arg, ...]: each arg must be a type. Got (typing.Union, <class 'str'>, <class 'bool'>).
```
Since it is pretty old, I guess the internal API has changed significantly and it is not needed anymore.
I am going to send a PR to remove it.
----------
components: Library (Lib)
messages: 411244
nosy: sobolevn
priority: normal
severity: normal
status: open
title: `_remove_dups_flatten` in `typing.py` contains dead branch
type: behavior
versions: Python 3.11
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue46470>
_______________________________________
More information about the New-bugs-announce
mailing list