resolvelib: An example of resolution failure while it does have a valid resolution.

Run resolution on this requirement will result in a failure:

pandas
pystac   # removing this line will resolve successfully
pystac-client
sat-stac

While it does have a valid resolution if you remove the second dep but it is in the final resolution:

pandas
pystac-client
sat-stac

Which resolves to:

pandas==1.3.5
pystac==1.8.3
pystac-client==0.6.1
sat-stac==0.4.1

It seems an issue with the backtracking process.

Original report: https://github.com/pdm-project/pdm/issues/2193

About this issue

  • Original URL
  • State: open
  • Created 10 months ago
  • Comments: 18 (14 by maintainers)

Most upvoted comments

@notatallshaw Oh weird, I’ve never hit the too deep problem.

The only other context I have is:

  • "boto3" "dagster==1.5.5" "pandas[aws]==2.1.2" "dagster-aws>=0.21.5" fails, this uses a fully unspecified boto3 version, before I had the range for faster resolution
  • Changing the order can cause it to pass e.g "dagster==1.5.5" "pandas[aws]==2.1.2" "dagster-aws>=0.21.5" "boto3"
  • "dagster==1.5.5" "pandas[aws]==2.1.2" "dagster-aws>=0.21.5" passes (no boto3 specified but it’s still part of the dependency tree)
  • There are a few other combinations I’ve tried but in general ranges seem to break things and exact versions seem to work

I’m using pip 23.3.1 (python 3.11). An example full resolution is

Would install Jinja2-3.1.2 Mako-1.3.0 MarkupSafe-2.1.3 PyYAML-6.0.1 SQLAlchemy-2.0.23 aiobotocore-2.7.0 aiohttp-3.8.6 aioitertools-0.11.0 aiosignal-1.3.1 alembic-1.12.1 annotated-types-0.6.0 async-timeout-4.0.3 attrs-23.1.0 boto3-1.28.64 botocore-1.31.64 click-8.1.7 coloredlogs-14.0 croniter-2.0.1 dagster-1.5.5 dagster-aws-0.21.5 dagster-pipes-1.5.5 docstring-parser-0.15 frozenlist-1.4.0 fsspec-2023.10.0 greenlet-3.0.1 grpcio-1.59.2 grpcio-health-checking-1.59.2 humanfriendly-10.0 jmespath-1.0.1 multidict-6.0.4 numpy-1.26.2 pandas-2.1.2 pendulum-2.1.2 protobuf-4.25.0 psutil-5.9.6 pydantic-2.4.2 pydantic_core-2.10.1 pyreadline3-3.4.1 python-dateutil-2.8.2 python-dotenv-1.0.0 pytz-2023.3.post1 pytzdata-2020.1 pywin32-306 s3fs-2023.10.0 s3transfer-0.7.0 tabulate-0.9.0 tomli-2.0.1 toposort-1.10 tqdm-4.66.1 typing_extensions-4.8.0 tzdata-2023.3 universal-pathlib-0.1.4 watchdog-3.0.0 wrapt-1.16.0 yarl-1.9.2

Actually it falls into this branch: https://github.com/sarugaku/resolvelib/blob/77b256cdfb747e86112025d75cd698861ce355a5/src/resolvelib/resolvers.py#L317-L318

Where the causes are related to pystac, specifically, all versions of pystac have been marked as incompatible.

To fix this, we should considered a less hard fail for this case, for example, when no state is found, just pop the last pin.