Loosen Mapping.update()
overloads a little
#14593
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We received a report in ty that said that the changes made in #14099 are now too restrictive. Mypy and ty will now reject a call like this, which feel like it should be valid because
object
is obviously a supertype ofstr
:the call is rejected because
Mapping
is invariant in its key type, meaning that mypy and ty cannot select this overload:dict[object, object]
is not assignable toMapping[str, _VT]
:typeshed/stdlib/typing.pyi
Lines 809 to 810 in ab0968b
this PR uses a contravariant protocol for the
self
annotations in theMutableMapping.update()
overloads, so that this overload can now be selected if the mapping has a key type that isstr
or any supertype ofstr
. I think this should be sound?Fixes python/mypy#10970, fixes astral-sh/ty#1048