Skip to content

Conversation

@A5rocks
Copy link
Collaborator

@A5rocks A5rocks commented Apr 23, 2025

Supersedes #17512 as I figured out how to handle this case in a more general manner.

This PR fixes #16522. It adds a mechanism for constraints to be discarded if they are less likely to be correct: for instance, if you pass f(x: int, y: str = "42") to Callable[[Unpack[Ts]], None] it's not clear whether y should be included in an unpacked TypeVarTuple. This PR makes it such that function_using_typevartuple(f, 42) discards constraints based on f.

@github-actions

This comment has been minimized.

@A5rocks
Copy link
Collaborator Author

A5rocks commented Apr 24, 2025

The only bad change in mypy primer is:

+ homeassistant/components/homekit/accessories.py:656: error: Argument 2 to "async_dispatcher_send" has incompatible type "SignalType[tuple[str, ...]]"; expected "SignalType[tuple[str]]"  [arg-type]

... and I'm not quite sure if there's a good way to solve this. We could check whether constraints interfere with each other and only if they do prefer the higher quality ones? That sounds slow, though. (EDIT: I did that, but again I'm not confident it's right)

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@A5rocks
Copy link
Collaborator Author

A5rocks commented Nov 25, 2025

@ilevkivskyi this is my best guess at a mechanism that would handle TypeVarTuple inference when there's also kwargs that need to be discarded. Does it seem reasonable?

@github-actions
Copy link
Contributor

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

sockeye (https://github.com/awslabs/sockeye)
+ sockeye/layers.py:530: error: Unused "type: ignore" comment  [unused-ignore]
+ sockeye/layers.py:873: error: Unused "type: ignore" comment  [unused-ignore]

core (https://github.com/home-assistant/core)
+ homeassistant/util/signal_type.pyi:57: error: Unused "type: ignore" comment  [unused-ignore]
+ homeassistant/util/signal_type.pyi:57: error: Argument 2 to "async_dispatcher_send" has incompatible type "SignalType[int]"; expected "SignalType[str]"  [arg-type]
+ homeassistant/util/signal_type.pyi:57: note: Error code "arg-type" not covered by "type: ignore" comment

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.

Never inferred in complex situation with variadic callable protocol

1 participant