Skip to content

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

Open
hauntsaninja wants to merge 1 commit intopython:masterfrom
hauntsaninja:narrow87
Open

Fix bug when narrowing union containing custom eq against custom eq#20754
hauntsaninja wants to merge 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!

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

2 participants