Skip to content

Fix bug when narrowing union containing custom eq against custom eq#20754

Merged
hauntsaninja merged 1 commit intopython:masterfrom
hauntsaninja:narrow87
Feb 6, 2026
Merged

Fix bug when narrowing union containing custom eq against custom eq#20754
hauntsaninja merged 1 commit intopython:masterfrom
hauntsaninja:narrow87

Conversation

@hauntsaninja
Copy link
Collaborator

@hauntsaninja hauntsaninja commented Feb 6, 2026

I rewrote the logic for custom equality in #20643 . This is a soundness bug in that rewrite.

Fixes #20750

@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

Diff from mypy_primer, showing the effect of this PR on open source code:

pip (https://github.com/pypa/pip)
+ src/pip/_internal/resolution/resolvelib/candidates.py:293: error: Item "None" of "Link | None" has no attribute "is_wheel"  [union-attr]
+ src/pip/_internal/resolution/resolvelib/candidates.py:293: error: Item "None" of "Link | None" has no attribute "is_file"  [union-attr]
+ src/pip/_internal/resolution/resolvelib/candidates.py:294: error: Item "None" of "Link | None" has no attribute "filename"  [union-attr]
+ src/pip/_internal/resolution/resolvelib/candidates.py:305: error: Item "None" of "Link | None" has no attribute "is_wheel"  [union-attr]
+ src/pip/_internal/resolution/resolvelib/candidates.py:306: error: Item "None" of "Link | None" has no attribute "is_file"  [union-attr]

schema_salad (https://github.com/common-workflow-language/schema_salad)
+ schema_salad/tests/test_examples.py: note: In function "test_scoped_id":
+ schema_salad/tests/test_examples.py:395:23: error: Argument 2 to "makerdf" has incompatible type "int | float | str | CommentedMap | CommentedSeq | None"; expected "CommentedMap | float | str | CommentedSeq"  [arg-type]
+ schema_salad/tests/test_examples.py:408:23: error: Argument 2 to "makerdf" has incompatible type "int | float | str | CommentedMap | CommentedSeq | None"; expected "CommentedMap | float | str | CommentedSeq"  [arg-type]
+ schema_salad/tests/test_examples.py:421:23: error: Argument 2 to "makerdf" has incompatible type "int | float | str | CommentedMap | CommentedSeq | None"; expected "CommentedMap | float | str | CommentedSeq"  [arg-type]
+ schema_salad/tests/test_examples.py:434:23: error: Argument 2 to "makerdf" has incompatible type "int | float | str | CommentedMap | CommentedSeq | None"; expected "CommentedMap | float | str | CommentedSeq"  [arg-type]

@hauntsaninja
Copy link
Collaborator Author

Oh cool, for first time primer indicates we now actually do have a place where unsoundly special casing None could make sense

@nickdrozd
Copy link
Contributor

Tested: works. Thanks!

@ilevkivskyi
Copy link
Member

@hauntsaninja

Oh cool, for first time primer indicates we now actually do have a place where unsoundly special casing None could make sense

Do we have an issue about this so that we will not forget? Probably makes sense to do this before the next release, so that people will not see this as a perceived regression.

@hauntsaninja
Copy link
Collaborator Author

It is easy to make changes now, I will just open a PR for it

@hauntsaninja hauntsaninja merged commit 525c6d1 into python:master Feb 6, 2026
23 checks passed
@hauntsaninja hauntsaninja deleted the narrow87 branch February 6, 2026 09:55
hauntsaninja added a commit to hauntsaninja/mypy that referenced this pull request Feb 6, 2026
In python#20754 we see some primer hits where this unsoundness is beneficial
@hauntsaninja
Copy link
Collaborator Author

Something like this should do it: #20756

hauntsaninja added a commit to hauntsaninja/mypy that referenced this pull request Feb 6, 2026
In python#20754 we see some primer hits where this unsoundness is beneficial
@hauntsaninja
Copy link
Collaborator Author

Oh and in general I am leaving some notes for myself in #20564
If there's anything you would like me to not forget feel free to post in there

hauntsaninja added a commit that referenced this pull request Feb 6, 2026
With #20754 we see some primer hits where this unsoundness is beneficial

Closes #15764
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Narrowing causing Mypyc runtime type error

3 participants