Skip to content

New resolver: Try == specifiers first to catch simple incompatibilities faster #9185

@uranusjr

Description

@uranusjr

Idea I have while working on #9011 (comment)

This input:

tensorboard==2.2.2
torch==1.7.0
tqdm>=4.54

nltk==3.5.0
transformers==3.5.0
tokenizers==0.9.4
jsonlines>=1.2
sacrebleu>=1.4

pytest>=6.1
pytest-cov>=2.10
codecov>=2.1
flake8>=3.8
black==20.8b1

Leads to this eventual error:

The conflict is caused by:
    The user requested tokenizers==0.9.4
    transformers 3.5.0 depends on tokenizers==0.9.3

But the resolver needs a very long time to reach it, because… the packages started with to and tr are checked last, after the resolver successfully worked out all the other complex open specifier combinations 🤦

I think we can make things a bit better by checking for == (and ===) specifiers and do those packages first. This is similar to how we previously “optimised” the process by using len(candidates) (the less candidates a package has, the more likely it causes conflicts, so we check them first to catch simple cases early), but without needing to actually fetch the list of candidates eagerly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions