New submission from Nikita Sobolev <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue46470>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com