diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index b024b826cf1f9..1bbe9f26b7b63 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -624,7 +624,7 @@ impl ResolverState { debug!( @@ -633,6 +633,28 @@ impl ResolverState { + // Prefer solving forks with lower Python bounds, since they're more + // likely to produce solutions that work for forks with higher + // Python bounds (whereas the inverse is not true). + forks.sort_by(|a, b| { + a.cmp_requires_python(b) + .reverse() + .then_with(|| a.cmp_upper_bounds(b)) + }); + } + (ForkStrategy::RequiresPython, _) => { + // Otherwise, prefer solving forks with higher Python bounds, since + // we want to prioritize choosing the latest-compatible package + // version for each Python version. + forks.sort_by(|a, b| { + a.cmp_requires_python(b).then_with(|| a.cmp_upper_bounds(b)) + }); + } + } + for new_fork_state in self.forks_to_fork_states( state, &version, @@ -2907,11 +2929,6 @@ impl Dependencies { } else if forks.len() == 1 { ForkedDependencies::Unforked(forks.pop().unwrap().dependencies) } else { - // Prioritize the forks. Prefer solving forks with lower Python - // bounds, since they're more likely to produce solutions that work - // for forks with higher Python bounds (whereas the inverse is not - // true). - forks.sort(); ForkedDependencies::Forked { forks, diverging_packages: diverging_packages.into_iter().collect(), @@ -3224,57 +3241,57 @@ impl Fork { }); Some(self) } -} - -impl Eq for Fork {} - -impl PartialEq for Fork { - fn eq(&self, other: &Fork) -> bool { - self.dependencies == other.dependencies && self.env == other.env - } -} -impl Ord for Fork { - fn cmp(&self, other: &Self) -> Ordering { - // A higher `requires-python` requirement indicates a _lower-priority_ fork. We'd prefer - // to solve `<3.7` before solving `>=3.7`, since the resolution produced by the former might - // work for the latter, but the inverse is unlikely to be true. + /// Compare forks, preferring forks with g `requires-python` requirements. + fn cmp_requires_python(&self, other: &Self) -> Ordering { + // A higher `requires-python` requirement indicates a _higher-priority_ fork. + // + // This ordering ensures that we prefer choosing the highest version for each fork based on + // its `requires-python` requirement. + // + // The reverse would prefer choosing fewer versions, at the cost of using older package + // versions on newer Python versions. For example, if reversed, we'd prefer to solve `<3.7 + // before solving `>=3.7`, since the resolution produced by the former might work for the + // latter, but the inverse is unlikely to be true. let self_bound = self.env.requires_python().unwrap_or_default(); let other_bound = other.env.requires_python().unwrap_or_default(); + self_bound.lower().cmp(other_bound.lower()) + } - other_bound.lower().cmp(self_bound.lower()).then_with(|| { - // If there's no difference, prioritize forks with upper bounds. We'd prefer to solve - // `numpy <= 2` before solving `numpy >= 1`, since the resolution produced by the former - // might work for the latter, but the inverse is unlikely to be true due to maximum - // version selection. (Selecting `numpy==2.0.0` would satisfy both forks, but selecting - // the latest `numpy` would not.) - let self_upper_bounds = self - .dependencies - .iter() - .filter(|dep| { - dep.version - .bounding_range() - .is_some_and(|(_, upper)| !matches!(upper, Bound::Unbounded)) - }) - .count(); - let other_upper_bounds = other - .dependencies - .iter() - .filter(|dep| { - dep.version - .bounding_range() - .is_some_and(|(_, upper)| !matches!(upper, Bound::Unbounded)) - }) - .count(); - - self_upper_bounds.cmp(&other_upper_bounds) - }) + /// Compare forks, preferring forks with upper bounds. + fn cmp_upper_bounds(&self, other: &Self) -> Ordering { + // We'd prefer to solve `numpy <= 2` before solving `numpy >= 1`, since the resolution + // produced by the former might work for the latter, but the inverse is unlikely to be true + // due to maximum version selection. (Selecting `numpy==2.0.0` would satisfy both forks, but + // selecting the latest `numpy` would not.) + let self_upper_bounds = self + .dependencies + .iter() + .filter(|dep| { + dep.version + .bounding_range() + .is_some_and(|(_, upper)| !matches!(upper, Bound::Unbounded)) + }) + .count(); + let other_upper_bounds = other + .dependencies + .iter() + .filter(|dep| { + dep.version + .bounding_range() + .is_some_and(|(_, upper)| !matches!(upper, Bound::Unbounded)) + }) + .count(); + + self_upper_bounds.cmp(&other_upper_bounds) } } -impl PartialOrd for Fork { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) +impl Eq for Fork {} + +impl PartialEq for Fork { + fn eq(&self, other: &Fork) -> bool { + self.dependencies == other.dependencies && self.env == other.env } } diff --git a/crates/uv/tests/it/branching_urls.rs b/crates/uv/tests/it/branching_urls.rs index 1133065bfff09..fa51c98a1df04 100644 --- a/crates/uv/tests/it/branching_urls.rs +++ b/crates/uv/tests/it/branching_urls.rs @@ -131,7 +131,7 @@ fn root_package_splits_but_transitive_conflict() -> Result<()> { ----- stdout ----- ----- stderr ----- - error: Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version < '3.12'`: + error: Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version >= '3.12'`: - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl - https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl "### @@ -207,8 +207,8 @@ fn root_package_splits_transitive_too() -> Result<()> { version = 1 requires-python = ">=3.11, <3.13" resolution-markers = [ - "python_full_version < '3.12'", "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [options] @@ -402,8 +402,8 @@ fn root_package_splits_other_dependencies_too() -> Result<()> { version = 1 requires-python = ">=3.11, <3.13" resolution-markers = [ - "python_full_version < '3.12'", "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [options] @@ -563,8 +563,8 @@ fn branching_between_registry_and_direct_url() -> Result<()> { version = 1 requires-python = ">=3.11, <3.13" resolution-markers = [ - "python_full_version < '3.12'", "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [options] @@ -648,8 +648,8 @@ fn branching_urls_of_different_sources_disjoint() -> Result<()> { version = 1 requires-python = ">=3.11, <3.13" resolution-markers = [ - "python_full_version < '3.12'", "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [options] diff --git a/crates/uv/tests/it/lock.rs b/crates/uv/tests/it/lock.rs index 96ad223995266..6606340b9e9a2 100644 --- a/crates/uv/tests/it/lock.rs +++ b/crates/uv/tests/it/lock.rs @@ -1860,9 +1860,9 @@ fn lock_conditional_dependency_extra() -> Result<()> { version = 1 requires-python = ">=3.7" resolution-markers = [ + "python_full_version >= '3.10'", "python_full_version >= '3.8' and python_full_version < '3.10'", "python_full_version < '3.8'", - "python_full_version >= '3.10'", ] [options] @@ -2045,8 +2045,8 @@ fn lock_conditional_dependency_extra() -> Result<()> { version = "2.2.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.8' and python_full_version < '3.10'", "python_full_version >= '3.10'", + "python_full_version >= '3.8' and python_full_version < '3.10'", ] sdist = { url = "https://files.pythonhosted.org/packages/7a/50/7fd50a27caa0652cd4caf224aa87741ea41d3265ad13f010886167cfcc79/urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19", size = 291020 } wheels = [ @@ -2961,8 +2961,8 @@ fn lock_partial_git() -> Result<()> { version = 1 requires-python = ">=3.10" resolution-markers = [ - "python_full_version < '3.12'", "python_full_version >= '3.12'", + "python_full_version < '3.12'", ] [options] @@ -5143,10 +5143,10 @@ fn lock_python_version_marker_complement() -> Result<()> { version = 1 requires-python = ">=3.8" resolution-markers = [ - "python_full_version < '3.10'", - "python_full_version == '3.10'", - "python_full_version > '3.10' and python_full_version < '3.11'", "python_full_version >= '3.11'", + "python_full_version > '3.10' and python_full_version < '3.11'", + "python_full_version == '3.10'", + "python_full_version < '3.10'", ] [options] @@ -12481,9 +12481,9 @@ fn lock_narrowed_python_version() -> Result<()> { version = 1 requires-python = ">=3.7" resolution-markers = [ - "python_full_version < '3.9'", - "python_full_version >= '3.9' and python_full_version < '3.11'", "python_full_version >= '3.11'", + "python_full_version >= '3.9' and python_full_version < '3.11'", + "python_full_version < '3.9'", ] [options] @@ -13216,8 +13216,8 @@ fn lock_non_project_fork() -> Result<()> { version = 1 requires-python = ">=3.10" resolution-markers = [ - "python_full_version < '3.11'", "python_full_version >= '3.11'", + "python_full_version < '3.11'", ] [options] @@ -15752,9 +15752,9 @@ fn lock_python_upper_bound() -> Result<()> { version = 1 requires-python = ">=3.8" resolution-markers = [ - "python_full_version >= '3.13'", - "python_full_version < '3.9'", "python_full_version >= '3.9' and python_full_version < '3.13'", + "python_full_version < '3.9'", + "python_full_version >= '3.13'", ] [options] @@ -16983,8 +16983,8 @@ fn lock_change_requires_python() -> Result<()> { version = 1 requires-python = ">=3.12" resolution-markers = [ - "python_full_version < '3.13'", "python_full_version >= '3.13'", + "python_full_version < '3.13'", ] [options] @@ -17092,9 +17092,9 @@ fn lock_change_requires_python() -> Result<()> { version = 1 requires-python = ">=3.10" resolution-markers = [ - "python_full_version < '3.12'", - "python_full_version == '3.12.*'", "python_full_version >= '3.13'", + "python_full_version == '3.12.*'", + "python_full_version < '3.12'", ] [options] diff --git a/crates/uv/tests/it/lock_scenarios.rs b/crates/uv/tests/it/lock_scenarios.rs index c2edb01263cf5..39084b5bbcaac 100644 --- a/crates/uv/tests/it/lock_scenarios.rs +++ b/crates/uv/tests/it/lock_scenarios.rs @@ -887,9 +887,9 @@ fn fork_incomplete_markers() -> Result<()> { version = 1 requires-python = ">=3.8" resolution-markers = [ - "python_full_version < '3.10'", - "python_full_version == '3.10.*'", "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", ] [[package]] @@ -2957,9 +2957,9 @@ fn fork_overlapping_markers_basic() -> Result<()> { version = 1 requires-python = ">=3.8" resolution-markers = [ - "python_full_version < '3.10'", - "python_full_version == '3.10.*'", "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", ] [[package]] diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs index 0c22b6147a64d..4c203ce537263 100644 --- a/crates/uv/tests/it/pip_compile.rs +++ b/crates/uv/tests/it/pip_compile.rs @@ -7852,34 +7852,27 @@ fn universal_disjoint_base_or_local_requirement() -> Result<()> { ----- stdout ----- # This file was autogenerated by uv via the following command: # uv pip compile --cache-dir [CACHE_DIR] requirements.in --universal - cmake==3.28.4 ; (python_full_version < '3.11' and platform_machine != 'x86_64') or (python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'linux') - # via - # pytorch-triton-rocm - # triton + cmake==3.28.4 ; python_full_version >= '3.11' and python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' + # via triton . # via -r requirements.in filelock==3.13.1 # via - # pytorch-triton-rocm # torch # triton jinja2==3.1.3 # via torch - lit==18.1.2 ; (python_full_version < '3.11' and platform_machine != 'x86_64') or (python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'linux') - # via - # pytorch-triton-rocm - # triton + lit==18.1.2 ; python_full_version >= '3.11' and python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' + # via triton markupsafe==2.1.5 # via jinja2 mpmath==1.3.0 # via sympy networkx==3.2.1 # via torch - pytorch-triton-rocm==2.0.2 ; python_full_version < '3.11' - # via torch sympy==1.12 # via torch - torch==2.0.0+cpu ; python_full_version >= '3.13' + torch==2.0.0+cpu ; python_full_version < '3.11' or python_full_version >= '3.13' # via # -r requirements.in # example @@ -7888,18 +7881,13 @@ fn universal_disjoint_base_or_local_requirement() -> Result<()> { # -r requirements.in # example # triton - torch==2.0.0+rocm5.4.2 ; python_full_version < '3.11' - # via - # -r requirements.in - # example - # pytorch-triton-rocm triton==2.0.0 ; python_full_version >= '3.11' and python_full_version < '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' # via torch typing-extensions==4.10.0 # via torch ----- stderr ----- - Resolved 15 packages in [TIME] + Resolved 13 packages in [TIME] "### ); @@ -13221,9 +13209,7 @@ exceptiongroup==1.0.0rc8 # uv pip compile --cache-dir [CACHE_DIR] requirements.in -c constraints.txt --universal -p 3.10 alembic==1.8.1 # via -r requirements.in - astroid==2.13.5 ; python_full_version >= '3.11' - # via pylint - astroid==3.1.0 ; python_full_version < '3.11' + astroid==2.13.5 # via pylint asttokens==2.4.1 # via stack-data @@ -13251,7 +13237,7 @@ exceptiongroup==1.0.0rc8 # via pylint jedi==0.19.1 # via ipython - lazy-object-proxy==1.10.0 ; python_full_version >= '3.11' + lazy-object-proxy==1.10.0 # via astroid mako==1.3.2 # via alembic @@ -13275,9 +13261,7 @@ exceptiongroup==1.0.0rc8 # via stack-data pygments==2.17.2 # via ipython - pylint==2.15.8 ; python_full_version >= '3.11' - # via -r requirements.in - pylint==3.1.0 ; python_full_version < '3.11' + pylint==2.15.8 # via -r requirements.in six==1.16.0 # via asttokens @@ -13299,11 +13283,11 @@ exceptiongroup==1.0.0rc8 # sqlalchemy wcwidth==0.2.13 # via prompt-toolkit - wrapt==1.16.0 ; python_full_version >= '3.11' + wrapt==1.16.0 # via astroid ----- stderr ----- - Resolved 36 packages in [TIME] + Resolved 34 packages in [TIME] "###); Ok(()) @@ -13621,9 +13605,8 @@ fn negation_not_imply_prerelease() -> Result<()> { Ok(()) } -/// Perform a universal resolution with a constraint, where the constraint itself has a marker. #[test] -fn lowest_direct_fork() -> Result<()> { +fn lowest_direct_fork_min_python() -> Result<()> { let context = TestContext::new("3.10"); let requirements_in = context.temp_dir.child("requirements.in"); requirements_in.write_str(indoc::indoc! {r" @@ -13660,9 +13643,8 @@ fn lowest_direct_fork() -> Result<()> { Ok(()) } -/// Perform a universal resolution with a constraint, where the constraint itself has a marker. #[test] -fn lowest_fork() -> Result<()> { +fn lowest_fork_min_python() -> Result<()> { let context = TestContext::new("3.10"); let requirements_in = context.temp_dir.child("requirements.in"); requirements_in.write_str(indoc::indoc! {r" @@ -13700,6 +13682,74 @@ fn lowest_fork() -> Result<()> { Ok(()) } +#[test] +fn lowest_direct_fork_max_python() -> Result<()> { + let context = TestContext::new("3.10"); + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str(indoc::indoc! {r" + pycountry >= 22.1.10 + setuptools >= 50.0.0 ; python_version < '3.12' + "})?; + + uv_snapshot!(context.filters(), windows_filters=false, context.pip_compile() + .arg("requirements.in") + .arg("--universal") + .arg("--resolution") + .arg("lowest-direct"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + # This file was autogenerated by uv via the following command: + # uv pip compile --cache-dir [CACHE_DIR] requirements.in --universal --resolution lowest-direct + pycountry==22.1.10 + # via -r requirements.in + setuptools==50.0.0 + # via + # -r requirements.in + # pycountry + + ----- stderr ----- + Resolved 2 packages in [TIME] + "### + ); + + Ok(()) +} + +#[test] +fn lowest_fork_max_python() -> Result<()> { + let context = TestContext::new("3.10"); + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str(indoc::indoc! {r" + pycountry >= 22.1.10 + setuptools >= 50.0.0 ; python_version < '3.12' + "})?; + + uv_snapshot!(context.filters(), windows_filters=false, context.pip_compile() + .arg("requirements.in") + .arg("--universal") + .arg("--resolution") + .arg("lowest"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + # This file was autogenerated by uv via the following command: + # uv pip compile --cache-dir [CACHE_DIR] requirements.in --universal --resolution lowest + pycountry==22.1.10 + # via -r requirements.in + setuptools==50.0.0 + # via + # -r requirements.in + # pycountry + + ----- stderr ----- + Resolved 2 packages in [TIME] + "### + ); + + Ok(()) +} + /// See: #[test] fn same_version_multi_index_incompatibility() -> Result<()> { @@ -14073,3 +14123,139 @@ fn dynamic_version_source_dist() -> Result<()> { Ok(()) } + +#[test] +fn max_python_requirement() -> Result<()> { + static EXCLUDE_NEWER: &str = "2024-12-18T00:00:00Z"; + + let context = TestContext::new("3.8"); + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str(indoc::indoc! {r" + nox >=2024.04.15 + nox[uv] >=2024.03.02; python_version >= '3.8' + "})?; + + uv_snapshot!(context.filters(), windows_filters=false, context.pip_compile() + .env(EnvVars::UV_EXCLUDE_NEWER, EXCLUDE_NEWER) + .arg("requirements.in") + .arg("--fork-strategy") + .arg("requires-python") + .arg("--universal") + .arg("--python-version") + .arg("3.7"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + # This file was autogenerated by uv via the following command: + # uv pip compile --cache-dir [CACHE_DIR] requirements.in --fork-strategy requires-python --universal --python-version 3.7 + argcomplete==3.1.2 ; python_full_version < '3.8' + # via nox + argcomplete==3.5.2 ; python_full_version >= '3.8' + # via nox + colorama==0.4.6 ; sys_platform == 'win32' + # via colorlog + colorlog==6.9.0 + # via nox + distlib==0.3.9 + # via virtualenv + filelock==3.12.2 ; python_full_version < '3.8' + # via virtualenv + filelock==3.16.1 ; python_full_version >= '3.8' + # via virtualenv + importlib-metadata==6.7.0 ; python_full_version < '3.8' + # via + # argcomplete + # nox + # virtualenv + nox==2024.4.15 ; python_full_version < '3.8' + # via -r requirements.in + nox==2024.10.9 ; python_full_version >= '3.8' + # via -r requirements.in + packaging==24.0 ; python_full_version < '3.8' + # via nox + packaging==24.2 ; python_full_version >= '3.8' + # via nox + platformdirs==4.0.0 ; python_full_version < '3.8' + # via virtualenv + platformdirs==4.3.6 ; python_full_version >= '3.8' + # via virtualenv + tomli==2.0.1 ; python_full_version < '3.8' + # via nox + tomli==2.2.1 ; python_full_version >= '3.8' and python_full_version < '3.11' + # via nox + typing-extensions==4.7.1 ; python_full_version < '3.8' + # via + # importlib-metadata + # nox + # platformdirs + uv==0.5.10 ; python_full_version >= '3.8' + # via nox + virtualenv==20.26.6 ; python_full_version < '3.8' + # via nox + virtualenv==20.28.0 ; python_full_version >= '3.8' + # via nox + zipp==3.15.0 ; python_full_version < '3.8' + # via importlib-metadata + + ----- stderr ----- + warning: The requested Python version 3.7 is not available; 3.8.[X] will be used to build dependencies instead. + Resolved 21 packages in [TIME] + "### + ); + + uv_snapshot!(context.filters(), windows_filters=false, context.pip_compile() + .env(EnvVars::UV_EXCLUDE_NEWER, EXCLUDE_NEWER) + .arg("requirements.in") + .arg("--fork-strategy") + .arg("fewest") + .arg("--universal") + .arg("--python-version") + .arg("3.7"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + # This file was autogenerated by uv via the following command: + # uv pip compile --cache-dir [CACHE_DIR] requirements.in --fork-strategy fewest --universal --python-version 3.7 + argcomplete==3.1.2 + # via nox + colorama==0.4.6 ; sys_platform == 'win32' + # via colorlog + colorlog==6.9.0 + # via nox + distlib==0.3.9 + # via virtualenv + filelock==3.12.2 + # via virtualenv + importlib-metadata==6.7.0 ; python_full_version < '3.8' + # via + # argcomplete + # nox + # virtualenv + nox==2024.4.15 + # via -r requirements.in + packaging==24.0 + # via nox + platformdirs==4.0.0 + # via virtualenv + tomli==2.0.1 ; python_full_version < '3.11' + # via nox + typing-extensions==4.7.1 ; python_full_version < '3.8' + # via + # importlib-metadata + # nox + # platformdirs + uv==0.5.10 ; python_full_version >= '3.8' + # via nox + virtualenv==20.26.6 + # via nox + zipp==3.15.0 ; python_full_version < '3.8' + # via importlib-metadata + + ----- stderr ----- + warning: The requested Python version 3.7 is not available; 3.8.[X] will be used to build dependencies instead. + Resolved 14 packages in [TIME] + "### + ); + + Ok(()) +} diff --git a/crates/uv/tests/it/snapshots/it__ecosystem__github-wikidata-bot-lock-file.snap b/crates/uv/tests/it/snapshots/it__ecosystem__github-wikidata-bot-lock-file.snap index 63ab767b82c64..e3a7f3cfcf1aa 100644 --- a/crates/uv/tests/it/snapshots/it__ecosystem__github-wikidata-bot-lock-file.snap +++ b/crates/uv/tests/it/snapshots/it__ecosystem__github-wikidata-bot-lock-file.snap @@ -5,8 +5,8 @@ expression: lock version = 1 requires-python = ">=3.12" resolution-markers = [ - "python_full_version < '3.13'", "python_full_version >= '3.13'", + "python_full_version < '3.13'", ] [options] diff --git a/crates/uv/tests/it/snapshots/it__ecosystem__transformers-lock-file.snap b/crates/uv/tests/it/snapshots/it__ecosystem__transformers-lock-file.snap index 925bc19dce816..eb785d0fba21f 100644 --- a/crates/uv/tests/it/snapshots/it__ecosystem__transformers-lock-file.snap +++ b/crates/uv/tests/it/snapshots/it__ecosystem__transformers-lock-file.snap @@ -5,21 +5,21 @@ expression: lock version = 1 requires-python = ">=3.9.0" resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", - "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version == '3.10.*' and sys_platform == 'darwin'", - "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", - "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", - "python_full_version == '3.12.*' and sys_platform == 'darwin'", - "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", - "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux')", "python_full_version >= '3.13' and sys_platform == 'darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.10.*' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", ] [options] @@ -888,6 +888,11 @@ wheels = [ name = "etils" version = "1.5.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", +] sdist = { url = "https://files.pythonhosted.org/packages/ad/fa/8637c95271dd9eed00e258184295dd00ba163bb8924ba3be978ec89f093f/etils-1.5.2.tar.gz", hash = "sha256:ba6a3e1aff95c769130776aa176c11540637f5dd881f3b79172a5149b6b1c446", size = 87021 } wheels = [ { url = "https://files.pythonhosted.org/packages/0f/6a/d2aaebacf73d5da7126c632ec0d9dc2df99cc4bbd259bad48904a034fc1b/etils-1.5.2-py3-none-any.whl", hash = "sha256:6dc882d355e1e98a5d1a148d6323679dc47c9a5792939b9de72615aa4737eb0b", size = 140603 }, @@ -895,13 +900,69 @@ wheels = [ [package.optional-dependencies] epath = [ - { name = "fsspec" }, - { name = "importlib-resources" }, - { name = "typing-extensions" }, - { name = "zipp" }, + { name = "fsspec", marker = "python_full_version < '3.10'" }, + { name = "importlib-resources", marker = "python_full_version < '3.10'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, + { name = "zipp", marker = "python_full_version < '3.10'" }, ] epy = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] + +[[package]] +name = "etils" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.10.*' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +sdist = { url = "https://files.pythonhosted.org/packages/99/bc/cfb52b9e8531526604afe8666185d207e4f0cb9c6d90bc76f62fb8746804/etils-1.7.0.tar.gz", hash = "sha256:97b68fd25e185683215286ef3a54e38199b6245f5fe8be6bedc1189be4256350", size = 95695 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/10/dd5b124f037a636783e416a2fe839edd7ec63c0dce7ce4f3c1da029aeb80/etils-1.7.0-py3-none-any.whl", hash = "sha256:61af8f7c242171de15e22e5da02d527cb9e677d11f8bcafe18fcc3548eee3e60", size = 152401 }, +] + +[package.optional-dependencies] +epath = [ + { name = "fsspec", marker = "python_full_version == '3.10.*'" }, + { name = "importlib-resources", marker = "python_full_version == '3.10.*'" }, + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, + { name = "zipp", marker = "python_full_version == '3.10.*'" }, +] +epy = [ + { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, +] + +[[package]] +name = "etils" +version = "1.9.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/49/d480aeb4fc441d933acce97261bea002234a45fb847599c9a93c31e51b2e/etils-1.9.2.tar.gz", hash = "sha256:15dcd35ac0c0cc2404b46ac0846af3cc4e876fd3d80f36f57951e27e8b9d6379", size = 101506 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/305f3ea85aecd23422c606c179fb6d00bd7d255b10d55b4c797a3a680144/etils-1.9.2-py3-none-any.whl", hash = "sha256:ecd79de1fbfea9b0d6924756cfa922b05ed3360c45cf2170767da4bee0001d20", size = 161470 }, +] + +[package.optional-dependencies] +epath = [ + { name = "fsspec", marker = "python_full_version >= '3.11'" }, + { name = "importlib-resources", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "zipp", marker = "python_full_version >= '3.11'" }, +] +epy = [ + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] [[package]] @@ -1548,7 +1609,8 @@ dependencies = [ { name = "ml-dtypes" }, { name = "numpy" }, { name = "opt-einsum" }, - { name = "scipy" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1e/f2/03643b515aede51a812608e3fe37cbc30426241e512bb0fb8546c36ddd5b/jax-0.4.13.tar.gz", hash = "sha256:03bfe6749dfe647f16f15f6616638adae6c4a7ca7167c75c21961ecfd3a3baaa", size = 1312396 } @@ -1559,7 +1621,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ml-dtypes" }, { name = "numpy" }, - { name = "scipy" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/5b/3d/e6ec561f4d6dc822abbc86b6d2adb36753d6b3ba25dff2fa00cb7d7b941c/jaxlib-0.4.13-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:532ebc4fb11386282ad63b83941d4557f4038c1144acf026f1f8565f64c7e9c0", size = 75002669 }, @@ -1759,7 +1822,8 @@ dependencies = [ { name = "numpy" }, { name = "pooch" }, { name = "scikit-learn" }, - { name = "scipy" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "soundfile" }, { name = "soxr" }, { name = "typing-extensions" }, @@ -2203,11 +2267,39 @@ wheels = [ name = "networkx" version = "3.2.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", +] sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928 } wheels = [ { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772 }, ] +[[package]] +name = "networkx" +version = "3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.10.*' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +sdist = { url = "https://files.pythonhosted.org/packages/04/e6/b164f94c869d6b2c605b5128b7b0cfe912795a87fc90e78533920001f3ec/networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9", size = 2126579 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/e9/5f72929373e1a0e8d142a130f3f97e6ff920070f87f91c4e13e40e0fba5a/networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2", size = 1702396 }, +] + [[package]] name = "ninja" version = "1.11.1.1" @@ -2617,7 +2709,9 @@ version = "0.5.16" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "absl-py" }, - { name = "etils", extra = ["epath", "epy"] }, + { name = "etils", version = "1.5.2", source = { registry = "https://pypi.org/simple" }, extra = ["epath", "epy"], marker = "python_full_version < '3.10'" }, + { name = "etils", version = "1.7.0", source = { registry = "https://pypi.org/simple" }, extra = ["epath", "epy"], marker = "python_full_version == '3.10.*'" }, + { name = "etils", version = "1.9.2", source = { registry = "https://pypi.org/simple" }, extra = ["epath", "epy"], marker = "python_full_version >= '3.11'" }, { name = "jax" }, { name = "jaxlib" }, { name = "msgpack" }, @@ -3896,7 +3990,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, { name = "numpy" }, - { name = "scipy" }, + { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "scipy", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "threadpoolctl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/92/72/2961b9874a9ddf2b0f95f329d4e67f67c3301c1d88ba5e239ff25661bb85/scikit_learn-1.5.1.tar.gz", hash = "sha256:0ea5d40c0e3951df445721927448755d3fe1d80833b0b7308ebff5d2a45e6414", size = 6958368 } @@ -3927,8 +4022,13 @@ wheels = [ name = "scipy" version = "1.13.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version < '3.10' and platform_machine != 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and sys_platform != 'darwin' and sys_platform != 'linux')", +] dependencies = [ - { name = "numpy" }, + { name = "numpy", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } wheels = [ @@ -3958,6 +4058,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, ] +[[package]] +name = "scipy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform == 'darwin'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version >= '3.13' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux')", + "python_full_version == '3.10.*' and sys_platform == 'darwin'", + "python_full_version == '3.10.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.10.*' and sys_platform != 'darwin' and sys_platform != 'linux')", +] +dependencies = [ + { name = "numpy", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/e5/0230da034a2e1b1feb32621d7cd57c59484091d6dccc9e6b855b0d309fc9/scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b", size = 58618870 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/90/face72921ce52d74880b380e6f86b3caa6c65766c5808fbe179e208b9c6d/scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484", size = 39120226 }, + { url = "https://files.pythonhosted.org/packages/6e/a1/0093566d31ae662e942d4079e2a4dea4256723bf3d072ae67f5ba41aee0d/scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6", size = 29866893 }, + { url = "https://files.pythonhosted.org/packages/52/21/05a182fb405a53dfbdf6415308bf185677e89188bc2206de011a3653f48e/scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7", size = 23076258 }, + { url = "https://files.pythonhosted.org/packages/5c/63/9954d14012a2f4aff4570f1aaf076d7f65f3fc246ae4483b765488d57d51/scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1", size = 25454715 }, + { url = "https://files.pythonhosted.org/packages/57/b8/ca969a99d34956c6546cbb9ea3f863a387009f68cdbad13cdb07db0cc23d/scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0", size = 35569038 }, + { url = "https://files.pythonhosted.org/packages/e2/20/15c8fe0dfebb6facd81b3d08bf45dfa080e305deb17172b0a40eba59e927/scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0", size = 41135959 }, + { url = "https://files.pythonhosted.org/packages/df/a2/8721f93fbf98a69067d20bdfded36a7de2a3d811f192edba9eeefbde61b8/scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d", size = 41118514 }, + { url = "https://files.pythonhosted.org/packages/a3/0c/82c1330c08f31d61142d38cb9a185e01c2403c990d10dab208032e62d0fa/scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359", size = 44763252 }, + { url = "https://files.pythonhosted.org/packages/10/55/d6096721c0f0d7e7369da9660a854c14e6379ab7aba603ea5d492d77fa23/scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e", size = 39129318 }, + { url = "https://files.pythonhosted.org/packages/56/95/1a3a04b5facab8287325ad2335dbb6b78b98d73690c832099c9c498f7a4d/scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb", size = 29880413 }, + { url = "https://files.pythonhosted.org/packages/8b/d2/78e3342f5db363ddf92de84007d43e47c8bb24363bd509e1b75a5102a25d/scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf", size = 23089804 }, + { url = "https://files.pythonhosted.org/packages/6a/d6/db686519059afb367e5a06935556b50fa422d792a658ce071f4527c785bf/scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86", size = 25479561 }, + { url = "https://files.pythonhosted.org/packages/6c/bb/f44e22697740893ffa84239ca3766bdb908c1c7135ebb272d5bd4bdc33e2/scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8", size = 35558723 }, + { url = "https://files.pythonhosted.org/packages/89/bb/80c9c98d887c855710fd31fc5ae5574133e98203b3475b07579251803662/scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74", size = 41132874 }, + { url = "https://files.pythonhosted.org/packages/c4/c6/b7a0774808a0f65bd3bba4558c8d6b90c24e852656087045a0a7ada24868/scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb", size = 41073588 }, + { url = "https://files.pythonhosted.org/packages/91/1d/0484130df7e33e044da88a091827d6441b77f907075bf7bbe145857d6590/scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc", size = 44749773 }, + { url = "https://files.pythonhosted.org/packages/50/51/3aa6bcde60dec542c6b8363b6a871b02827a41f01ab9c0c9324464f8c4cd/scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9", size = 39176568 }, + { url = "https://files.pythonhosted.org/packages/5c/76/f2b91ea2d2b76504e845699271be9c0ca3492770614fb6b911fb517023de/scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4", size = 29925587 }, + { url = "https://files.pythonhosted.org/packages/09/70/5e756d3f90fe3fff64d1550db0fa6bb9eb76eedd084c568618f93441f08c/scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0", size = 23134915 }, + { url = "https://files.pythonhosted.org/packages/f2/1e/41e1a295dc54d21f6a6b2ff5e85e398b5aea076cf69fdedbc943b9c73b2d/scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f", size = 25556831 }, + { url = "https://files.pythonhosted.org/packages/24/0e/c7812fbfa1e29e26cd28c6972be43e3fe49427c5f1663c4b992c431e247d/scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209", size = 35295529 }, + { url = "https://files.pythonhosted.org/packages/9b/00/ce54410e344b3a6032cd42ed53fe425cf57a66d28e337670292bbb419ebc/scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14", size = 40785123 }, + { url = "https://files.pythonhosted.org/packages/45/ed/75f5d318cf7af841835cec9534704d3a4cb6a96460677f05466c928790a7/scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159", size = 40704660 }, + { url = "https://files.pythonhosted.org/packages/3f/72/305686527c68f33f1dd3ebdd28f53340d372b2f9e44dccaf6f92e17739d3/scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20", size = 44475988 }, +] + [[package]] name = "segments" version = "2.2.1" @@ -4694,7 +4843,8 @@ dependencies = [ { name = "filelock" }, { name = "fsspec" }, { name = "jinja2" }, - { name = "networkx" }, + { name = "networkx", version = "3.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, + { name = "networkx", version = "3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, diff --git a/crates/uv/tests/it/snapshots/it__ecosystem__transformers-uv-lock-output.snap b/crates/uv/tests/it/snapshots/it__ecosystem__transformers-uv-lock-output.snap index a906748312d44..2a7888962b07a 100644 --- a/crates/uv/tests/it/snapshots/it__ecosystem__transformers-uv-lock-output.snap +++ b/crates/uv/tests/it/snapshots/it__ecosystem__transformers-uv-lock-output.snap @@ -7,4 +7,4 @@ exit_code: 0 ----- stdout ----- ----- stderr ----- -Resolved 281 packages in [TIME] +Resolved 285 packages in [TIME] diff --git a/crates/uv/tests/it/snapshots/it__workflow__jax_instability-2.snap b/crates/uv/tests/it/snapshots/it__workflow__jax_instability-2.snap index 28f3f0c16eefb..54b71172a324d 100644 --- a/crates/uv/tests/it/snapshots/it__workflow__jax_instability-2.snap +++ b/crates/uv/tests/it/snapshots/it__workflow__jax_instability-2.snap @@ -1,14 +1,14 @@ --- -source: crates/uv/tests/workflow.rs +source: crates/uv/tests/it/workflow.rs expression: lock --- version = 1 requires-python = ">=3.9.0" resolution-markers = [ - "python_full_version < '3.10'", - "python_full_version == '3.10.*'", - "python_full_version == '3.11.*'", "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", + "python_full_version == '3.10.*'", + "python_full_version < '3.10'", ] [options]