Closed
Description
Documentation
It seems that typing.Union[X, Y]
as well as X | Y
type hints require X
and Y
to be hashable.
This is not documented as far as I can see.
Considering this example:
@dataclass
class ValueRange:
lo: int
hi: int
T1 = Annotated[int, ValueRange(-10, 5)]
This fails when unioned:
>>> Annotated[int, ValueRange(-10, 5)] | None
(...)
File "/usr/lib64/python3.11/typing.py", line 1375, in __or__
return Union[self, right]
~~~~~^^^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 358, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 481, in __getitem__
return self._getitem(self, parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 695, in Union
parameters = _remove_dups_flatten(parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 326, in _remove_dups_flatten
return tuple(_deduplicate(params))
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 301, in _deduplicate
all_params = set(params)
^^^^^^^^^^^
File "/usr/lib64/python3.11/typing.py", line 2151, in __hash__
return hash((self.__origin__, self.__metadata__))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'ValueRange'
Should this be documented say here: https://docs.python.org/3/library/typing.html?highlight=typing#typing.Annotated ?
And examples here should use frozen dataclasses: https://docs.python.org/3/library/typing.html?highlight=typing#typing.Annotated ?