uv/crates
Andrew Gallant 563507edba uv-resolver: add support for incomplete markers
In some cases, it's possible for the marker expressions on conflicting
dependency specification to be disjoint but *incomplete*. That is, if
one unions the disjoint markers, the result is not the complete set of
marker environments possible. There may be some "gap" of marker
environments not covered by the markers.

This is a problem in practice because, before this commit, we only
created forks in the resolver for specific marker expressions. So if a
dependency happened to fall in a "gap," our resolver would never see it.

This commit fixes this by adding a new split covering the negation of
the union of all marker expressions in a set of forks for a specific
package.

Originally, I had planned on only creating this split when it was known
that the gap actually existed. That is, when the negation of the marker
expressions did *not* correspond to the empty set. After a lot of
thought, unfortunately, this (I believe) effectively boils down to 3SAT,
which is NP-complete.

Instead, what we do here is *always* create an extra split unless we can
definitively tell that it is empty. We look for a few cases, but
otherwise throw our hands up and potentially do wasted work.

This also updates the lock scenario tests to reflect the actual bug fix
here.
2024-07-15 10:09:01 -07:00
..
bench Switch to Current-Thread Tokio Runtime (#4934) 2024-07-09 18:21:16 -04:00
cache-key Cache tool environments in uv tool run (#4784) 2024-07-03 19:25:39 -04:00
distribution-filename Remove incompatible wheels from uv.lock (#4799) 2024-07-04 14:03:54 -04:00
distribution-types Use lockfile to prefill resolver index (#4495) 2024-07-12 18:49:28 -04:00
install-wheel-rs Lock directories to synchronize wheel-install copies (#4978) 2024-07-12 00:53:20 +00:00
once-map Use lockfile to prefill resolver index (#4495) 2024-07-12 18:49:28 -04:00
pep440-rs pep508: add MarkerTree::negate 2024-07-12 04:37:36 -07:00
pep508-rs uv-resolver: add support for incomplete markers 2024-07-15 10:09:01 -07:00
platform-tags fix: add missing ppc64le alias for powerpc64le (#3963) 2024-06-02 13:15:24 -04:00
pypi-types Respect tool upgrades in uv tool install (#4736) 2024-07-02 16:46:31 -04:00
requirements-txt Preserve verbatim URLs for --find-links (#4838) 2024-07-05 16:57:40 -05:00
uv uv-resolver: add support for incomplete markers 2024-07-15 10:09:01 -07:00
uv-auth Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
uv-build Add a custom error message for --no-build-isolation torch dependencies (#5041) 2024-07-13 21:12:26 +00:00
uv-cache uv cache prune removes all cached environments (#4845) 2024-07-06 19:37:15 +00:00
uv-cli Add a command to append uv's binary directory to PATH (#4975) 2024-07-12 22:09:34 +00:00
uv-client There are no rage requests here (#5037) 2024-07-13 15:35:51 +00:00
uv-configuration Add manylinux_2_31 to supported --python-platform (#4965) 2024-07-10 16:30:35 +00:00
uv-dev Update Rust crate tikv-jemallocator to 0.6.0 (#5058) 2024-07-14 20:39:50 -04:00
uv-dispatch Switch to Current-Thread Tokio Runtime (#4934) 2024-07-09 18:21:16 -04:00
uv-distribution Use correct pyproject.toml path in warnings (#5069) 2024-07-15 11:15:58 +00:00
uv-extract Fix nightly cfg checker warnings (#3932) 2024-05-31 09:35:52 +00:00
uv-fs Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv-git Fix implementation of GitDatabase::contains (#4698) 2024-07-01 13:01:29 -04:00
uv-installer Lock directories to synchronize wheel-install copies (#4978) 2024-07-12 00:53:20 +00:00
uv-macros Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
uv-normalize Move shell manipulation into its own crate (#5028) 2024-07-12 21:12:58 -04:00
uv-python Respect the libc of the execution environment with uv python list (#5036) 2024-07-14 11:14:57 -05:00
uv-requirements Allow constraints to be provided in --upgrade-package (#4952) 2024-07-09 20:09:13 -07:00
uv-resolver uv-resolver: add support for incomplete markers 2024-07-15 10:09:01 -07:00
uv-scripts Add PEP 723 support to uv run (#4656) 2024-07-01 08:20:24 -04:00
uv-settings Warn when unused pyproject.toml configuration is detected (#5025) 2024-07-12 17:50:04 -04:00
uv-shell Add Windows path updates for uv tool (#5029) 2024-07-13 01:55:05 +00:00
uv-state Cache tool environments in uv tool run (#4784) 2024-07-03 19:25:39 -04:00
uv-tool Remove non-existent feature (#5049) 2024-07-14 19:49:22 -04:00
uv-trampoline Update windows binaries, again (#4864) 2024-07-07 18:58:22 -04:00
uv-types Change "toolchain" to "python" (#4735) 2024-07-03 07:44:29 -05:00
uv-version Bump version to 0.2.24 (#4974) 2024-07-10 13:50:12 -05:00
uv-virtualenv Change "toolchain" to "python" (#4735) 2024-07-03 07:44:29 -05:00
uv-warnings Fix a bug where no warning is output when parsing of workspace settings fails. (#4014) 2024-06-04 09:21:19 -04:00
README.md Move shell manipulation into its own crate (#5028) 2024-07-12 21:12:58 -04:00

Crates

bench

Functionality for benchmarking uv.

cache-key

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

distribution-filename

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

distribution-types

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

install-wheel-rs

Install built distributions (wheels) into a virtual environment.]

once-map

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

pep440-rs

Utilities for interacting with Python version numbers and specifiers.

pep508-rs

Utilities for interacting with PEP 508 dependency specifiers.

platform-host

Functionality for detecting the current platform (operating system, architecture, etc.).

platform-tags

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

uv

Command-line interface for the uv package manager.

uv-build

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-package

Types and functionality for working with Python packages, e.g., parsing wheel files.

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.

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.

requirements-txt

Functionality for parsing requirements.txt files.