Uh oh!
There was an error while loading. Please reload this page.
Fix bug when narrowing union containing custom eq against custom eq - #20754
Conversation
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
commented
Feb 6, 2026
Oh cool, for first time primer indicates we now actually do have a place where unsoundly special casing None could make sense |
nickdrozd
commented
Feb 6, 2026
Tested: works. Thanks! |
ilevkivskyi
commented
Feb 6, 2026
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
commented
Feb 6, 2026
It is easy to make changes now, I will just open a PR for it |
Uh oh!
There was an error while loading. Please reload this page.
In python#20754 we see some primer hits where this unsoundness is beneficial
hauntsaninja
commented
Feb 6, 2026
Something like this should do it: #20756 |
In python#20754 we see some primer hits where this unsoundness is beneficial
hauntsaninja
commented
Feb 6, 2026
Oh and in general I am leaving some notes for myself in #20564 |
I rewrote the logic for custom equality in #20643 . This is a soundness bug in that rewrite.
Fixes#20750