Avoid materializing complements during resolution (#20982)
More performance updates from nab, and the uv side of
astral-sh/pubgrub#77. This forwards `difference` through uv's `Range`
wrapper for both the encoded and canonical representations, and uses it
in the batch prefetcher in place of intersecting with complements.
The second commit temporarily pins the pubgrub crates to that branch so
the change builds end to end, and is dropped once the crates release.
On my machine I observed some small speed ups in conflict heavy
scenarios:
| resolve | wall time |
|---|---|
| `pip compile` boto3+awscli, `--python-version 3.6` | -3.5 to -3.9% |
| `lock` boto3+awscli | -2.8 to -3.6% |
| `pip compile` airflow[all], `--python-version 3.8` | no change |
| small warm resolves | no change |
---------
Co-authored-by: konstin <konstin@mailbox.org>