ruff
c343e94a - [ty] Simplify union lower bounds and intersection upper bounds in constraint sets (#21871)

Commit
2 days ago
[ty] Simplify union lower bounds and intersection upper bounds in constraint sets (#21871) In a constraint set, it's not useful for an upper bound to be an intersection type, or for a lower bound to be a union type. Both of those can be rewritten as simpler BDDs: ``` T ≤ α & β ⇒ (T ≤ α) ∧ (T ≤ β) T ≤ α & ¬β ⇒ (T ≤ α) ∧ ¬(T ≤ β) α | β ≤ T ⇒ (α ≤ T) ∧ (β ≤ T) ``` We were seeing performance issues on #21551 when _not_ performing this simplification. For instance, `pandas` was producing some constraint sets involving intersections of 8-9 different types. Our sequent map calculation was timing out calculating all of the different permutations of those types: ``` t1 & t2 & t3 → t1 t1 & t2 & t3 → t2 t1 & t2 & t3 → t3 t1 & t2 & t3 → t1 & t2 t1 & t2 & t3 → t1 & t3 t1 & t2 & t3 → t2 & t3 ``` (and then imagine what that looks like for 9 types instead of 3...) With this change, all of those permutations are now encoded in the BDD structure itself, which is very good at simplifying that kind of thing. Pulling this out of #21551 for separate review.
Author
Parents
Loading