Skip to content

[red-knot] set a size limit on unions of literals #17419

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 16, 2025
Merged

Conversation

carljm
Copy link
Contributor

@carljm carljm commented Apr 16, 2025

Summary

Until we optimize our full union/intersection representation to efficiently handle large numbers of same-kind literal types "as a block", set a fairly low limit on the size of unions of literals.

We will want to increase this limit once we've made the broader efficiency improvement (tracked in #17420).

Test Plan

cargo bench --bench red_knot

@carljm carljm added the red-knot Multi-file analysis & type inference label Apr 16, 2025
Copy link
Contributor

github-actions bot commented Apr 16, 2025

mypy_primer results

No ecosystem changes detected ✅

Copy link

codspeed-hq bot commented Apr 16, 2025

CodSpeed Performance Report

Merging #17419 will improve performances by ×110

Comparing cjm/unionlimit2 (ac691ca) with main (5a115e7)

Summary

⚡ 1 improvements
✅ 32 untouched benchmarks

Benchmarks breakdown

Benchmark BASE HEAD Change
red_knot_micro[many_string_assignments] 5,816.3 ms 51.9 ms ×110

@AlexWaygood AlexWaygood added the performance Potential performance improvement label Apr 16, 2025
Base automatically changed from cjm/unionlimit to main April 16, 2025 14:05
@carljm carljm enabled auto-merge (squash) April 16, 2025 14:21
@carljm carljm merged commit c7b5067 into main Apr 16, 2025
20 checks passed
@carljm carljm deleted the cjm/unionlimit2 branch April 16, 2025 14:23
dcreager added a commit that referenced this pull request Apr 16, 2025
* main: (44 commits)
  [`airflow`] Extend `AIR311` rules (#17422)
  [red-knot] simplify union size limit handling (#17429)
  [`airflow`] Extract `AIR311` from `AIR301` rules (`AIR301`, `AIR311`) (#17310)
  [red-knot] set a size limit on unions of literals (#17419)
  [red-knot] make large-union benchmark slow again (#17418)
  [red-knot] optimize building large unions of literals (#17403)
  [red-knot] Fix comments in type_api.md (#17425)
  [red-knot] Do not assume that `x != 0` if `x` inhabits `~Literal[0]` (#17370)
  [red-knot] make large-union benchmark more challenging (#17416)
  [red-knot] Acknowledge that `T & anything` is assignable to `T` (#17413)
  Update Rust crate clap to v4.5.36 (#17381)
  Raise syntax error when `\` is at end of file (#17409)
  [red-knot] Add regression tests for narrowing constraints cycles (#17408)
  [red-knot] Add some knowledge of `__all__` to `*`-import machinery (#17373)
  Update taiki-e/install-action digest to be7c31b (#17379)
  Update Rust crate mimalloc to v0.1.46 (#17382)
  Update PyO3/maturin-action action to v1.49.1 (#17384)
  Update Rust crate anyhow to v1.0.98 (#17380)
  dependencies: switch from `chrono` to `jiff`
  Update Rust crate bstr to v1.12.0 (#17385)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Potential performance improvement red-knot Multi-file analysis & type inference
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants