From edda4ec452babc64d1aa308c208e7349dcb65d93 Mon Sep 17 00:00:00 2001 From: Zanie Date: Mon, 22 Jan 2024 16:34:53 -0600 Subject: [PATCH] Display the full derivation tree in snapshots --- crates/puffin-resolver/src/error.rs | 2 + crates/puffin-resolver/tests/resolver.rs | 6 +- crates/puffin/tests/pip_compile.rs | 118 ++++++++++++++++--- crates/puffin/tests/pip_compile_scenarios.rs | 6 +- crates/puffin/tests/pip_install.rs | 29 ++++- crates/puffin/tests/pip_install_scenarios.rs | 44 +++---- 6 files changed, 157 insertions(+), 48 deletions(-) diff --git a/crates/puffin-resolver/src/error.rs b/crates/puffin-resolver/src/error.rs index c78e98a1f..12564129f 100644 --- a/crates/puffin-resolver/src/error.rs +++ b/crates/puffin-resolver/src/error.rs @@ -147,6 +147,8 @@ impl std::fmt::Display for NoSolutionError { }; let report = DefaultStringReporter::report_with_formatter(&self.derivation_tree, &formatter); + + write!(f, "{:?}", &self.derivation_tree)?; write!(f, "{report}")?; // Include any additional hints. diff --git a/crates/puffin-resolver/tests/resolver.rs b/crates/puffin-resolver/tests/resolver.rs index 8da1cbbb1..488140938 100644 --- a/crates/puffin-resolver/tests/resolver.rs +++ b/crates/puffin-resolver/tests/resolver.rs @@ -511,7 +511,7 @@ async fn black_disallow_prerelease() -> Result<()> { .unwrap_err(); assert_snapshot!(err, @r###" - Because only black>20.0 is available and you require black<=20.0, we can conclude that the requirements are unsatisfiable. + Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("black"), None, None), Range { segments: [(Unbounded, Included("20.0"))] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("black"), None, None), Range { segments: [(Unbounded, Included("20.0"))] })) })Because only black>20.0 is available and you require black<=20.0, we can conclude that the requirements are unsatisfiable. hint: Pre-releases are available for black in the requested range (e.g., 19.10b0), but pre-releases weren't enabled (try: `--prerelease=allow`) "###); @@ -533,7 +533,7 @@ async fn black_allow_prerelease_if_necessary() -> Result<()> { .unwrap_err(); assert_snapshot!(err, @r###" - Because only black>20.0 is available and you require black<=20.0, we can conclude that the requirements are unsatisfiable. + Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("black"), None, None), Range { segments: [(Unbounded, Included("20.0"))] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("black"), None, None), Range { segments: [(Unbounded, Included("20.0"))] })) })Because only black>20.0 is available and you require black<=20.0, we can conclude that the requirements are unsatisfiable. hint: Pre-releases are available for black in the requested range (e.g., 19.10b0), but pre-releases weren't enabled (try: `--prerelease=allow`) "###); @@ -659,7 +659,7 @@ async fn msgraph_sdk() -> Result<()> { .unwrap_err(); assert_snapshot!(err, @r###" - Because only msgraph-core<1.0.0a2 is available and msgraph-sdk==1.0.0 depends on msgraph-core>=1.0.0a2, we can conclude that msgraph-sdk==1.0.0 cannot be used. + Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("msgraph-sdk"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("msgraph-core"), None, None), Range { segments: [(Included("1.0.0a2"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("msgraph-sdk"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("msgraph-core"), None, None), Range { segments: [(Included("1.0.0a2"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("msgraph-sdk"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because only msgraph-core<1.0.0a2 is available and msgraph-sdk==1.0.0 depends on msgraph-core>=1.0.0a2, we can conclude that msgraph-sdk==1.0.0 cannot be used. And because you require msgraph-sdk==1.0.0, we can conclude that the requirements are unsatisfiable. hint: msgraph-core was requested with a pre-release marker (e.g., msgraph-core>=1.0.0a2), but pre-releases weren't enabled (try: `--prerelease=allow`) diff --git a/crates/puffin/tests/pip_compile.rs b/crates/puffin/tests/pip_compile.rs index 35ca1056d..4fe617bf9 100644 --- a/crates/puffin/tests/pip_compile.rs +++ b/crates/puffin/tests/pip_compile.rs @@ -687,9 +687,23 @@ fn compile_python_37() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the requested Python version (3.7.17) does not satisfy - Python>=3.8 and black==23.10.1 depends on Python>=3.8, we can conclude - that black==23.10.1 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + })}, shared_id: None, cause1: Derived(Derived { terms: + {Package(PackageName("black"), None, None): Positive(Range { + segments: [(Included("23.10.1"), Included("23.10.1"))] })}, + shared_id: None, cause1: External(NoVersions(Python(Target), + Range { segments: [(Included("3.8"), Unbounded)] })), cause2: + External(FromDependencyOf(Package(PackageName("black"), None, None), + Range { segments: [(Included("23.10.1"), Included("23.10.1"))] }, + Python(Target), Range { segments: [(Included("3.8"), Unbounded)] + })) }), cause2: External(FromDependencyOf(Root(None), Range + { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Package(PackageName("black"), None, None), Range { segments: + [(Included("23.10.1"), Included("23.10.1"))] })) })Because the requested + Python version (3.7.17) does not satisfy Python>=3.8 and black==23.10.1 + depends on Python>=3.8, we can conclude that black==23.10.1 cannot be + used. And because you require black==23.10.1, we can conclude that the requirements are unsatisfiable. "###); @@ -1442,8 +1456,27 @@ fn conflicting_direct_url_dependency() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there is no version of werkzeug==3.0.0 and you require - werkzeug==3.0.0, we can conclude that the requirements are + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: + [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: + None, cause1: External(NoVersions(Package(PackageName("werkzeug"), + None, Some(VerbatimUrl { url: Url { scheme: "https", + cannot_be_a_base: false, username: "", password: None, host: + Some(Domain("files.pythonhosted.org")), port: None, path: + "/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl", + query: None, fragment: None }, given: + Some("https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl") + })), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] + })), cause2: External(FromDependencyOf(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Package(PackageName("werkzeug"), None, Some(VerbatimUrl { url: Url + { scheme: "https", cannot_be_a_base: false, username: "", password: + None, host: Some(Domain("files.pythonhosted.org")), port: None, path: + "/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl", + query: None, fragment: None }, given: + Some("https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl") + })), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] + })) })Because there is no version of werkzeug==3.0.0 and you + require werkzeug==3.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -1519,7 +1552,12 @@ fn conflicting_repeated_url_dependency_version_mismatch() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ root dependencies are unusable: Conflicting URLs for package `werkzeug`: + ╰─▶ External(UnusableDependencies(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + }, Some("Conflicting URLs for package `werkzeug`:\n- + https://files.pythonhosted.org/packages/bd/24/11c3ea5a7e866bf2d97f0501d0b4b1c9bbeade102bb4b588f0d2919a5212/Werkzeug-2.0.1-py3-none-any.whl\n- + https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl")))root + dependencies are unusable: Conflicting URLs for package `werkzeug`: - https://files.pythonhosted.org/packages/bd/24/11c3ea5a7e866bf2d97f0501d0b4b1c9bbeade102bb4b588f0d2919a5212/Werkzeug-2.0.1-py3-none-any.whl - https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl "###); @@ -1559,7 +1597,12 @@ fn conflicting_repeated_url_dependency_version_match() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ root dependencies are unusable: Conflicting URLs for package `werkzeug`: + ╰─▶ External(UnusableDependencies(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + }, Some("Conflicting URLs for package `werkzeug`:\n- + git+https://github.com/pallets/werkzeug.git@2.0.0\n- + https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl")))root + dependencies are unusable: Conflicting URLs for package `werkzeug`: - git+https://github.com/pallets/werkzeug.git@2.0.0 - https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl "###); @@ -1597,8 +1640,29 @@ fn conflicting_transitive_url_dependency() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because flask==3.0.0 depends on werkzeug>=3.0.0 and only werkzeug<3.0.0 - is available, we can conclude that flask==3.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + })}, shared_id: None, cause1: Derived(Derived { terms: + {Package(PackageName("flask"), None, None): Positive(Range { segments: + [(Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, + cause1: External(FromDependencyOf(Package(PackageName("flask"), + None, None), Range { segments: [(Included("3.0.0"), + Included("3.0.0"))] }, Package(PackageName("werkzeug"), None, + None), Range { segments: [(Included("3.0.0"), Unbounded)] })), + cause2: External(NoVersions(Package(PackageName("werkzeug"), + None, Some(VerbatimUrl { url: Url { scheme: "https", + cannot_be_a_base: false, username: "", password: None, host: + Some(Domain("files.pythonhosted.org")), port: None, path: + "/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl", + query: None, fragment: None }, given: + Some("https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl") + })), Range { segments: [(Included("3.0.0"), Unbounded)] })) + }), cause2: External(FromDependencyOf(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Package(PackageName("flask"), None, None), Range { segments: + [(Included("3.0.0"), Included("3.0.0"))] })) })Because flask==3.0.0 + depends on werkzeug>=3.0.0 and only werkzeug<3.0.0 is available, we can + conclude that flask==3.0.0 cannot be used. And because you require flask==3.0.0, we can conclude that the requirements are unsatisfiable. "###); @@ -1903,8 +1967,12 @@ dependencies = ["django==5.0b1", "django==5.0a1"] ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ my-project dependencies are unusable: Conflicting versions for `django`: - `django==5.0b1` does not intersect with `django==5.0a1` + ╰─▶ External(UnusableDependencies(Root(Some(PackageName("my-project"))), + Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Some("Conflicting versions for `django`: `django==5.0b1` does not + intersect with `django==5.0a1`")))my-project dependencies are unusable: + Conflicting versions for `django`: `django==5.0b1` does not intersect + with `django==5.0a1` "###); }); @@ -1949,9 +2017,17 @@ dependencies = ["django==300.1.4"] ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there is no version of django==300.1.4 and my-project - depends on django==300.1.4, we can conclude that the requirements are - unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(Some(PackageName("my-project"))): + Positive(Range { segments: [(Included("0a0.dev0"), + Included("0a0.dev0"))] })}, shared_id: None, cause1: + External(NoVersions(Package(PackageName("django"), None, None), Range + { segments: [(Included("300.1.4"), Included("300.1.4"))] })), cause2: + External(FromDependencyOf(Root(Some(PackageName("my-project"))), + Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + }, Package(PackageName("django"), None, None), Range { segments: + [(Included("300.1.4"), Included("300.1.4"))] })) })Because there is no + version of django==300.1.4 and my-project depends on django==300.1.4, we + can conclude that the requirements are unsatisfiable. "###); }); @@ -2412,9 +2488,17 @@ fn compile_yanked_version_indirect() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of attrs that satisfy attrs>20.3.0,<21.2.0 - and you require attrs>20.3.0,<21.2.0, we can conclude that the - requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: + [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, + cause1: External(NoVersions(Package(PackageName("attrs"), None, + None), Range { segments: [(Excluded("20.3.0"), Excluded("21.2.0"))] + })), cause2: External(FromDependencyOf(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Package(PackageName("attrs"), None, None), Range { segments: + [(Excluded("20.3.0"), Excluded("21.2.0"))] })) })Because there are no + versions of attrs that satisfy attrs>20.3.0,<21.2.0 and you require + attrs>20.3.0,<21.2.0, we can conclude that the requirements are + unsatisfiable. "###); }); diff --git a/crates/puffin/tests/pip_compile_scenarios.rs b/crates/puffin/tests/pip_compile_scenarios.rs index 5773254a1..8a8324f5f 100644 --- a/crates/puffin/tests/pip_compile_scenarios.rs +++ b/crates/puffin/tests/pip_compile_scenarios.rs @@ -128,7 +128,7 @@ fn requires_compatible_python_version_incompatible_override() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the requested Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.10"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Target), Range { segments: [(Included("3.10"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because the requested Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -191,7 +191,7 @@ fn requires_incompatible_python_version_compatible_override_no_wheels() -> Resul ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Installed), Range { segments: [(Included("3.10"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Installed), Range { segments: [(Included("3.10"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -320,7 +320,7 @@ fn requires_incompatible_python_version_compatible_override_other_wheel() -> Res ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Installed), Range { segments: [(Included("3.10"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Installed), Range { segments: [(Included("3.10"), Unbounded)] })) }) }), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }, Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })) }) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. And because there are no versions of albatross that satisfy any of: albatross<1.0.0 albatross>1.0.0,<2.0.0 diff --git a/crates/puffin/tests/pip_install.rs b/crates/puffin/tests/pip_install.rs index 09c49d208..137db4538 100644 --- a/crates/puffin/tests/pip_install.rs +++ b/crates/puffin/tests/pip_install.rs @@ -80,9 +80,32 @@ fn no_solution() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only flask<=3.0.0 is available and flask==3.0.0 depends - on werkzeug>=3.0.0, we can conclude that flask>=3.0.0 depends on - werkzeug>=3.0.0. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: + [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: + None, cause1: Derived(Derived { terms: {Root(None): Positive(Range + { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), + Package(PackageName("werkzeug"), None, None): Negative(Range { + segments: [(Included("3.0.0"), Unbounded)] })}, shared_id: None, + cause1: Derived(Derived { terms: {Package(PackageName("flask"), None, + None): Positive(Range { segments: [(Included("3.0.0"), Unbounded)] + }), Package(PackageName("werkzeug"), None, None): Negative(Range + { segments: [(Included("3.0.0"), Unbounded)] })}, shared_id: None, + cause1: External(NoVersions(Package(PackageName("flask"), None, + None), Range { segments: [(Excluded("3.0.0"), Unbounded)] })), + cause2: External(FromDependencyOf(Package(PackageName("flask"), + None, None), Range { segments: [(Included("3.0.0"), + Included("3.0.0"))] }, Package(PackageName("werkzeug"), None, + None), Range { segments: [(Included("3.0.0"), Unbounded)] + })) }), cause2: External(FromDependencyOf(Root(None), Range + { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] + }, Package(PackageName("flask"), None, None), Range + { segments: [(Included("3.0.0"), Unbounded)] })) }), + cause2: External(FromDependencyOf(Root(None), Range { + segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, + Package(PackageName("werkzeug"), None, None), Range { segments: + [(Unbounded, Excluded("1.0.0"))] })) })Because only flask<=3.0.0 is + available and flask==3.0.0 depends on werkzeug>=3.0.0, we can conclude + that flask>=3.0.0 depends on werkzeug>=3.0.0. And because you require flask>=3.0.0 and you require werkzeug<1.0.0, we can conclude that the requirements are unsatisfiable. "###); diff --git a/crates/puffin/tests/pip_install_scenarios.rs b/crates/puffin/tests/pip_install_scenarios.rs index 2c046e86f..0fa879dcb 100644 --- a/crates/puffin/tests/pip_install_scenarios.rs +++ b/crates/puffin/tests/pip_install_scenarios.rs @@ -135,7 +135,7 @@ fn requires_exact_version_does_not_exist() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there is no version of albatross==2.0.0 and you require albatross==2.0.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })) })Because there is no version of albatross==2.0.0 and you require albatross==2.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -191,7 +191,7 @@ fn requires_greater_version_does_not_exist() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross<=1.0.0 is available and you require albatross>1.0.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("1.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("1.0.0"), Unbounded)] })) })Because only albatross<=1.0.0 is available and you require albatross>1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -248,7 +248,7 @@ fn requires_less_version_does_not_exist() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross>=2.0.0 is available and you require albatross<2.0.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("2.0.0"))] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("2.0.0"))] })) })Because only albatross>=2.0.0 is available and you require albatross<2.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -358,7 +358,7 @@ fn excluded_only_version() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross==1.0.0 is available and you require one of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) })Because only albatross==1.0.0 is available and you require one of: albatross<1.0.0 albatross>1.0.0 we can conclude that the requirements are unsatisfiable. @@ -434,7 +434,7 @@ fn excluded_only_compatible_version() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of albatross that satisfy any of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0")), (Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0")), (Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Excluded("3.0.0")), (Excluded("3.0.0"), Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0")), (Excluded("2.0.0"), Excluded("3.0.0")), (Excluded("3.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Excluded("3.0.0"))] })) })Because there are no versions of albatross that satisfy any of: albatross<1.0.0 albatross>1.0.0,<2.0.0 albatross>2.0.0,<3.0.0 @@ -551,7 +551,7 @@ fn dependency_excludes_range_of_compatible_versions() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of albatross that satisfy any of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0")), (Included("3.0.0"), Included("3.0.0"))] }), Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Negative(Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }), Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("3.0.0"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0")), (Excluded("3.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Negative(Range { segments: [(Unbounded, Excluded("2.0.0")), (Included("3.0.0"), Unbounded)] }), Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: External(FromDependencyOf(Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Unbounded)] })), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Negative(Range { segments: [(Unbounded, Excluded("2.0.0"))] }), Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("crow"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("crow"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("2.0.0"))] })) }) }) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Excluded("3.0.0"))] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because there are no versions of albatross that satisfy any of: albatross<1.0.0 albatross>1.0.0,<2.0.0 albatross>3.0.0 @@ -684,7 +684,7 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<( ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of crow that satisfy any of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0")), (Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0")), (Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }), Package(PackageName("albatross"), None, None): Negative(Range { segments: [(Included("3.0.0"), Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("crow"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] }), Package(PackageName("albatross"), None, None): Negative(Range { segments: [(Unbounded, Excluded("2.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("crow"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0")), (Excluded("2.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("crow"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("2.0.0"))] })) }), cause2: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Excluded("2.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Excluded("2.0.0"))] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }) }), cause2: External(FromDependencyOf(Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Unbounded)] })) }), cause2: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("3.0.0"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("3.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] })) }) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Unbounded, Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Excluded("3.0.0"))] })) })Because there are no versions of crow that satisfy any of: crow<1.0.0 crow>1.0.0,<2.0.0 crow>2.0.0 @@ -971,7 +971,7 @@ fn extra_incompatible_with_extra() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross[extra-c]==1.0.0 is available and albatross[extra-c]==1.0.0 depends on bluebird==2.0.0, we can conclude that all versions of albatross[extra-c] depend on bluebird==2.0.0. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("albatross"), Some(ExtraName("extra-b")), None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), Some(ExtraName("extra-b")), None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("albatross"), Some(ExtraName("extra-c")), None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), Some(ExtraName("extra-b")), None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }), Package(PackageName("albatross"), Some(ExtraName("extra-c")), None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }), Package(PackageName("albatross"), Some(ExtraName("extra-c")), None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), Some(ExtraName("extra-c")), None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), Some(ExtraName("extra-c")), None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), Some(ExtraName("extra-b")), None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }), cause2: External(NoVersions(Package(PackageName("albatross"), Some(ExtraName("extra-b")), None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), Some(ExtraName("extra-c")), None), Range { segments: [(Unbounded, Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), Some(ExtraName("extra-b")), None), Range { segments: [(Unbounded, Unbounded)] })) })Because only albatross[extra-c]==1.0.0 is available and albatross[extra-c]==1.0.0 depends on bluebird==2.0.0, we can conclude that all versions of albatross[extra-c] depend on bluebird==2.0.0. And because albatross[extra-b]==1.0.0 depends on bluebird==1.0.0 and only albatross[extra-b]==1.0.0 is available, we can conclude that all versions of albatross[extra-b] and all versions of albatross[extra-c] are incompatible. And because you require albatross[extra-c] and you require albatross[extra-b], we can conclude that the requirements are unsatisfiable. "###); @@ -1113,7 +1113,7 @@ fn extra_incompatible_with_root() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because albatross[extra]==1.0.0 depends on bluebird==1.0.0 and only albatross[extra]==1.0.0 is available, we can conclude that all versions of albatross[extra] depend on bluebird==1.0.0. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), Some(ExtraName("extra")), None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(FromDependencyOf(Package(PackageName("albatross"), Some(ExtraName("extra")), None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })), cause2: External(NoVersions(Package(PackageName("albatross"), Some(ExtraName("extra")), None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), Some(ExtraName("extra")), None), Range { segments: [(Unbounded, Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })) })Because albatross[extra]==1.0.0 depends on bluebird==1.0.0 and only albatross[extra]==1.0.0 is available, we can conclude that all versions of albatross[extra] depend on bluebird==1.0.0. And because you require albatross[extra] and you require bluebird==2.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -1245,7 +1245,7 @@ fn direct_incompatible_versions() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ root dependencies are unusable: Conflicting versions for `albatross`: `albatross==1.0.0` does not intersect with `albatross==2.0.0` + ╰─▶ External(UnusableDependencies(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Some("Conflicting versions for `albatross`: `albatross==1.0.0` does not intersect with `albatross==2.0.0`")))root dependencies are unusable: Conflicting versions for `albatross`: `albatross==1.0.0` does not intersect with `albatross==2.0.0` "###); }); @@ -1310,7 +1310,7 @@ fn transitive_incompatible_with_root_version() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because albatross==1.0.0 depends on bluebird==2.0.0 and only albatross==1.0.0 is available, we can conclude that all versions of albatross depend on bluebird==2.0.0. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Negative(Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })), cause2: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because albatross==1.0.0 depends on bluebird==2.0.0 and only albatross==1.0.0 is available, we can conclude that all versions of albatross depend on bluebird==2.0.0. And because you require bluebird==1.0.0 and you require albatross, we can conclude that the requirements are unsatisfiable. "###); }); @@ -1381,7 +1381,7 @@ fn transitive_incompatible_with_transitive() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only bluebird==1.0.0 is available and bluebird==1.0.0 depends on crow==2.0.0, we can conclude that all versions of bluebird depend on crow==2.0.0. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("crow"), None, None): Negative(Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }), Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("bluebird"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) }), cause2: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Unbounded, Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because only bluebird==1.0.0 is available and bluebird==1.0.0 depends on crow==2.0.0, we can conclude that all versions of bluebird depend on crow==2.0.0. And because albatross==1.0.0 depends on crow==1.0.0 and only albatross==1.0.0 is available, we can conclude that all versions of bluebird and all versions of albatross are incompatible. And because you require bluebird and you require albatross, we can conclude that the requirements are unsatisfiable. "###); @@ -1499,7 +1499,7 @@ fn package_only_prereleases_in_range() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross<=0.1.0 is available and you require albatross>0.1.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("0.1.0"), Unbounded)] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("0.1.0"), Unbounded)] })) })Because only albatross<=0.1.0 is available and you require albatross>0.1.0, we can conclude that the requirements are unsatisfiable. hint: Pre-releases are available for albatross in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) "###); @@ -2062,7 +2062,7 @@ fn transitive_package_only_prereleases_in_range() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only bluebird<=0.1 is available and albatross==0.1.0 depends on bluebird>0.1, we can conclude that albatross==0.1.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("0.1.0")), (Excluded("0.1.0"), Unbounded)] })), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("0.1.0"), Included("0.1.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("bluebird"), None, None), Range { segments: [(Excluded("0.1"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("0.1.0"), Included("0.1.0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Excluded("0.1"), Unbounded)] })) }) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because only bluebird<=0.1 is available and albatross==0.1.0 depends on bluebird>0.1, we can conclude that albatross==0.1.0 cannot be used. And because only albatross==0.1.0 is available and you require albatross, we can conclude that the requirements are unsatisfiable. hint: Pre-releases are available for bluebird in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) @@ -2208,7 +2208,7 @@ fn transitive_prerelease_and_stable_dependency() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there is no version of crow==2.0.0b1 and albatross==1.0.0 depends on crow==2.0.0b1, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0b1"), Included("2.0.0b1"))] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0b1"), Included("2.0.0b1"))] })) }), cause2: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because there is no version of crow==2.0.0b1 and albatross==1.0.0 depends on crow==2.0.0b1, we can conclude that albatross==1.0.0 cannot be used. And because only albatross==1.0.0 is available and you require albatross, we can conclude that the requirements are unsatisfiable. hint: crow was requested with a pre-release marker (e.g., crow==2.0.0b1), but pre-releases weren't enabled (try: `--prerelease=allow`) @@ -2388,7 +2388,7 @@ fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only bluebird==1.0.0 is available and bluebird==1.0.0 depends on crow, we can conclude that all versions of bluebird depend on crow. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("crow"), None, None): Negative(Range { segments: [(Included("1.0.0"), Excluded("2.0.0b1"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("bluebird"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] }), Package(PackageName("crow"), None, None): Negative(Range { segments: [(Included("1.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("bluebird"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("bluebird"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Included("1.0.0"), Included("3.0.0"))] })) }), cause2: External(NoVersions(Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0b1"), Included("3.0.0"))] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Included("2.0.0b1"), Unbounded)] })) }), cause2: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("bluebird"), None, None), Range { segments: [(Unbounded, Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because only bluebird==1.0.0 is available and bluebird==1.0.0 depends on crow, we can conclude that all versions of bluebird depend on crow. And because only crow<2.0.0b1 is available, we can conclude that all versions of bluebird depend on crow<2.0.0b1. And because albatross==1.0.0 depends on crow>=2.0.0b1 and only albatross==1.0.0 is available, we can conclude that all versions of bluebird and all versions of albatross are incompatible. And because you require bluebird and you require albatross, we can conclude that the requirements are unsatisfiable. @@ -2482,7 +2482,7 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<( ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of crow that satisfy any of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Unbounded, Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("crow"), None, None), Range { segments: [(Excluded("1.0.0"), Excluded("2.0.0a5")), (Excluded("2.0.0a5"), Excluded("2.0.0a6")), (Excluded("2.0.0a6"), Excluded("2.0.0a7")), (Excluded("2.0.0a7"), Excluded("2.0.0b1")), (Excluded("2.0.0b1"), Excluded("2.0.0b5"))] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Package(PackageName("crow"), None, None), Range { segments: [(Excluded("1.0.0"), Excluded("2.0.0a5")), (Excluded("2.0.0a5"), Excluded("2.0.0a6")), (Excluded("2.0.0a6"), Excluded("2.0.0a7")), (Excluded("2.0.0a7"), Excluded("2.0.0b1")), (Excluded("2.0.0b1"), Excluded("2.0.0b5"))] })) }), cause2: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Excluded("1.0.0")), (Excluded("1.0.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Unbounded, Unbounded)] })) })Because there are no versions of crow that satisfy any of: crow>1.0.0,<2.0.0a5 crow>2.0.0a7,<2.0.0b1 crow>2.0.0b1,<2.0.0b5 @@ -2554,7 +2554,7 @@ fn requires_python_version_does_not_exist() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.7.17) does not satisfy Python>=4.0 and albatross==1.0.0 depends on Python>=4.0, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("4.0"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Target), Range { segments: [(Included("4.0"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because the current Python version (3.7.17) does not satisfy Python>=4.0 and albatross==1.0.0 depends on Python>=4.0, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -2611,7 +2611,7 @@ fn requires_python_version_less_than_current() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.18) does not satisfy Python<=3.8 and albatross==1.0.0 depends on Python<=3.8, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Unbounded, Included("3.8"))] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Target), Range { segments: [(Unbounded, Included("3.8"))] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because the current Python version (3.9.18) does not satisfy Python<=3.8 and albatross==1.0.0 depends on Python<=3.8, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -2668,7 +2668,7 @@ fn requires_python_version_greater_than_current() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.10"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] }, Python(Target), Range { segments: [(Included("3.10"), Unbounded)] })) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because the current Python version (3.9.18) does not satisfy Python>=3.10 and albatross==1.0.0 depends on Python>=3.10, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -2747,7 +2747,7 @@ fn requires_python_version_greater_than_current_many() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there is no version of albatross==1.0.0 and you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("1.0.0"), Included("1.0.0"))] })) })Because there is no version of albatross==1.0.0 and you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); @@ -2876,7 +2876,7 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.18) does not satisfy Python>=3.10,<3.11 and the current Python version (3.9.18) does not satisfy Python>=3.12, we can conclude that any of: + ╰─▶ Derived(Derived { terms: {Root(None): Positive(Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("2.0.0"), Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("2.0.0"), Excluded("4.0.0")), (Excluded("4.0.0"), Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("2.0.0"), Excluded("3.0.0")), (Excluded("3.0.0"), Excluded("4.0.0")), (Excluded("4.0.0"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Package(PackageName("albatross"), None, None), Range { segments: [(Excluded("2.0.0"), Excluded("3.0.0")), (Excluded("3.0.0"), Excluded("4.0.0")), (Excluded("4.0.0"), Unbounded)] })), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("2.0.0"), Included("2.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Python(Target): Positive(Range { segments: [(Included("3.10"), Unbounded)] })}, shared_id: None, cause1: Derived(Derived { terms: {Python(Target): Positive(Range { segments: [(Included("3.10"), Excluded("3.11")), (Included("3.12"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.10"), Excluded("3.11"))] })), cause2: External(NoVersions(Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })) }), cause2: External(NoVersions(Python(Target), Range { segments: [(Included("3.11"), Excluded("3.12"))] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("2.0.0"), Included("2.0.0"))] }, Python(Target), Range { segments: [(Included("3.10"), Unbounded)] })) }) }), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("3.0.0"), Included("3.0.0"))] })}, shared_id: None, cause1: Derived(Derived { terms: {Python(Target): Positive(Range { segments: [(Included("3.11"), Unbounded)] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.11"), Excluded("3.12"))] })), cause2: External(NoVersions(Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })) }), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("3.0.0"), Included("3.0.0"))] }, Python(Target), Range { segments: [(Included("3.11"), Unbounded)] })) }) }), cause2: Derived(Derived { terms: {Package(PackageName("albatross"), None, None): Positive(Range { segments: [(Included("4.0.0"), Included("4.0.0"))] })}, shared_id: None, cause1: External(NoVersions(Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })), cause2: External(FromDependencyOf(Package(PackageName("albatross"), None, None), Range { segments: [(Included("4.0.0"), Included("4.0.0"))] }, Python(Target), Range { segments: [(Included("3.12"), Unbounded)] })) }) }), cause2: External(FromDependencyOf(Root(None), Range { segments: [(Included("0a0.dev0"), Included("0a0.dev0"))] }, Package(PackageName("albatross"), None, None), Range { segments: [(Included("2.0.0"), Unbounded)] })) })Because the current Python version (3.9.18) does not satisfy Python>=3.10,<3.11 and the current Python version (3.9.18) does not satisfy Python>=3.12, we can conclude that any of: Python>=3.10,<3.11 Python>=3.12 are incompatible.