Closed
Description
Bug Report
Code below works fine with 0.971, but fails with 0.981. It seems that 0.971 did type narrowing on contents of a Union
, but 0.981 doesn't do it consistently.
To Reproduce
from typing import Union
from typing_extensions import reveal_type, assert_type
from datetime import date, datetime, timedelta
Scalar = Union[str, bytes, date, datetime, timedelta, bool, complex]
def reduce_it(s: Scalar) -> Scalar:
return s
reveal_type(reduce_it(20))
reveal_type(reduce_it(True))
assert_type(reduce_it(True), Scalar)
Expected Behavior
Version 0.971 output:
mypysubclass.py:13: note: Revealed type is "Union[builtins.str, builtins.bytes, datetime.date, datetime.timedelta, builtins.complex]"
mypysubclass.py:14: note: Revealed type is "Union[builtins.str, builtins.bytes, datetime.date, datetime.timedelta, builtins.complex]"
Actual Behavior
Version 0.981 output:
mypysubclass.py:13: note: Revealed type is "Union[builtins.str, builtins.bytes, datetime.date, datetime.timedelta, builtins.complex]"
mypysubclass.py:14: note: Revealed type is "Union[builtins.str, builtins.bytes, datetime.date, datetime.timedelta, builtins.complex]"
mypysubclass.py:16: error: Expression is of type "Union[str, bytes, date, timedelta, complex]", not "Union[str, bytes, date, datetime, timedelta, bool, complex]"
Your Environment
- Mypy version used: 0.981
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini
(and other config files): None - Python version used: 3.10.4