Files
uv/crates
Zanie Blue f7e9a33d48 Improve performance of repeated conflicts with an extra (#18094)
In https://github.com/astral-sh/uv/issues/18026, we received a report
that resolution took >90m and the root cause appears to be that repeated
conflicts with a single extra causes an exponential explosion.

I used Codex to find an optimization to avoid this. 

> When processing N pairwise conflict sets that share a common extra
(e.g., {pinned, a}, {pinned, b}, {pinned, c}, ...), the resolver creates
forks by iterating over each conflict set and splitting every existing
fork into N+1 sub-forks. Without the optimization, this is
multiplicative — each conflict set multiplies the fork count, producing
O(2^N) forks even though most are redundant.
> 
> The key observation is: if a prior conflict set already excluded an
extra from a fork, then a later conflict set involving that same extra
is already satisfied in that fork — there's nothing left to separate.
For example, after processing {pinned, a}, one fork has pinned excluded.
When we then process {pinned, b}, that fork already can't have pinned
active, so the constraint "at most one of pinned or b" is trivially
true. We call this fork dominated by the earlier split — no further
forking is needed.
> 
> The one subtlety: even if a conflict set is satisfied in a fork, we
might still need to fork if the remaining non-excluded item appears in
another conflict set that's still live (i.e., has two or more
non-excluded items). That's the refined check — we only skip forking
when the item is truly dominated across all conflict sets, not just the
current one.

I then did some rough benchmarking
```
 ┌────┬────────┬───────┬─────────┐                                                                       
 │ N  │ Before │ After │ Speedup │                                                                       
 ├────┼────────┼───────┼─────────┤                                                                       
 │ 5  │ 29ms   │ 27ms  │ ~1×     │                                                                       
 ├────┼────────┼───────┼─────────┤                                                                       
 │ 8  │ 58ms   │ 27ms  │ 2×      │                                                                       
 ├────┼────────┼───────┼─────────┤                                                                       
 │ 10 │ 185ms  │ 26ms  │ 7×      │                                                                       
 ├────┼────────┼───────┼─────────┤                                                                       
 │ 15 │ 20.0s  │ 46ms  │ 435×    │                                                                       
 ├────┼────────┼───────┼─────────┤                                                                       
 │ 20 │ >60s   │ 28ms  │ >2,000× │                                                                       
 └────┴────────┴───────┴─────────┘                                                                       
```
2026-02-20 16:08:30 +00:00
..
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00
2026-02-17 21:15:57 +00:00

Crates

uv-bench

Functionality for benchmarking uv.

uv-cache-key

Generic functionality for caching paths, URLs, and other resources across platforms.

uv-distribution-filename

Parse built distribution (wheel) and source distribution (sdist) filenames to extract structured metadata.

uv-distribution-types

Abstractions for representing built distributions (wheels) and source distributions (sdists), and the sources from which they can be downloaded.

uv-install-wheel-rs

Install built distributions (wheels) into a virtual environment.

uv-once-map

A waitmap-like concurrent hash map for executing tasks exactly once.

uv-pep440-rs

Utilities for interacting with Python version numbers and specifiers.

uv-pep508-rs

Utilities for parsing and evaluating dependency specifiers, previously known as PEP 508.

uv-platform-tags

Functionality for parsing and inferring Python platform tags as per PEP 425.

uv-cli

Command-line interface for the uv package manager.

uv-build-frontend

A PEP 517-compatible build frontend for uv.

uv-cache

Functionality for caching Python packages and associated metadata.

uv-client

Client for interacting with PyPI-compatible HTTP APIs.

uv-dev

Development utilities for uv.

uv-dispatch

A centralized struct for resolving and building source distributions in isolated environments. Implements the traits defined in uv-types.

uv-distribution

Client for interacting with built distributions (wheels) and source distributions (sdists). Capable of fetching metadata, distribution contents, etc.

uv-extract

Utilities for extracting files from archives.

uv-fs

Utilities for interacting with the filesystem.

uv-git

Functionality for interacting with Git repositories.

uv-installer

Functionality for installing Python packages into a virtual environment.

uv-python

Functionality for detecting and leveraging the current Python interpreter.

uv-normalize

Normalize package and extra names as per Python specifications.

uv-requirements

Utilities for reading package requirements from pyproject.toml and requirements.txt files.

uv-resolver

Functionality for resolving Python packages and their dependencies.

uv-shell

Utilities for detecting and manipulating shell environments.

uv-types

Shared traits for uv, to avoid circular dependencies.

uv-pypi-types

General-purpose type definitions for types used in PyPI-compatible APIs.

uv-virtualenv

A venv replacement to create virtual environments in Rust.

uv-warnings

User-facing warnings for uv.

uv-workspace

Workspace abstractions for uv.

uv-requirements-txt

Functionality for parsing requirements.txt files.