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