Regression with narrowing with negative intersection
Open
Nobody has claimed this yet.
bug
topic-type-narrowing
- Dominant language
- Python
- Stars
- 20.6k
- Forks
- 3.3k
- PR merge metrics
- PR metrics pending
Description
from __future__ import annotations
from typing import Any
class array: ...
def get_result() -> Any: ...
def foo(x: str | array) -> str:
result = get_result()
if isinstance(result, array):
return "asdf"
if result is x:
reveal_type(result) # N: Revealed type is "Any"
return result
raise
As of https://github.com/python/mypy/pull/20492 we now get 14: error: Incompatible return value type (got "str | array", expected "str")
I don't have a fix for this in my stack (and expect a fix to be tricky)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the self-contained reproducer and compare its narrowing behavior with the change introduced by pull request 20492. Done means the example no longer reports an incompatible return type and preserves the expected revealed type of Any.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100