Skip to content

Infer type var tuple contents in more situations #18958

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

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.

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)

Copy link
Contributor

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

vision (https://github.com/pytorch/vision)
- torchvision/utils.py:270: error: Unused "type: ignore" comment  [unused-ignore]

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:58: error: Unused "type: ignore" comment  [unused-ignore]
+ homeassistant/util/signal_type.pyi:58: error: Argument 2 to "async_dispatcher_send" has incompatible type "SignalType[int]"; expected "SignalType[str]"  [arg-type]
+ homeassistant/util/signal_type.pyi:58: note: Error code "arg-type" not covered by "type: ignore" comment

# for free to join this conversation on GitHub. Already have an account? # 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