Skip to content

Lack of clarity for unsatisfiability #202

Description

@dan-van

Originally asked on pixi #5385

Problem

When adding a new constraint or dependency, it can be very difficult to work out the root cause of unsatisfiability from the current logging.
I was using pixi (0.63.2).
I think that from a user-perspective, highlighting the minimal top-level dependencies that cause the contraditon would be highly valuable.

Example (minimal) conflict (using pixi.toml):

[workspace]
name = "pytorch-fail"
channels = ["https://prefix.dev/conda-forge"]
platforms = ["linux-64"]

[system-requirements]
linux = "4.14"
libc = { family = "glibc", version = "2.28" }
cuda = "12"

[dependencies]
python = ">=3.13"
pytorch-gpu = ">=2.5"

# These two are mutually incompatible (but work individually):
pyarrow = ">=20"
gcc = ">=15.2"

Commenting out either pyarrow or gcc deps gives a solution, but having both gives over 200 lines of output, with no clear indicator as to what the problem is.
There's lots of logging like:

      │  │     │  └─ libabseil >=20240722.0,<20240723.0a0, which cannot be installed because there are no viable options:
      │  │     │     ├─ libabseil 20240722.0, which conflicts with the versions reported above.
      │  │     │     ├─ libabseil 20240722.0, which conflicts with the versions reported above.

but there is no abseil version 'reported above' (so that's rather confusing).

With hindsight of knowing the clashing packages, this is the only hint (but there are many other conflicts reported):

 │  │     │  │  │        └─ gcc_impl_linux-64 >=6,<13, which conflicts with any installable versions previously

Bear in mind that my original problem involved the pixi dependencies of a large mono-repo with maybe 200 dependencies in the .toml file - it took quite a while of trial and error to refine this down to a minimal example. Before that, I really had no clue which of my constraints were incompatible.

In whittling down to a minimal contradiction for this request, I realised that knowing the minimal dependencies that result in conflict is hugely valuable for a user. I'm wondering if resolvo has enough information in the solve to be able to indicate which top-level dependencies result in direct contradiction (especially when that contradiction is transitive)?

Once you know a minimal clashing top-level dependency set, you can start to look into possible relaxation of constraints (or decide what you need to rebuild yourself).

BTW - many thanks for bringing us out of the dark days of 30-minute sat solve times...!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions