Skip to content

mypy 0.981 does not simplify unions for assert_type #13760

Closed
@Dr-Irv

Description

@Dr-Irv

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions