## Summary
Adds type inference for list/dict/set comprehensions, including
bidirectional inference:
```py
reveal_type({k: v for k, v in [("a", 1), ("b", 2)]}) # dict[Unknown | str, Unknown | int]
squares: list[int | None] = [x for x in range(10)]
reveal_type(squares) # list[int | None]
```
## Ecosystem impact
I did spot check the changes and most of them seem like known
limitations or true positives. Without proper bidirectional inference,
we saw a lot of false positives.
## Test Plan
New Markdown tests
598 B
598 B
Sets
Basic set
reveal_type({1, 2}) # revealed: set[Unknown | int]
Set of tuples
reveal_type({(1, 2), (3, 4)}) # revealed: set[Unknown | tuple[int, int]]
Set of functions
def a(_: int) -> int:
return 0
def b(_: int) -> int:
return 1
x = {a, b}
reveal_type(x) # revealed: set[Unknown | ((_: int) -> int)]
Mixed set
# revealed: set[Unknown | int | tuple[int, int] | tuple[int, int, int]]
reveal_type({1, (1, 2), (1, 2, 3)})
Set comprehensions
reveal_type({x for x in range(42)}) # revealed: set[int | Unknown]