From c7945318c4201e93a32645da2535f21059706d58 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 13:29:59 -0400 Subject: [PATCH 01/15] uv/tests: add regression tests These are regression tests for #6269, #6412 and #6836. In this commit, their test outputs are all wrong. We'll update these snapshots after fixing the underlying bug by refactoring how `requires-python` simplification works. --- crates/uv/tests/pip_compile.rs | 247 +++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index b78004d14bb6..7d00349969a1 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12035,3 +12035,250 @@ fn compile_requires_txt() -> Result<()> { Ok(()) } + +/// Regression test for: +#[test] +fn astroid_not_repeated() -> Result<()> { + let context = TestContext::new("3.12"); + + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str( + "\ +alembic==1.8.1 +ipython>=8.4.0 +pylint>=2.14.5 + ", + )?; + + let constraints_txt = context.temp_dir.child("constraints.txt"); + constraints_txt.write_str( + "\ +dill==0.3.1.1 +exceptiongroup==1.0.0rc8 + ", + )?; + + uv_snapshot!(context + .pip_compile() + .arg("requirements.in") + .arg("-c").arg("constraints.txt") + .arg("--universal") + .arg("-p").arg("3.10"), @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 -c constraints.txt --universal -p 3.10 + alembic==1.8.1 + # via -r requirements.in + astroid==2.13.5 + # via pylint + astroid==3.1.0 ; python_full_version < '3.11' + # via pylint + asttokens==2.4.1 + # via stack-data + colorama==0.4.6 ; sys_platform == 'win32' + # via + # ipython + # pylint + decorator==5.1.1 + # via ipython + dill==0.3.1.1 + # via + # -c constraints.txt + # pylint + exceptiongroup==1.0.0rc8 ; python_full_version < '3.11' + # via + # -c constraints.txt + # ipython + executing==2.0.1 + # via stack-data + greenlet==3.0.3 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64' + # via sqlalchemy + ipython==8.22.2 + # via -r requirements.in + isort==5.13.2 + # via pylint + jedi==0.19.1 + # via ipython + lazy-object-proxy==1.10.0 + # via astroid + mako==1.3.2 + # via alembic + markupsafe==2.1.5 + # via mako + matplotlib-inline==0.1.6 + # via ipython + mccabe==0.7.0 + # via pylint + parso==0.8.3 + # via jedi + pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' + # via ipython + platformdirs==4.2.0 + # via pylint + prompt-toolkit==3.0.43 + # via ipython + ptyprocess==0.7.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' + # via pexpect + pure-eval==0.2.2 + # via stack-data + pygments==2.17.2 + # via ipython + pylint==2.15.8 + # via -r requirements.in + pylint==3.1.0 ; python_full_version < '3.11' + # via -r requirements.in + six==1.16.0 + # via asttokens + sqlalchemy==2.0.29 + # via alembic + stack-data==0.6.3 + # via ipython + tomli==2.0.1 ; python_full_version < '3.11' + # via pylint + tomlkit==0.12.4 + # via pylint + traitlets==5.14.2 + # via + # ipython + # matplotlib-inline + typing-extensions==4.10.0 + # via + # astroid + # sqlalchemy + wcwidth==0.2.13 + # via prompt-toolkit + wrapt==1.16.0 + # via astroid + + ----- stderr ----- + Resolved 36 packages in [TIME] + "###); + + Ok(()) +} + +/// Regression test for: +#[test] +fn tomli_less_than_python311() -> Result<()> { + let context = TestContext::new("3.12"); + + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str( + "\ +coverage[toml] +pandas +matplotlib + ", + )?; + + uv_snapshot!(context + .pip_compile() + .arg("requirements.in").arg("--universal").arg("-p").arg("3.8"), @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 -p 3.8 + contourpy==1.1.1 + # via matplotlib + coverage==7.4.4 + # via -r requirements.in + cycler==0.12.1 + # via matplotlib + fonttools==4.50.0 + # via matplotlib + importlib-resources==6.4.0 ; python_full_version < '3.10' + # via matplotlib + kiwisolver==1.4.5 + # via matplotlib + matplotlib==3.7.5 + # via -r requirements.in + numpy==1.24.4 ; python_full_version < '3.12' + # via + # contourpy + # matplotlib + # pandas + numpy==1.26.4 ; python_full_version >= '3.12' + # via + # contourpy + # matplotlib + # pandas + packaging==24.0 + # via matplotlib + pandas==2.0.3 + # via -r requirements.in + pillow==10.2.0 + # via matplotlib + pyparsing==3.1.2 + # via matplotlib + python-dateutil==2.9.0.post0 + # via + # matplotlib + # pandas + pytz==2024.1 + # via pandas + six==1.16.0 + # via python-dateutil + tomli==2.0.1 ; python_full_version == '3.11' + # via coverage + tzdata==2024.1 + # via pandas + zipp==3.18.1 ; python_full_version < '3.10' + # via importlib-resources + + ----- stderr ----- + Resolved 19 packages in [TIME] + "###); + + Ok(()) +} + +/// Regression test for: +#[test] +fn importlib_metadata_not_repeated() -> Result<()> { + let context = TestContext::new("3.12"); + + let uv_toml = context.temp_dir.child("uv.toml"); + uv_toml.write_str(r#"environments = ["python_version >= '3.10'", "python_version >= '3.8' and python_version < '3.10'", "python_version < '3.8'"]"#)?; + let requirements_in = context.temp_dir.child("requirements.in"); + requirements_in.write_str("build")?; + + uv_snapshot!(context + .pip_compile() + .arg("requirements.in").arg("--universal").arg("-p").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 --universal -p 3.7 + build==1.1.1 + # via -r requirements.in + colorama==0.4.6 ; os_name == 'nt' + # via build + importlib-metadata==6.7.0 ; python_full_version < '3.10' + # via build + importlib-metadata==7.1.0 ; python_full_version < '3.10.2' + # via build + packaging==24.0 + # via build + pyproject-hooks==1.0.0 + # via build + tomli==2.0.1 ; python_full_version < '3.11' + # via + # build + # pyproject-hooks + typing-extensions==4.7.1 ; python_full_version < '3.8' + # via importlib-metadata + zipp==3.15.0 ; python_full_version < '3.10' + # via importlib-metadata + zipp==3.18.1 ; python_full_version < '3.10.2' + # via importlib-metadata + + ----- stderr ----- + Resolved 10 packages in [TIME] + "###); + + Ok(()) +} From d1b2e08abe197e1c60c37d0948f86bd88e8c27b7 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 21 Aug 2024 11:17:49 -0400 Subject: [PATCH 02/15] uv-cli: use PathBuf::from Conversions from strings to paths are always infallible. --- crates/uv-cli/src/lib.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs index ce0f2f5c4aae..866e7db14a93 100644 --- a/crates/uv-cli/src/lib.rs +++ b/crates/uv-cli/src/lib.rs @@ -727,10 +727,7 @@ fn parse_file_path(input: &str) -> Result { url.to_file_path() .map_err(|()| "invalid file URL".to_string()) } else { - match PathBuf::from_str(input) { - Ok(path) => Ok(path), - Err(err) => Err(err.to_string()), - } + Ok(PathBuf::from(input)) } } From 6ec026daa601e519638323bde84b9eb0681b0694 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 21 Aug 2024 13:34:12 -0400 Subject: [PATCH 03/15] uv-resolver: rejigger 'trace_resolution' When I first wrote this routine, it was intended to only emit a trace for the final "unioned" resolution. But we actually moved that semantic operation to the construction of the resolution *graph*. So there is no unioned `Resolution` any more. But this is still useful to see. So I changed this to just emit a trace of *every* resolution right before constructing the graph. It might be nice to also emit a trace of the unioned graph too. Or perhaps we should do that instead if this proves too noisy. (Although this is only emitted at TRACE level.) --- crates/uv-resolver/src/resolver/mod.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index c5f774ecb63f..b9bd978197bd 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -366,7 +366,6 @@ impl ResolverState ResolverState ResolverState ResolverState"); + } for edge in &combined.edges { trace!( - "Resolution: {} -> {}", + "Resolution edge: {} -> {}", edge.from .as_ref() .map(PackageName::as_str) @@ -619,7 +624,7 @@ impl ResolverState Date: Mon, 19 Aug 2024 18:05:01 -0400 Subject: [PATCH 04/15] uv-resolver: refactor how we deal with requires-python This commit refactors how deal with `requires-python` so that instead of simplifying markers of dependencies inside the resolver, we do it at the edges of our system. When writing markers to output, we simplify when there's an obvious `requires-python` context. And when reading markers as input, we complexity markers with the relevant `requires-python` constraint. --- crates/uv-resolver/src/error.rs | 47 +++ crates/uv-resolver/src/lock/mod.rs | 322 ++++++++++++------ .../uv-resolver/src/lock/requirements_txt.rs | 6 +- crates/uv-resolver/src/lock/tree.rs | 24 +- crates/uv-resolver/src/pubgrub/package.rs | 63 +++- crates/uv-resolver/src/python_requirement.rs | 17 + crates/uv-resolver/src/requires_python.rs | 118 ++++++- crates/uv-resolver/src/resolution/display.rs | 6 +- .../src/resolution/requirements_txt.rs | 20 +- crates/uv-resolver/src/resolver/mod.rs | 74 ++-- crates/uv/src/commands/project/lock.rs | 4 +- crates/uv/src/commands/project/sync.rs | 7 +- 12 files changed, 544 insertions(+), 164 deletions(-) diff --git a/crates/uv-resolver/src/error.rs b/crates/uv-resolver/src/error.rs index 418af506e73b..4a38e3e303c6 100644 --- a/crates/uv-resolver/src/error.rs +++ b/crates/uv-resolver/src/error.rs @@ -222,6 +222,7 @@ impl std::fmt::Display for NoSolutionError { // Transform the error tree for reporting let mut tree = self.error.clone(); + simplify_derivation_tree_markers(&self.python_requirement, &mut tree); let should_display_tree = std::env::var_os("UV_INTERNAL__SHOW_DERIVATION_TREE").is_some() || tracing::enabled!(tracing::Level::TRACE); @@ -470,6 +471,52 @@ fn collapse_redundant_depends_on_no_versions_inner( } } +/// Simplifies the markers on pubgrub packages in the given derivation tree +/// according to the given Python requirement. +/// +/// For example, when there's a dependency like `foo ; python_version >= +/// '3.11'` and `requires-python = '>=3.11'`, this simplification will remove +/// the `python_version >= '3.11'` marker since it's implied to be true by +/// the `requires-python` setting. This simplifies error messages by reducing +/// noise. +fn simplify_derivation_tree_markers( + python_requirement: &PythonRequirement, + tree: &mut DerivationTree, UnavailableReason>, +) { + match tree { + DerivationTree::External(External::NotRoot(ref mut pkg, _)) => { + pkg.simplify_markers(python_requirement); + } + DerivationTree::External(External::NoVersions(ref mut pkg, _)) => { + pkg.simplify_markers(python_requirement); + } + DerivationTree::External(External::FromDependencyOf(ref mut pkg1, _, ref mut pkg2, _)) => { + pkg1.simplify_markers(python_requirement); + pkg2.simplify_markers(python_requirement); + } + DerivationTree::External(External::Custom(ref mut pkg, _, _)) => { + pkg.simplify_markers(python_requirement); + } + DerivationTree::Derived(derived) => { + derived.terms = std::mem::take(&mut derived.terms) + .into_iter() + .map(|(mut pkg, term)| { + pkg.simplify_markers(python_requirement); + (pkg, term) + }) + .collect(); + simplify_derivation_tree_markers( + python_requirement, + Arc::make_mut(&mut derived.cause1), + ); + simplify_derivation_tree_markers( + python_requirement, + Arc::make_mut(&mut derived.cause2), + ); + } + } +} + /// Given a [`DerivationTree`], collapse incompatibilities for versions of a package that are /// unavailable for the same reason to avoid repeating the same message for every unavailable /// version. diff --git a/crates/uv-resolver/src/lock/mod.rs b/crates/uv-resolver/src/lock/mod.rs index 98ff77c91222..dab7eb54c026 100644 --- a/crates/uv-resolver/src/lock/mod.rs +++ b/crates/uv-resolver/src/lock/mod.rs @@ -39,6 +39,7 @@ use uv_workspace::{InstallTarget, Workspace}; pub use crate::lock::requirements_txt::RequirementsTxtExport; pub use crate::lock::tree::TreeDisplay; +use crate::requires_python::SimplifiedMarkerTree; use crate::resolution::{AnnotatedDist, ResolutionGraphNode}; use crate::{ExcludeNewer, PrereleaseMode, RequiresPython, ResolutionGraph, ResolutionMode}; @@ -108,7 +109,7 @@ impl Lock { continue; }; let marker = edge.weight().clone(); - package.add_dependency(dependency_dist, marker, root)?; + package.add_dependency(&requires_python, dependency_dist, marker, root)?; } let id = package.id.clone(); @@ -141,6 +142,7 @@ impl Lock { }; let marker = edge.weight().clone(); package.add_optional_dependency( + &requires_python, extra.clone(), dependency_dist, marker, @@ -163,7 +165,13 @@ impl Lock { continue; }; let marker = edge.weight().clone(); - package.add_dev_dependency(group.clone(), dependency_dist, marker, root)?; + package.add_dev_dependency( + &requires_python, + group.clone(), + dependency_dist, + marker, + root, + )?; } } } @@ -370,7 +378,19 @@ impl Lock { /// Record the supported environments that were used to generate this lock. #[must_use] pub fn with_supported_environments(mut self, supported_environments: Vec) -> Self { - self.supported_environments = supported_environments; + // We "complexify" the markers given, since the supported + // environments given might be coming directly from what's written in + // `pyproject.toml`, and those are assumed to be simplified (i.e., + // they assume `requires-python` is true). But a `Lock` always uses + // non-simplified markers internally, so we need to re-complexify them + // here. + // + // The nice thing about complexifying is that it's a no-op if the + // markers given have already been complexified. + self.supported_environments = supported_environments + .into_iter() + .map(|marker| self.requires_python.complexify_markers(marker)) + .collect(); self } @@ -424,6 +444,22 @@ impl Lock { &self.manifest.members } + /// Returns the supported environments that were used to generate this + /// lock. + /// + /// The markers returned here are "simplified" with respect to the lock + /// file's `requires-python` setting. This means these should only be used + /// for direct comparison purposes with the supported environments written + /// by a human in `pyproject.toml`. (Think of "supported environments" in + /// `pyproject.toml` as having an implicit `and python_full_version >= + /// '{requires-python-bound}'` attached to each one.) + pub fn simplified_supported_environments(&self) -> Vec { + self.supported_environments() + .iter() + .map(|marker| self.requires_python.simplify_markers(marker.clone())) + .collect() + } + /// If this lockfile was built from a forking resolution with non-identical forks, return the /// markers of those forks, otherwise `None`. pub fn fork_markers(&self) -> &[MarkerTree] { @@ -512,7 +548,7 @@ impl Lock { )) }; for dep in deps { - if dep.marker.evaluate(marker_env, &[]) { + if dep.complexified_marker.evaluate(marker_env, &[]) { let dep_dist = self.find_by_id(&dep.package_id); if seen.insert((&dep.package_id, None)) { queue.push_back((dep_dist, None)); @@ -547,8 +583,8 @@ impl Lock { let fork_markers = each_element_on_its_line_array( self.fork_markers .iter() - .filter_map(MarkerTree::contents) - .map(|marker| marker.to_string()), + .map(|marker| SimplifiedMarkerTree::new(&self.requires_python, marker.clone())) + .filter_map(|marker| marker.try_to_string()), ); doc.insert("resolution-markers", value(fork_markers)); } @@ -557,8 +593,8 @@ impl Lock { let supported_environments = each_element_on_its_line_array( self.supported_environments .iter() - .filter_map(MarkerTree::contents) - .map(|marker| marker.to_string()), + .map(|marker| SimplifiedMarkerTree::new(&self.requires_python, marker.clone())) + .filter_map(|marker| marker.try_to_string()), ); doc.insert("supported-markers", value(supported_environments)); } @@ -682,7 +718,7 @@ impl Lock { let mut packages = ArrayOfTables::new(); for dist in &self.packages { - packages.push(dist.to_toml(&dist_count_by_name)?); + packages.push(dist.to_toml(&self.requires_python, &dist_count_by_name)?); } doc.insert("package", Item::ArrayOfTables(packages)); @@ -1174,9 +1210,9 @@ struct LockWire { /// If this lockfile was built from a forking resolution with non-identical forks, store the /// forks in the lockfile so we can recreate them in subsequent resolutions. #[serde(rename = "resolution-markers", default)] - fork_markers: Vec, + fork_markers: Vec, #[serde(rename = "supported-markers", default)] - supported_environments: Vec, + supported_environments: Vec, /// We discard the lockfile if these options match. #[serde(default)] options: ResolverOptions, @@ -1186,20 +1222,6 @@ struct LockWire { packages: Vec, } -impl From for LockWire { - fn from(lock: Lock) -> LockWire { - LockWire { - version: lock.version, - requires_python: lock.requires_python, - fork_markers: lock.fork_markers, - supported_environments: lock.supported_environments, - options: lock.options, - manifest: lock.manifest, - packages: lock.packages.into_iter().map(PackageWire::from).collect(), - } - } -} - impl TryFrom for Lock { type Error = LockError; @@ -1224,17 +1246,62 @@ impl TryFrom for Lock { let packages = wire .packages .into_iter() - .map(|dist| dist.unwire(&unambiguous_package_ids)) + .map(|dist| dist.unwire(&wire.requires_python, &unambiguous_package_ids)) .collect::, _>>()?; - Lock::new( + let supported_environments = wire + .supported_environments + .into_iter() + .map(|simplified_marker| simplified_marker.into_marker(&wire.requires_python)) + .collect(); + let fork_markers = wire + .fork_markers + .into_iter() + .map(|simplified_marker| simplified_marker.into_marker(&wire.requires_python)) + .collect(); + let lock = Lock::new( wire.version, packages, wire.requires_python, wire.options, wire.manifest, - wire.supported_environments, - wire.fork_markers, - ) + supported_environments, + fork_markers, + )?; + + /* + // TODO: Use the below in tests to validate we don't produce a + // trivially incorrect lock file. + let mut name_to_markers: BTreeMap<&PackageName, Vec<(&Version, &MarkerTree)>> = + BTreeMap::new(); + for package in &lock.packages { + for dep in &package.dependencies { + name_to_markers + .entry(&dep.package_id.name) + .or_default() + .push((&dep.package_id.version, &dep.marker)); + } + } + for (name, marker_trees) in name_to_markers { + for (i, (version1, marker1)) in marker_trees.iter().enumerate() { + for (version2, marker2) in &marker_trees[i + 1..] { + if version1 == version2 { + continue; + } + if !marker1.is_disjoint(marker2) { + eprintln!("{}", lock.to_toml().unwrap()); + assert!( + false, + "[{marker1:?}] (for version {version1}) is not disjoint with \ + [{marker2:?}] (for version {version2}) \ + for package `{name}`", + ); + } + } + } + } + */ + + Ok(lock) } } @@ -1316,14 +1383,38 @@ impl Package { /// Add the [`AnnotatedDist`] as a dependency of the [`Package`]. fn add_dependency( &mut self, + requires_python: &RequiresPython, annotated_dist: &AnnotatedDist, marker: MarkerTree, root: &Path, ) -> Result<(), LockError> { - let new_dep = Dependency::from_annotated_dist(annotated_dist, marker, root)?; + let new_dep = + Dependency::from_annotated_dist(requires_python, annotated_dist, marker, root)?; for existing_dep in &mut self.dependencies { if existing_dep.package_id == new_dep.package_id - && existing_dep.marker == new_dep.marker + // It's important that we do a comparison on + // *simplified* markers here. In particular, when + // we write markers out to the lock file, we use + // "simplified" markers, or markers that are simplified + // *given* that `requires-python` is satisfied. So if + // we don't do equality based on what the simplified + // marker is, we might wind up not merging dependencies + // that ought to be merged and thus writing out extra + // entries. + // + // For example, if `requires-python = '>=3.8'` and we + // have `foo==1` and + // `foo==1 ; python_version >= '3.8'` dependencies, + // then they don't have equivalent complexified + // markers, but their simplified markers are identical. + // + // NOTE: It does seem like perhaps this should + // be implemented semantically/algebraically on + // `MarkerTree` itself, but it wasn't totally clear + // how to do that. I think `pep508` would need to + // grow a concept of "requires python" and provide an + // operation specifically for that. + && existing_dep.simplified_marker == new_dep.simplified_marker { existing_dep.extra.extend(new_dep.extra); return Ok(()); @@ -1337,15 +1428,20 @@ impl Package { /// Add the [`AnnotatedDist`] as an optional dependency of the [`Package`]. fn add_optional_dependency( &mut self, + requires_python: &RequiresPython, extra: ExtraName, annotated_dist: &AnnotatedDist, marker: MarkerTree, root: &Path, ) -> Result<(), LockError> { - let dep = Dependency::from_annotated_dist(annotated_dist, marker, root)?; + let dep = Dependency::from_annotated_dist(requires_python, annotated_dist, marker, root)?; let optional_deps = self.optional_dependencies.entry(extra).or_default(); for existing_dep in &mut *optional_deps { - if existing_dep.package_id == dep.package_id && existing_dep.marker == dep.marker { + if existing_dep.package_id == dep.package_id + // See note in add_dependency for why we use + // simplified markers here. + && existing_dep.simplified_marker == dep.simplified_marker + { existing_dep.extra.extend(dep.extra); return Ok(()); } @@ -1358,15 +1454,20 @@ impl Package { /// Add the [`AnnotatedDist`] as a development dependency of the [`Package`]. fn add_dev_dependency( &mut self, + requires_python: &RequiresPython, dev: GroupName, annotated_dist: &AnnotatedDist, marker: MarkerTree, root: &Path, ) -> Result<(), LockError> { - let dep = Dependency::from_annotated_dist(annotated_dist, marker, root)?; + let dep = Dependency::from_annotated_dist(requires_python, annotated_dist, marker, root)?; let dev_deps = self.dev_dependencies.entry(dev).or_default(); for existing_dep in &mut *dev_deps { - if existing_dep.package_id == dep.package_id && existing_dep.marker == dep.marker { + if existing_dep.package_id == dep.package_id + // See note in add_dependency for why we use + // simplified markers here. + && existing_dep.simplified_marker == dep.simplified_marker + { existing_dep.extra.extend(dep.extra); return Ok(()); } @@ -1634,7 +1735,11 @@ impl Package { Ok(Some(sdist)) } - fn to_toml(&self, dist_count_by_name: &FxHashMap) -> anyhow::Result { + fn to_toml( + &self, + requires_python: &RequiresPython, + dist_count_by_name: &FxHashMap, + ) -> anyhow::Result
{ let mut table = Table::new(); self.id.to_toml(None, &mut table); @@ -1643,28 +1748,27 @@ impl Package { let wheels = each_element_on_its_line_array( self.fork_markers .iter() - .filter_map(MarkerTree::contents) - .map(|marker| marker.to_string()), + .map(|marker| SimplifiedMarkerTree::new(requires_python, marker.clone())) + .filter_map(|marker| marker.try_to_string()), ); table.insert("resolution-markers", value(wheels)); } if !self.dependencies.is_empty() { - let deps = each_element_on_its_line_array( - self.dependencies - .iter() - .map(|dep| dep.to_toml(dist_count_by_name).into_inline_table()), - ); + let deps = each_element_on_its_line_array(self.dependencies.iter().map(|dep| { + dep.to_toml(requires_python, dist_count_by_name) + .into_inline_table() + })); table.insert("dependencies", value(deps)); } if !self.optional_dependencies.is_empty() { let mut optional_deps = Table::new(); for (extra, deps) in &self.optional_dependencies { - let deps = each_element_on_its_line_array( - deps.iter() - .map(|dep| dep.to_toml(dist_count_by_name).into_inline_table()), - ); + let deps = each_element_on_its_line_array(deps.iter().map(|dep| { + dep.to_toml(requires_python, dist_count_by_name) + .into_inline_table() + })); if !deps.is_empty() { optional_deps.insert(extra.as_ref(), value(deps)); } @@ -1677,10 +1781,10 @@ impl Package { if !self.dev_dependencies.is_empty() { let mut dev_dependencies = Table::new(); for (extra, deps) in &self.dev_dependencies { - let deps = each_element_on_its_line_array( - deps.iter() - .map(|dep| dep.to_toml(dist_count_by_name).into_inline_table()), - ); + let deps = each_element_on_its_line_array(deps.iter().map(|dep| { + dep.to_toml(requires_python, dist_count_by_name) + .into_inline_table() + })); if !deps.is_empty() { dev_dependencies.insert(extra.as_ref(), value(deps)); } @@ -1849,7 +1953,7 @@ struct PackageWire { #[serde(default)] wheels: Vec, #[serde(default, rename = "resolution-markers")] - fork_markers: Vec, + fork_markers: Vec, #[serde(default)] dependencies: Vec, #[serde(default)] @@ -1870,11 +1974,12 @@ struct PackageMetadata { impl PackageWire { fn unwire( self, + requires_python: &RequiresPython, unambiguous_package_ids: &FxHashMap, ) -> Result { let unwire_deps = |deps: Vec| -> Result, LockError> { deps.into_iter() - .map(|dep| dep.unwire(unambiguous_package_ids)) + .map(|dep| dep.unwire(requires_python, unambiguous_package_ids)) .collect() }; Ok(Package { @@ -1882,7 +1987,11 @@ impl PackageWire { metadata: self.metadata, sdist: self.sdist, wheels: self.wheels, - fork_markers: self.fork_markers, + fork_markers: self + .fork_markers + .into_iter() + .map(|simplified_marker| simplified_marker.into_marker(requires_python)) + .collect(), dependencies: unwire_deps(self.dependencies)?, optional_dependencies: self .optional_dependencies @@ -1898,32 +2007,6 @@ impl PackageWire { } } -impl From for PackageWire { - fn from(dist: Package) -> PackageWire { - let wire_deps = |deps: Vec| -> Vec { - deps.into_iter().map(DependencyWire::from).collect() - }; - PackageWire { - id: dist.id, - metadata: dist.metadata, - sdist: dist.sdist, - wheels: dist.wheels, - fork_markers: dist.fork_markers, - dependencies: wire_deps(dist.dependencies), - optional_dependencies: dist - .optional_dependencies - .into_iter() - .map(|(extra, deps)| (extra, wire_deps(deps))) - .collect(), - dev_dependencies: dist - .dev_dependencies - .into_iter() - .map(|(group, deps)| (group, wire_deps(deps))) - .collect(), - } - } -} - /// Inside the lockfile, we match a dependency entry to a package entry through a key made up /// of the name, the version and the source url. #[derive(Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, serde::Deserialize)] @@ -3131,26 +3214,70 @@ impl TryFrom for Wheel { struct Dependency { package_id: PackageId, extra: BTreeSet, - marker: MarkerTree, + /// A marker simplified by assuming `requires-python` is satisfied. + /// So if `requires-python = '>=3.8'`, then + /// `python_version >= '3.8' and python_version < '3.12'` + /// gets simplfiied to `python_version < '3.12'`. + /// + /// Generally speaking, this marker should not be exposed to + /// anything outside this module unless it's for a specialized use + /// case. But specifically, it should never be used to evaluate + /// against a marker environment or for disjointness checks or any + /// other kind of marker algebra. + /// + /// It exists because there are some cases where we do actually + /// want to compare markers in their "simplified" form. For + /// example, when collapsing the extras on duplicate dependencies. + /// Even if a dependency has different complexified markers, + /// they might have identical markers once simplified. And since + /// `requires-python` applies to the entire lock file, it's + /// acceptable to do comparisons on the simplified form. + simplified_marker: SimplifiedMarkerTree, + /// The "complexified" marker is a marker that can stand on its + /// own independent of `requires-python`. It can be safely used + /// for any kind of marker algebra. + complexified_marker: MarkerTree, } impl Dependency { + fn new( + requires_python: &RequiresPython, + package_id: PackageId, + extra: BTreeSet, + complexified_marker: MarkerTree, + ) -> Dependency { + let simplified_marker = + SimplifiedMarkerTree::new(requires_python, complexified_marker.clone()); + Dependency { + package_id, + extra, + simplified_marker, + complexified_marker, + } + } + fn from_annotated_dist( + requires_python: &RequiresPython, annotated_dist: &AnnotatedDist, - marker: MarkerTree, + complexified_marker: MarkerTree, root: &Path, ) -> Result { let package_id = PackageId::from_annotated_dist(annotated_dist, root)?; let extra = annotated_dist.extra.iter().cloned().collect(); - Ok(Self { + Ok(Dependency::new( + requires_python, package_id, extra, - marker, - }) + complexified_marker, + )) } /// Returns the TOML representation of this dependency. - fn to_toml(&self, dist_count_by_name: &FxHashMap) -> Table { + fn to_toml( + &self, + _requires_python: &RequiresPython, + dist_count_by_name: &FxHashMap, + ) -> Table { let mut table = Table::new(); self.package_id .to_toml(Some(dist_count_by_name), &mut table); @@ -3162,8 +3289,8 @@ impl Dependency { .collect::(); table.insert("extra", value(extra_array)); } - if let Some(marker) = self.marker.contents() { - table.insert("marker", value(marker.to_string())); + if let Some(marker) = self.simplified_marker.try_to_string() { + table.insert("marker", value(marker)); } table @@ -3199,32 +3326,25 @@ struct DependencyWire { #[serde(default)] extra: BTreeSet, #[serde(default)] - marker: MarkerTree, + marker: SimplifiedMarkerTree, } impl DependencyWire { fn unwire( self, + requires_python: &RequiresPython, unambiguous_package_ids: &FxHashMap, ) -> Result { + let complexified_marker = self.marker.clone().into_marker(requires_python); Ok(Dependency { package_id: self.package_id.unwire(unambiguous_package_ids)?, extra: self.extra, - marker: self.marker, + simplified_marker: self.marker, + complexified_marker, }) } } -impl From for DependencyWire { - fn from(dependency: Dependency) -> DependencyWire { - DependencyWire { - package_id: PackageIdForDependency::from(dependency.package_id), - extra: dependency.extra, - marker: dependency.marker, - } - } -} - /// A single hash for a distribution artifact in a lockfile. /// /// A hash is encoded as a single TOML string in the format diff --git a/crates/uv-resolver/src/lock/requirements_txt.rs b/crates/uv-resolver/src/lock/requirements_txt.rs index e5de97673d9c..19107f78e422 100644 --- a/crates/uv-resolver/src/lock/requirements_txt.rs +++ b/crates/uv-resolver/src/lock/requirements_txt.rs @@ -102,7 +102,11 @@ impl<'lock> RequirementsTxtExport<'lock> { // Add the edge. let dep_index = inverse[&dep.package_id]; - petgraph.add_edge(index, dep_index, dep.marker.clone()); + petgraph.add_edge( + index, + dep_index, + dep.simplified_marker.as_simplified_marker_tree().clone(), + ); // Push its dependencies on the queue. if seen.insert((&dep.package_id, None)) { diff --git a/crates/uv-resolver/src/lock/tree.rs b/crates/uv-resolver/src/lock/tree.rs index 898c47fe530b..71d8c3a499db 100644 --- a/crates/uv-resolver/src/lock/tree.rs +++ b/crates/uv-resolver/src/lock/tree.rs @@ -62,7 +62,8 @@ impl<'env> TreeDisplay<'env> { Cow::Owned(Dependency { package_id: packages.id.clone(), extra: dependency.extra.clone(), - marker: dependency.marker.clone(), + simplified_marker: dependency.simplified_marker.clone(), + complexified_marker: dependency.complexified_marker.clone(), }) } else { Cow::Borrowed(dependency) @@ -72,7 +73,10 @@ impl<'env> TreeDisplay<'env> { // Skip dependencies that don't apply to the current environment. if let Some(environment_markers) = markers { - if !dependency.marker.evaluate(environment_markers, &[]) { + if !dependency + .complexified_marker + .evaluate(environment_markers, &[]) + { continue; } } @@ -91,7 +95,8 @@ impl<'env> TreeDisplay<'env> { Cow::Owned(Dependency { package_id: packages.id.clone(), extra: dependency.extra.clone(), - marker: dependency.marker.clone(), + simplified_marker: dependency.simplified_marker.clone(), + complexified_marker: dependency.complexified_marker.clone(), }) } else { Cow::Borrowed(dependency) @@ -101,7 +106,10 @@ impl<'env> TreeDisplay<'env> { // Skip dependencies that don't apply to the current environment. if let Some(environment_markers) = markers { - if !dependency.marker.evaluate(environment_markers, &[]) { + if !dependency + .complexified_marker + .evaluate(environment_markers, &[]) + { continue; } } @@ -126,7 +134,8 @@ impl<'env> TreeDisplay<'env> { Cow::Owned(Dependency { package_id: packages.id.clone(), extra: dependency.extra.clone(), - marker: dependency.marker.clone(), + simplified_marker: dependency.simplified_marker.clone(), + complexified_marker: dependency.complexified_marker.clone(), }) } else { Cow::Borrowed(dependency) @@ -136,7 +145,10 @@ impl<'env> TreeDisplay<'env> { // Skip dependencies that don't apply to the current environment. if let Some(environment_markers) = markers { - if !dependency.marker.evaluate(environment_markers, &[]) { + if !dependency + .complexified_marker + .evaluate(environment_markers, &[]) + { continue; } } diff --git a/crates/uv-resolver/src/pubgrub/package.rs b/crates/uv-resolver/src/pubgrub/package.rs index 98c7944502ed..9bb7bdc75a94 100644 --- a/crates/uv-resolver/src/pubgrub/package.rs +++ b/crates/uv-resolver/src/pubgrub/package.rs @@ -4,6 +4,8 @@ use std::sync::Arc; use pep508_rs::{MarkerTree, MarkerTreeContents}; use uv_normalize::{ExtraName, GroupName, PackageName}; +use crate::python_requirement::PythonRequirement; + /// [`Arc`] wrapper around [`PubGrubPackageInner`] to make cloning (inside PubGrub) cheap. #[derive(Debug, Clone, Eq, Hash, PartialEq, PartialOrd, Ord)] pub struct PubGrubPackage(Arc); @@ -85,7 +87,8 @@ pub enum PubGrubPackageInner { /// rather than the `Marker` variant. Marker { name: PackageName, - marker: MarkerTreeContents, + /// The marker associated with this proxy package. + marker: MarkerTree, }, } @@ -101,15 +104,16 @@ impl PubGrubPackage { // extras end up having two distinct marker expressions, which in turn // makes them two distinct packages. This results in PubGrub being // unable to unify version constraints across such packages. - let marker = marker.simplify_extras_with(|_| true).contents(); + let tree = marker.simplify_extras_with(|_| true); + let marker = tree.contents(); if let Some(extra) = extra { Self(Arc::new(PubGrubPackageInner::Extra { name, extra, marker, })) - } else if let Some(marker) = marker { - Self(Arc::new(PubGrubPackageInner::Marker { name, marker })) + } else if marker.is_some() { + Self(Arc::new(PubGrubPackageInner::Marker { name, marker: tree })) } else { Self(Arc::new(PubGrubPackageInner::Package { name, @@ -158,7 +162,7 @@ impl PubGrubPackage { | PubGrubPackageInner::Dev { marker, .. } => { marker.as_ref().map(MarkerTreeContents::as_ref) } - PubGrubPackageInner::Marker { marker, .. } => Some(marker.as_ref()), + PubGrubPackageInner::Marker { marker, .. } => Some(marker), } } @@ -171,6 +175,47 @@ impl PubGrubPackage { | PubGrubPackageInner::Marker { .. } ) } + + /// This simplifies the markers on this package (if any exist) using the + /// given Python requirement as assumed context. + /// + /// See `RequiresPython::simplify_markers` for more details. + /// + /// NOTE: This routine is kind of weird, because this should only really be + /// applied in contexts where the `PubGrubPackage` is printed as output. + /// So in theory, this should be a transformation into a new type with a + /// "printable" `PubGrubPackage` coupled with a `Requires-Python`. But at + /// time of writing, this was a larger refactor, particularly in the error + /// reporting where this routine is used. + pub(crate) fn simplify_markers(&mut self, python_requirement: &PythonRequirement) { + match *Arc::make_mut(&mut self.0) { + PubGrubPackageInner::Root(_) | PubGrubPackageInner::Python(_) => {} + PubGrubPackageInner::Package { ref mut marker, .. } + | PubGrubPackageInner::Extra { ref mut marker, .. } + | PubGrubPackageInner::Dev { ref mut marker, .. } => { + let Some(contents) = marker.as_mut() else { + return; + }; + let tree = MarkerTree::from(contents.clone()); + *marker = python_requirement.simplify_markers(tree).contents(); + } + PubGrubPackageInner::Marker { ref mut marker, .. } => { + *marker = python_requirement.simplify_markers(marker.clone()); + } + } + } + + #[allow(dead_code)] + pub(crate) fn kind(&self) -> &'static str { + match &**self { + PubGrubPackageInner::Root(_) => "root", + PubGrubPackageInner::Python(_) => "python", + PubGrubPackageInner::Package { .. } => "package", + PubGrubPackageInner::Extra { .. } => "extra", + PubGrubPackageInner::Dev { .. } => "dev", + PubGrubPackageInner::Marker { .. } => "marker", + } + } } #[derive(Debug, Copy, Clone, Eq, PartialEq, PartialOrd, Hash, Ord)] @@ -234,7 +279,13 @@ impl std::fmt::Display for PubGrubPackageInner { } => { write!(f, "{name}[{dev}]{{{marker}}}") } - Self::Marker { name, marker, .. } => write!(f, "{name}{{{marker}}}"), + Self::Marker { name, marker, .. } => { + if let Some(marker) = marker.contents() { + write!(f, "{name}{{{marker}}}") + } else { + write!(f, "{name}") + } + } Self::Extra { name, extra, .. } => write!(f, "{name}[{extra}]"), Self::Dev { name, dev, .. } => write!(f, "{name}:{dev}"), // It is guaranteed that `extra` and `dev` are never set at the same time. diff --git a/crates/uv-resolver/src/python_requirement.rs b/crates/uv-resolver/src/python_requirement.rs index 1c286a212a0e..117442ce0dcd 100644 --- a/crates/uv-resolver/src/python_requirement.rs +++ b/crates/uv-resolver/src/python_requirement.rs @@ -1,4 +1,5 @@ use pep440_rs::Version; +use pep508_rs::MarkerTree; use uv_python::{Interpreter, PythonVersion}; use crate::{RequiresPython, RequiresPythonRange}; @@ -89,6 +90,22 @@ impl PythonRequirement { pub fn source(&self) -> PythonRequirementSource { self.source } + + /// A wrapper around `RequiresPython::simplify_markers`. See its docs for + /// more info. + /// + /// When this `PythonRequirement` isn't `RequiresPython`, the given markers + /// are returned unchanged. + pub(crate) fn simplify_markers(&self, marker: MarkerTree) -> MarkerTree { + self.target.simplify_markers(marker) + } + + /// Return a [`MarkerTree`] representing the Python requirement. + /// + /// See: [`RequiresPython::to_marker_tree`] + pub fn to_marker_tree(&self) -> MarkerTree { + self.target.to_marker_tree() + } } #[derive(Debug, Copy, Clone, Eq, PartialEq, PartialOrd, Hash, Ord)] diff --git a/crates/uv-resolver/src/requires_python.rs b/crates/uv-resolver/src/requires_python.rs index 71cc480fbb67..9d70acd68acc 100644 --- a/crates/uv-resolver/src/requires_python.rs +++ b/crates/uv-resolver/src/requires_python.rs @@ -125,8 +125,19 @@ impl RequiresPython { } } - /// Returns the [`RequiresPython`] as a [`MarkerTree`]. - pub fn markers(&self) -> MarkerTree { + /// Returns this `Requires-Python` specifier as an equivalent + /// [`MarkerTree`] utilizing the `python_full_version` marker field. + /// + /// This is useful for comparing a `Requires-Python` specifier with + /// arbitrary marker expressions. For example, one can ask whether the + /// returned marker expression is disjoint with another marker expression. + /// If it is, then one can conclude that the `Requires-Python` specifier + /// excludes the dependency with that other marker expression. + /// + /// If this `Requires-Python` specifier has no constraints, then this + /// returns a marker tree that evaluates to `true` for all possible marker + /// environments. + pub fn to_marker_tree(&self) -> MarkerTree { match (self.range.0.as_ref(), self.range.1.as_ref()) { (Bound::Included(lower), Bound::Included(upper)) => { let mut lower = MarkerTree::expression(MarkerExpression::Version { @@ -283,6 +294,69 @@ impl RequiresPython { &self.range } + /// Simplifies the given markers in such a way as to assume that + /// the Python version is constrained by this Python version bound. + /// + /// For example, with `requires-python = '>=3.8'`, a marker like this: + /// + /// ```text + /// python_full_version >= '3.8' and python_full_version < '3.12' + /// ``` + /// + /// Will be simplified to: + /// + /// ```text + /// python_full_version < '3.12' + /// ``` + /// + /// That is, `python_full_version >= '3.8'` is assumed to be true by virtue + /// of `requires-python`, and is thus not needed in the marker. + /// + /// This should be used in contexts in which this assumption is valid to + /// make. Generally, this means it should not be used inside the resolver, + /// but instead near the boundaries of the system (like formatting error + /// messages and writing the lock file). The reason for this is that + /// this simplification fundamentally changes the meaning of the marker, + /// and the *only* correct way to interpret it is in a context in which + /// `requires-python` is known to be true. For example, when markers from + /// a lock file are deserialized and turned into a `ResolutionGraph`, the + /// markers are "complexified" to put the `requires-python` assumption back + /// into the marker explicitly. + pub(crate) fn simplify_markers(&self, marker: MarkerTree) -> MarkerTree { + let simplified = marker.simplify_python_versions(Range::from(self.range().clone())); + // FIXME: This is a hack to avoid the hidden state created by + // ADD's `restrict_versions`. I believe this is sound, but it's + // wasteful and silly. + simplified + .try_to_string() + .map(|s| s.parse().unwrap()) + .unwrap_or(MarkerTree::TRUE) + } + + /// The inverse of `simplify_markers`. + /// + /// This should be applied near the boundaries of uv when markers are + /// deserialized from a context where `requires-python` is assumed. For + /// example, with `requires-python = '>=3.8'` and a marker like: + /// + /// ```text + /// python_full_version < '3.12' + /// ``` + /// + /// It will be "complexified" to: + /// + /// ```text + /// python_full_version >= '3.8' and python_full_version < '3.12' + /// ``` + pub(crate) fn complexify_markers(&self, mut marker: MarkerTree) -> MarkerTree { + // PERF: There's likely a way to amortize this, particularly + // the construction of `to_marker_tree`. But at time of + // writing, it wasn't clear if this was an actual perf problem + // or not. If it is, try a `std::sync::OnceLock`. + marker.and(self.to_marker_tree()); + marker + } + /// Returns `false` if the wheel's tags state it can't be used in the given Python version /// range. /// @@ -477,6 +551,46 @@ impl Ord for RequiresPythonBound { } } +/// A simplified marker is just like a normal marker, except it has possibly +/// been simplified by `requires-python`. +/// +/// A simplified marker should only exist in contexts where a `requires-python` +/// setting can be assumed. In order to get a "normal" marker out of +/// a simplified marker, one must re-contextualize it by adding the +/// `requires-python` constraint back to the marker. +#[derive(Clone, Debug, Default, Eq, PartialEq, PartialOrd, Ord, serde::Deserialize)] +pub(crate) struct SimplifiedMarkerTree(MarkerTree); + +impl SimplifiedMarkerTree { + /// Simplifies the given markers by assuming the given `requires-python` + /// bound is true. + pub(crate) fn new( + requires_python: &RequiresPython, + marker: MarkerTree, + ) -> SimplifiedMarkerTree { + SimplifiedMarkerTree(requires_python.simplify_markers(marker)) + } + + /// Complexifies the given markers by adding the given `requires-python` as + /// a constraint to these simplified markers. + pub(crate) fn into_marker(self, requires_python: &RequiresPython) -> MarkerTree { + requires_python.complexify_markers(self.0) + } + + /// Attempts to convert this simplified marker to a string. + /// + /// This only returns `None` when the underlying marker is always true, + /// i.e., it matches all possible marker environments. + pub(crate) fn try_to_string(&self) -> Option { + self.0.try_to_string() + } + + /// Returns the underlying marker tree without re-complexifying them. + pub(crate) fn as_simplified_marker_tree(&self) -> &MarkerTree { + &self.0 + } +} + #[cfg(test)] mod tests { use std::cmp::Ordering; diff --git a/crates/uv-resolver/src/resolution/display.rs b/crates/uv-resolver/src/resolution/display.rs index 624d76aeea58..705d1239f228 100644 --- a/crates/uv-resolver/src/resolution/display.rs +++ b/crates/uv-resolver/src/resolution/display.rs @@ -187,7 +187,11 @@ impl std::fmt::Display for DisplayResolutionGraph<'_> { for (index, node) in nodes { // Display the node itself. let mut line = node - .to_requirements_txt(self.include_extras, self.include_markers) + .to_requirements_txt( + &self.resolution.requires_python, + self.include_extras, + self.include_markers, + ) .to_string(); // Display the distribution hashes, if any. diff --git a/crates/uv-resolver/src/resolution/requirements_txt.rs b/crates/uv-resolver/src/resolution/requirements_txt.rs index 2fa758f034b0..73ef1d7f0cbf 100644 --- a/crates/uv-resolver/src/resolution/requirements_txt.rs +++ b/crates/uv-resolver/src/resolution/requirements_txt.rs @@ -10,7 +10,10 @@ use pep508_rs::{split_scheme, MarkerTree, Scheme}; use pypi_types::HashDigest; use uv_normalize::{ExtraName, PackageName}; -use crate::resolution::AnnotatedDist; +use crate::{ + requires_python::{RequiresPython, SimplifiedMarkerTree}, + resolution::AnnotatedDist, +}; #[derive(Debug, Clone)] /// A pinned package with its resolved distribution and all the extras that were pinned for it. @@ -31,6 +34,7 @@ impl RequirementsTxtDist { /// supported in `requirements.txt`). pub(crate) fn to_requirements_txt( &self, + requires_python: &RequiresPython, include_extras: bool, include_markers: bool, ) -> Cow { @@ -90,7 +94,9 @@ impl RequirementsTxtDist { }; if let Some(given) = given { return if let Some(markers) = - self.markers.contents().filter(|_| include_markers) + SimplifiedMarkerTree::new(requires_python, self.markers.clone()) + .try_to_string() + .filter(|_| include_markers) { Cow::Owned(format!("{given} ; {markers}")) } else { @@ -101,7 +107,10 @@ impl RequirementsTxtDist { } if self.extras.is_empty() || !include_extras { - if let Some(markers) = self.markers.contents().filter(|_| include_markers) { + if let Some(markers) = SimplifiedMarkerTree::new(requires_python, self.markers.clone()) + .try_to_string() + .filter(|_| include_markers) + { Cow::Owned(format!("{} ; {}", self.dist.verbatim(), markers)) } else { self.dist.verbatim() @@ -110,7 +119,10 @@ impl RequirementsTxtDist { let mut extras = self.extras.clone(); extras.sort_unstable(); extras.dedup(); - if let Some(markers) = self.markers.contents().filter(|_| include_markers) { + if let Some(markers) = SimplifiedMarkerTree::new(requires_python, self.markers.clone()) + .try_to_string() + .filter(|_| include_markers) + { Cow::Owned(format!( "{}[{}]{} ; {}", self.name(), diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index b9bd978197bd..48e02613b806 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -562,6 +562,8 @@ impl ResolverState ResolverState ResolverState ResolverState ResolverState>, python_requirement: &PythonRequirement, ) -> Forks { + let python_marker = python_requirement.to_marker_tree(); + let mut forks = vec![Fork { dependencies: vec![], markers: MarkerTree::TRUE, @@ -2713,7 +2705,6 @@ impl Forks { continue; } for dep in deps { - // We assume that the marker has already been Python-simplified. let mut markers = dep.package.marker().cloned().unwrap_or(MarkerTree::TRUE); if markers.is_false() { // If the markers can never be satisfied, then we @@ -2740,17 +2731,25 @@ impl Forks { continue; } - let not_markers = simplify_python(markers.negate(), python_requirement); + let not_markers = markers.negate(); let mut new_markers = markers.clone(); - new_markers.and(simplify_python(fork.markers.negate(), python_requirement)); + new_markers.and(fork.markers.negate()); if !fork.markers.is_disjoint(¬_markers) { let mut new_fork = fork.clone(); new_fork.intersect(not_markers); - new.push(new_fork); + // Filter out any forks we created that are disjoint with our + // Python requirement. + if !new_fork.markers.is_disjoint(&python_marker) { + new.push(new_fork); + } } fork.dependencies.push(dep.clone()); fork.intersect(markers); - new.push(fork); + // Filter out any forks we created that are disjoint with our + // Python requirement. + if !fork.markers.is_disjoint(&python_marker) { + new.push(fork); + } markers = new_markers; } forks = new; @@ -2848,8 +2847,3 @@ impl PartialOrd for Fork { Some(self.cmp(other)) } } - -/// Simplify a [`MarkerTree`] based on a [`PythonRequirement`]. -fn simplify_python(marker: MarkerTree, python_requirement: &PythonRequirement) -> MarkerTree { - marker.simplify_python_versions(Range::from(python_requirement.target().range().clone())) -} diff --git a/crates/uv/src/commands/project/lock.rs b/crates/uv/src/commands/project/lock.rs index caf156501514..7bec6c646dab 100644 --- a/crates/uv/src/commands/project/lock.rs +++ b/crates/uv/src/commands/project/lock.rs @@ -331,7 +331,7 @@ async fn do_lock( .into_iter() .flatten() { - if requires_python.markers().is_disjoint(environment) { + if requires_python.to_marker_tree().is_disjoint(environment) { return if let Some(contents) = environment.contents() { Err(ProjectError::DisjointEnvironment( contents, @@ -637,7 +637,7 @@ impl ValidatedLock { } // If the set of supported environments has changed, we have to perform a clean resolution. - if lock.supported_environments() + if lock.simplified_supported_environments() != environments .map(SupportedEnvironments::as_markers) .unwrap_or_default() diff --git a/crates/uv/src/commands/project/sync.rs b/crates/uv/src/commands/project/sync.rs index 9d02808dd00d..eacc608ff8b8 100644 --- a/crates/uv/src/commands/project/sync.rs +++ b/crates/uv/src/commands/project/sync.rs @@ -192,7 +192,12 @@ pub(super) async fn do_sync( if !environments.is_empty() { if !environments.iter().any(|env| env.evaluate(&markers, &[])) { return Err(ProjectError::LockedPlatformIncompatibility( - environments + // For error reporting, we use the "simplified" + // supported environments, because these correspond to + // what the end user actually wrote. The non-simplified + // environments, by contrast, are explicitly + // constrained by `requires-python`. + lock.simplified_supported_environments() .iter() .filter_map(MarkerTree::contents) .map(|env| format!("`{env}`")) From 2ff771cc82ee5e74be7fff10738e9a691adacf6f Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 20 Aug 2024 13:46:46 -0400 Subject: [PATCH 05/15] uv/tests: update error message This update changes the error message to one that is worse than the status quo, but it is still correct because `datasets >= 2.19` doesn't actually exist given our `EXCLUDE_NEWER` in tests at present. The underlying cause here seems to be in how PubGrub deals with reporting incompatibilities. Namely, when it has `foo < 1` and `foo >= 1`, it reports an incompatibility immediately before looking for versions. But when it has `foo < 1` and `foo >= 1 ; marker`, then because they aren't both pubgrub "packages," it starts requesting versions first and hits the "not available" error path instead of the "incompatible" error path. Since this is more of an underlying issue with how we setup `PubGrubPackage` and our interaction with pubgrub, we ended up deciding to move forward here with the regression since this PR is fixing a correctness issue. In particular, if one changes the `requires-python` to `>=3.8`, then both `main` and this PR produce similarly bad error messages. --- crates/uv/tests/lock.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/uv/tests/lock.rs b/crates/uv/tests/lock.rs index 31ef660bc0f9..27e03e041544 100644 --- a/crates/uv/tests/lock.rs +++ b/crates/uv/tests/lock.rs @@ -8662,7 +8662,7 @@ fn unconditional_overlapping_marker_disjoint_version_constraints() -> Result<()> ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because your project depends on datasets<2.19 and datasets>=2.19, we can conclude that your project's requirements are unsatisfiable. + ╰─▶ Because only datasets<2.19 is available and your project depends on datasets>=2.19, we can conclude that your project's requirements are unsatisfiable. "###); Ok(()) From a1f9262cfb2dfcc03ef7611fb68c658181bdd9bf Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 20 Aug 2024 14:05:09 -0400 Subject: [PATCH 06/15] uv/tests: update transformers ecosystem snapshot It is not clear whether this update is correct or not. Moreover, it's not clear whether the status quo is correct or not. The problem is that `transformers` is so big that it's very hard to understand what the right output is without a deeper investigation. One thing that is interesting is if fork prioritization is removed in this PR *and* on `main`, then the differences in this ecosystem test go away. We've decided for now to move forward with this update even though we're uncertain because this PR fixes a few outstanding correctness issues. --- .../ecosystem__transformers-lock-file.snap | 572 +++++++++--------- 1 file changed, 286 insertions(+), 286 deletions(-) diff --git a/crates/uv/tests/snapshots/ecosystem__transformers-lock-file.snap b/crates/uv/tests/snapshots/ecosystem__transformers-lock-file.snap index 02c259896376..59aec34fd392 100644 --- a/crates/uv/tests/snapshots/ecosystem__transformers-lock-file.snap +++ b/crates/uv/tests/snapshots/ecosystem__transformers-lock-file.snap @@ -5,8 +5,8 @@ expression: lock version = 1 requires-python = ">=3.9.0" resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -775,22 +775,22 @@ name = "datasets" version = "2.14.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", ] dependencies = [ - { name = "aiohttp", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "dill", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "huggingface-hub", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "multiprocess", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "numpy", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "packaging", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "pandas", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "pyarrow", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "pyyaml", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "requests", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "tqdm", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "xxhash", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "aiohttp", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "dill", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "huggingface-hub", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "multiprocess", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "numpy", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "packaging", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "pandas", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "pyarrow", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "pyyaml", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "requests", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "tqdm", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "xxhash", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1d/69/8cc725b5d38968fd118e4ce56a483b16e75b7793854c1a392ec4a34eeb31/datasets-2.14.4.tar.gz", hash = "sha256:ef29c2b5841de488cd343cfc26ab979bff77efa4d2285af51f1ad7db5c46a83b", size = 2178719 } wheels = [ @@ -802,7 +802,7 @@ name = "datasets" version = "2.20.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -818,21 +818,21 @@ resolution-markers = [ "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "aiohttp", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "dill", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "filelock", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "huggingface-hub", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "multiprocess", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "numpy", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "packaging", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "pandas", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "pyarrow", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "pyarrow-hotfix", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "pyyaml", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "requests", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "tqdm", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "xxhash", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "aiohttp", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "dill", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "filelock", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "huggingface-hub", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "multiprocess", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "numpy", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "packaging", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "pandas", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "pyarrow", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "pyarrow-hotfix", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "pyyaml", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "requests", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "tqdm", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "xxhash", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d5/59/b94bfb5f6225c4c931cd516390b3f006e232a036a48337f72889c6c9ab27/datasets-2.20.0.tar.gz", hash = "sha256:3c4dbcd27e0f642b9d41d20ff2efa721a5e04b32b2ca4009e0fc9139e324553f", size = 2225757 } wheels = [ @@ -940,8 +940,8 @@ wheels = [ [package.optional-dependencies] epath = [ - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, { name = "importlib-resources" }, { name = "typing-extensions" }, { name = "zipp" }, @@ -955,11 +955,11 @@ name = "evaluate" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "dill" }, - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["http"], marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, { name = "huggingface-hub" }, { name = "multiprocess" }, { name = "numpy" }, @@ -1088,7 +1088,7 @@ name = "flatbuffers" version = "2.0.7" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -1110,7 +1110,7 @@ name = "flatbuffers" version = "24.3.25" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", @@ -1214,7 +1214,7 @@ name = "fsspec" version = "2024.5.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -1236,7 +1236,7 @@ wheels = [ [package.optional-dependencies] http = [ - { name = "aiohttp", marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "aiohttp", marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, ] [[package]] @@ -1244,7 +1244,7 @@ name = "fsspec" version = "2024.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", ] sdist = { url = "https://files.pythonhosted.org/packages/90/b6/eba5024a9889fcfff396db543a34bef0ab9d002278f163129f9f01005960/fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49", size = 284584 } wheels = [ @@ -1253,7 +1253,7 @@ wheels = [ [package.optional-dependencies] http = [ - { name = "aiohttp", marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "aiohttp", marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, ] [[package]] @@ -1307,7 +1307,7 @@ name = "gast" version = "0.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -1329,7 +1329,7 @@ name = "gast" version = "0.6.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", @@ -1368,9 +1368,9 @@ name = "google-auth" version = "2.33.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cachetools", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "pyasn1-modules", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "rsa", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "cachetools", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "pyasn1-modules", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "rsa", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/28/4d/626b37c6bcc1f211aef23f47c49375072c0cb19148627d98c85e099acbc8/google_auth-2.33.0.tar.gz", hash = "sha256:d6a52342160d7290e334b4d47ba390767e4438ad0d45b7630774533e82655b95", size = 257157 } wheels = [ @@ -1382,8 +1382,8 @@ name = "google-auth-oauthlib" version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-auth", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "requests-oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "google-auth", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "requests-oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/0f/1772edb8d75ecf6280f1c7f51cbcebe274e8b17878b382f63738fd96cee5/google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263", size = 24970 } wheels = [ @@ -1560,8 +1560,8 @@ version = "0.24.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, { name = "packaging" }, { name = "pyyaml" }, { name = "requests" }, @@ -1683,8 +1683,8 @@ version = "0.4.13" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, { name = "numpy" }, { name = "opt-einsum" }, { name = "scipy" }, @@ -1696,8 +1696,8 @@ name = "jaxlib" version = "0.4.13" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, { name = "numpy" }, { name = "scipy" }, ] @@ -1825,7 +1825,7 @@ name = "keras" version = "2.7.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -1846,7 +1846,7 @@ name = "keras" version = "2.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", @@ -1867,8 +1867,8 @@ dependencies = [ { name = "packaging" }, { name = "regex" }, { name = "rich" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version < '3.10' and platform_system != 'Darwin' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13' and platform_system != 'Darwin')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and platform_system != 'Darwin'" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/da/bf/7f34bfd78555f8ce68f51f6583b4a91a279e34dee2013047e338529c3f8a/keras_nlp-0.14.4.tar.gz", hash = "sha256:abd5886efc60d52f0970ac43d3791c87624bfa8f7a7048a66f9dbcb2d1d28771", size = 331838 } wheels = [ @@ -1880,8 +1880,8 @@ name = "keras-preprocessing" version = "1.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/f1/b44337faca48874333769a29398fe4666686733c8880aa160b9fd5dfe600/Keras_Preprocessing-1.1.2.tar.gz", hash = "sha256:add82567c50c8bc648c14195bf544a5ce7c1f76761536956c3d2978970179ef3", size = 163598 } wheels = [ @@ -2180,13 +2180,13 @@ name = "ml-dtypes" version = "0.3.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/39/7d/8d85fcba868758b3a546e6914e727abd8f29ea6918079f816975c9eecd63/ml_dtypes-0.3.2.tar.gz", hash = "sha256:533059bc5f1764fac071ef54598db358c167c51a718f68f5bb55e3dee79d2967", size = 692014 } wheels = [ @@ -2213,7 +2213,7 @@ name = "ml-dtypes" version = "0.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -2226,7 +2226,7 @@ resolution-markers = [ "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dd/50/17ab8a66d66bdf55ff6dea6fe2df424061cee65c6d772abc871bb563f91b/ml_dtypes-0.4.0.tar.gz", hash = "sha256:eaf197e72f4f7176a19fe3cb8b61846b38c6757607e7bf9cd4b1d84cd3e74deb", size = 692650 } wheels = [ @@ -2736,8 +2736,8 @@ version = "1.18.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coloredlogs" }, - { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, { name = "numpy" }, { name = "packaging" }, { name = "protobuf" }, @@ -3256,7 +3256,7 @@ name = "pyasn1-modules" version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyasn1", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "pyasn1", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f7/00/e7bd1dec10667e3f2be602686537969a7ac92b0a7c5165be2e5875dc3971/pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6", size = 307859 } wheels = [ @@ -3633,8 +3633,8 @@ wheels = [ [package.optional-dependencies] tune = [ - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, { name = "pandas" }, { name = "pyarrow" }, { name = "requests" }, @@ -3757,8 +3757,8 @@ name = "requests-oauthlib" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "requests", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "requests", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650 } wheels = [ @@ -3945,7 +3945,7 @@ name = "rsa" version = "4.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyasn1", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "pyasn1", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/aa/65/7d973b89c4d2351d7fb232c2e452547ddfa243e93131e7cfa766da627b52/rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21", size = 29711 } wheels = [ @@ -4524,24 +4524,24 @@ name = "tensorboard" version = "2.15.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "google-auth", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "google-auth-oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "markdown", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "requests", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorboard-data-server", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "werkzeug", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "google-auth", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "google-auth-oauthlib", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "markdown", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "requests", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorboard-data-server", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "werkzeug", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/37/12/f6e9b9dcc310263cbd3948274e286538bd6800fd0c268850788f14a0c6d0/tensorboard-2.15.2-py3-none-any.whl", hash = "sha256:a6f6443728064d962caea6d34653e220e34ef8df764cb06a8212c17e1a8f0622", size = 5539713 }, @@ -4552,7 +4552,7 @@ name = "tensorboard" version = "2.17.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -4565,15 +4565,15 @@ resolution-markers = [ "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "markdown", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorboard-data-server", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "werkzeug", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "markdown", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorboard-data-server", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "werkzeug", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/0a/32/2e8545fb0592f33e3aca5951e8b01008b76d61b440658cbdc37b4eaebf0b/tensorboard-2.17.0-py3-none-any.whl", hash = "sha256:859a499a9b1fb68a058858964486627100b71fcb21646861c61d31846a6478fb", size = 5502603 }, @@ -4608,7 +4608,7 @@ name = "tensorflow" version = "2.7.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -4621,27 +4621,27 @@ resolution-markers = [ "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "gast", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "keras", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "keras-preprocessing", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-estimator", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "wheel", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "gast", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "keras", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "keras-preprocessing", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-estimator", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "wheel", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/e4/87/a0d05183bac49f2c246663ee740d311ee9bd812dd39062a99b1627bf7d8e/tensorflow-2.7.2-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:99a85258505130b1f3ce203f11b3bb3c95442edefec96c0b221ce0d6541a92c8", size = 213094106 }, @@ -4654,34 +4654,34 @@ name = "tensorflow" version = "2.15.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "packaging", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "packaging", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/9c/d3/904d5bf64305218ce19f81ff3b2cb872cf434a558443b4a9a5357924637a/tensorflow-2.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:91b51a507007d63a70b65be307d701088d15042a6399c0e2312b53072226e909", size = 236439313 }, @@ -4706,7 +4706,7 @@ name = "tensorflow-cpu" version = "2.7.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -4719,27 +4719,27 @@ resolution-markers = [ "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "gast", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "keras", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "keras-preprocessing", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-estimator", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "wheel", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "gast", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "keras", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "keras-preprocessing", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-estimator", version = "2.7.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "wheel", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/4a/55/b4697a6df0bff4d75d8aed38469d4c7e7c9669237391b58faca3fdc6257e/tensorflow_cpu-2.7.2-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:b6b51b49812fa062267f0547960d5cd54e23bfccd610960d2d37da802702e20a", size = 213094159 }, @@ -4752,34 +4752,34 @@ name = "tensorflow-cpu" version = "2.15.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "packaging", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "packaging", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/cc/dfb0195934918847611d0d1e0a2ad3f1f8a77876a9139b8976ebdd72854c/tensorflow_cpu-2.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:f211b011e812f827f5452b1d5f19865645c65df6e2a07d71118480c40887133e", size = 236439366 }, @@ -4798,28 +4798,28 @@ name = "tensorflow-cpu-aws" version = "2.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "absl-py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "astunparse", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "google-pasta", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "grpcio", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "h5py", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "libclang", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "opt-einsum", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "packaging", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "protobuf", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "setuptools", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "tensorflow-io-gcs-filesystem", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "termcolor", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "wrapt", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, + { name = "absl-py", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "astunparse", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "gast", version = "0.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "google-pasta", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "grpcio", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "h5py", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "libclang", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "numpy", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "opt-einsum", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "packaging", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "protobuf", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "setuptools", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "six", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "tensorflow-estimator", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "tensorflow-io-gcs-filesystem", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "termcolor", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, + { name = "wrapt", marker = "python_full_version >= '3.13' and platform_system != 'Darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f4/9c/74e7c37e2de31fb5ada8f3a166ceedacdb99fc9bcd88f606ec97bfc2b22e/tensorflow_cpu_aws-2.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c781d95cb8c58d47cb012b7b4e77b2f3e8d4d47b45926bc54976506fa0c037cc", size = 211831219 }, @@ -4832,7 +4832,7 @@ name = "tensorflow-estimator" version = "2.7.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -4853,7 +4853,7 @@ name = "tensorflow-estimator" version = "2.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", @@ -4869,8 +4869,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "protobuf" }, - { name = "tf-keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tf-keras", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "tf-keras", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tf-keras", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/e5/50/00dba77925bf2a0a1e45d7bcf8a69a1d2534fb4bb277d9010bd148d2235e/tensorflow_hub-0.16.1-py2.py3-none-any.whl", hash = "sha256:e10c184b3d08daeafada11ffea2dd46781725b6bef01fad1f74d6634ad05311f", size = 30771 }, @@ -4938,7 +4938,7 @@ name = "tensorflow-macos" version = "2.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "tensorflow-cpu-aws", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_machine == 'arm64' and platform_system == 'Linux')" }, + { name = "tensorflow-cpu-aws", marker = "(python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_machine == 'arm64' and platform_system == 'Linux')" }, { name = "tensorflow-intel", marker = "python_full_version >= '3.13' and platform_system == 'Windows'" }, ] wheels = [ @@ -4952,7 +4952,7 @@ name = "tensorflow-text" version = "2.7.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -4965,8 +4965,8 @@ resolution-markers = [ "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-hub", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-hub", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/cb/cc/3b8925fe8c14e558156d72c734fdb580569d3fcad67ce7dab71f62c048e2/tensorflow_text-2.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:53b5666c9ac019120cbc0f54ed3841b14660a1278cee1b071173253e008e9c07", size = 3979140 }, @@ -4979,15 +4979,15 @@ name = "tensorflow-text" version = "2.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or (python_full_version >= '3.13' and platform_machine != 'arm64') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, - { name = "tensorflow-hub", marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-macos", marker = "python_full_version >= '3.13' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and platform_machine != 'arm64') or (python_full_version >= '3.13' and platform_system != 'Darwin')" }, + { name = "tensorflow-hub", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-macos", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or (python_full_version >= '3.13' and platform_machine == 'arm64' and platform_system == 'Darwin')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/63/0f/d260a5cc7d86d25eb67bb919f957106b76af4a039f064526290d9cf5d93e/tensorflow_text-2.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db09ada839eb92aa23afc6c4e37257e6665d64ae048cfdce6374b5aa33f8f006", size = 6441513 }, @@ -5003,8 +5003,8 @@ name = "tensorstore" version = "0.1.64" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "ml-dtypes", version = "0.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "ml-dtypes", version = "0.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/b7/04d19901451da377f03a6e1ae3d9edf0b43af93309f558abf28b2e5aaceb/tensorstore-0.1.64.tar.gz", hash = "sha256:7fa89e90876fb5377efc54f3f37326a6fb83ec9e1326565819a75a4e80949886", size = 6510000 } @@ -5054,7 +5054,7 @@ name = "tf-keras" version = "2.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", @@ -5076,13 +5076,13 @@ name = "tf-keras" version = "2.15.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_system == 'Darwin'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')", ] dependencies = [ - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/03/a3/72e49c210fe545159c98842f110f024195f8efefc2e310f8eac77e3d599e/tf_keras-2.15.1.tar.gz", hash = "sha256:40ab605cecc7759c657cb2bccd9efaacd6fc2369a6c1eba8053890afeac46886", size = 1251021 } wheels = [ @@ -5094,7 +5094,7 @@ name = "tf2onnx" version = "1.8.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", + "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_system == 'Darwin'", "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.10.*' and platform_system != 'Darwin' and platform_system != 'Linux')", @@ -5110,11 +5110,11 @@ resolution-markers = [ ] dependencies = [ { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, - { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "numpy", marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "onnx", marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "requests", marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "six", marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, + { name = "flatbuffers", version = "24.3.25", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "numpy", marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "onnx", marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "requests", marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "six", marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/db/32/33ce509a79c207a39cf04bfa3ec3353da15d1e6553a6ad912f117cc29130/tf2onnx-1.8.4-py3-none-any.whl", hash = "sha256:1ebabb96c914da76e23222b6107a8b248a024bf259d77f027e6690099512d457", size = 345298 }, @@ -5125,15 +5125,15 @@ name = "tf2onnx" version = "1.14.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'", + "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'", "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')", ] dependencies = [ - { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, - { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, - { name = "onnx", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, - { name = "requests", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, - { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "flatbuffers", version = "2.0.7", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, + { name = "numpy", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, + { name = "onnx", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, + { name = "requests", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, + { name = "six", marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/67/de/debad55cb4454d1117b58029c44c04cb993c29b8317d2d609178dbce4a72/tf2onnx-1.14.0-py3-none-any.whl", hash = "sha256:a9721a38020260e5ee9d6396295edbbfcaedd22c07cfd6f2cda2698defde9b63", size = 451228 }, @@ -5277,8 +5277,8 @@ version = "2.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, - { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, - { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, + { name = "fsspec", version = "2024.5.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, + { name = "fsspec", version = "2024.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, { name = "jinja2" }, { name = "networkx" }, { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and platform_system == 'Linux'" }, @@ -5417,8 +5417,8 @@ accelerate = [ ] agents = [ { name = "accelerate" }, - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "diffusers" }, { name = "opencv-python" }, { name = "pillow" }, @@ -5446,12 +5446,12 @@ all = [ { name = "ray", extra = ["tune"] }, { name = "sentencepiece" }, { name = "sigopt" }, - { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, { name = "timm" }, { name = "tokenizers" }, { name = "torch" }, @@ -5475,8 +5475,8 @@ deepspeed-testing = [ { name = "accelerate" }, { name = "beautifulsoup4" }, { name = "cookiecutter" }, - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "deepspeed" }, { name = "dill" }, { name = "evaluate" }, @@ -5498,8 +5498,8 @@ deepspeed-testing = [ { name = "sacrebleu" }, { name = "sacremoses" }, { name = "sentencepiece" }, - { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, { name = "timeout-decorator" }, ] dev-dependencies = [ @@ -5508,8 +5508,8 @@ dev-dependencies = [ { name = "beautifulsoup4" }, { name = "codecarbon" }, { name = "cookiecutter" }, - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "decord" }, { name = "dill" }, { name = "evaluate" }, @@ -5553,14 +5553,14 @@ dev-dependencies = [ { name = "sigopt" }, { name = "sudachidict-core" }, { name = "sudachipy" }, - { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tensorboard", version = "2.15.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorboard", version = "2.17.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, { name = "timeout-decorator" }, { name = "timm" }, { name = "tokenizers" }, @@ -5593,12 +5593,12 @@ docs = [ { name = "ray", extra = ["tune"] }, { name = "sentencepiece" }, { name = "sigopt" }, - { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, { name = "timm" }, { name = "tokenizers" }, { name = "torch" }, @@ -5644,8 +5644,8 @@ onnx = [ { name = "onnxconverter-common" }, { name = "onnxruntime" }, { name = "onnxruntime-tools" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, ] onnxruntime = [ { name = "onnxruntime" }, @@ -5655,8 +5655,8 @@ optuna = [ { name = "optuna" }, ] quality = [ - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "gitpython" }, { name = "hf-doc-builder" }, { name = "isort" }, @@ -5667,8 +5667,8 @@ ray = [ { name = "ray", extra = ["tune"] }, ] retrieval = [ - { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'" }, - { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'aarch64' or platform_system != 'Linux' or python_full_version >= '3.10'" }, + { name = "datasets", version = "2.14.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin'" }, + { name = "datasets", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'" }, { name = "faiss-cpu" }, ] sagemaker = [ @@ -5700,22 +5700,22 @@ speech = [ tf = [ { name = "keras-nlp" }, { name = "onnxconverter-common" }, - { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tensorflow", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, ] tf-cpu = [ { name = "keras-nlp" }, { name = "onnxconverter-common" }, - { name = "tensorflow-cpu", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-cpu", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, - { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.13'" }, - { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and platform_system == 'Linux') or python_full_version >= '3.10'" }, - { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'aarch64') or (python_full_version < '3.10' and platform_system != 'Linux')" }, + { name = "tensorflow-cpu", version = "2.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-cpu", version = "2.15.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tensorflow-text", version = "2.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin') or (python_full_version >= '3.10' and python_full_version < '3.13')" }, + { name = "tensorflow-text", version = "2.15.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.13'" }, + { name = "tf2onnx", version = "1.8.4", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'arm64' and platform_system == 'Darwin') or python_full_version >= '3.10'" }, + { name = "tf2onnx", version = "1.14.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.10' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_system != 'Darwin')" }, ] tf-speech = [ { name = "kenlm" }, From 14fc268618cf83e346c9999fed8aceeccfb9de57 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 20 Aug 2024 14:10:45 -0400 Subject: [PATCH 07/15] uv/tests: another update to error messages Unlike the previous update, this message is specifically referring to a fork's markers inside the resolver. We probably *could* massage the message to be simplified with respect to requires-python, but it's not obvious to me that that is the right thing to do. --- crates/uv/tests/branching_urls.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/uv/tests/branching_urls.rs b/crates/uv/tests/branching_urls.rs index 63702fb46d57..97f6d6656ace 100644 --- a/crates/uv/tests/branching_urls.rs +++ b/crates/uv/tests/branching_urls.rs @@ -67,7 +67,7 @@ fn branching_urls_overlapping() -> 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.11.*'`: - 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 "### @@ -723,7 +723,7 @@ fn branching_urls_of_different_sources_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.11.*'`: - git+https://github.com/pytest-dev/iniconfig@93f5930e668c0d1ddf4597e38dd0dea4e2665e7a - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl "### From 8f3c511d9ace844ebc89feda725e607d477b4072 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 21 Aug 2024 14:29:40 -0400 Subject: [PATCH 08/15] uv-resolver: update snapshot tests with new Debug repr for Dependency A `Dependency` now has both "simplified" and "complexified" markers, so just update the snapshots to match the new reality. --- ...__lock__tests__missing_dependency_source_unambiguous.snap | 5 ++++- ...tests__missing_dependency_source_version_unambiguous.snap | 5 ++++- ..._lock__tests__missing_dependency_version_unambiguous.snap | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_unambiguous.snap b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_unambiguous.snap index c4b0e734bab4..3b1e8c307385 100644 --- a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_unambiguous.snap +++ b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_unambiguous.snap @@ -129,7 +129,10 @@ Ok( ), }, extra: {}, - marker: true, + simplified_marker: SimplifiedMarkerTree( + true, + ), + complexified_marker: python_full_version >= '3.12', }, ], optional_dependencies: {}, diff --git a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_version_unambiguous.snap b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_version_unambiguous.snap index c4b0e734bab4..3b1e8c307385 100644 --- a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_version_unambiguous.snap +++ b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_version_unambiguous.snap @@ -129,7 +129,10 @@ Ok( ), }, extra: {}, - marker: true, + simplified_marker: SimplifiedMarkerTree( + true, + ), + complexified_marker: python_full_version >= '3.12', }, ], optional_dependencies: {}, diff --git a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_version_unambiguous.snap b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_version_unambiguous.snap index c4b0e734bab4..3b1e8c307385 100644 --- a/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_version_unambiguous.snap +++ b/crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_version_unambiguous.snap @@ -129,7 +129,10 @@ Ok( ), }, extra: {}, - marker: true, + simplified_marker: SimplifiedMarkerTree( + true, + ), + complexified_marker: python_full_version >= '3.12', }, ], optional_dependencies: {}, From 4e3c10acdce47ca648aeaac97188c245b52e7eac Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 13:43:42 -0400 Subject: [PATCH 09/15] uv/tests: update snapshot for regression test The output no longer results in installig two different versions of astroid unconditionally on Python 3.10. Fixes #6269 --- crates/uv/tests/pip_compile.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index 7d00349969a1..0e29ce718ac0 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12071,7 +12071,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 + astroid==2.13.5 ; python_full_version >= '3.11' # via pylint astroid==3.1.0 ; python_full_version < '3.11' # via pylint @@ -12101,7 +12101,7 @@ exceptiongroup==1.0.0rc8 # via pylint jedi==0.19.1 # via ipython - lazy-object-proxy==1.10.0 + lazy-object-proxy==1.10.0 ; python_full_version >= '3.11' # via astroid mako==1.3.2 # via alembic @@ -12125,7 +12125,7 @@ exceptiongroup==1.0.0rc8 # via stack-data pygments==2.17.2 # via ipython - pylint==2.15.8 + pylint==2.15.8 ; python_full_version >= '3.11' # via -r requirements.in pylint==3.1.0 ; python_full_version < '3.11' # via -r requirements.in @@ -12149,7 +12149,7 @@ exceptiongroup==1.0.0rc8 # sqlalchemy wcwidth==0.2.13 # via prompt-toolkit - wrapt==1.16.0 + wrapt==1.16.0 ; python_full_version >= '3.11' # via astroid ----- stderr ----- From af65193c02bbb58b04ae5ef84cdce51d507b8d38 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 13:45:23 -0400 Subject: [PATCH 10/15] uv/tests: update snapshot for regression test The `tomli` dependency is now included for `python_version <= 3.11`, which is what is expected. Fixes #6412 --- crates/uv/tests/pip_compile.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index 0e29ce718ac0..53fd3e930ae0 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12221,7 +12221,7 @@ matplotlib # via pandas six==1.16.0 # via python-dateutil - tomli==2.0.1 ; python_full_version == '3.11' + tomli==2.0.1 ; python_full_version <= '3.11' # via coverage tzdata==2024.1 # via pandas From 33514a0f15c28e8c3c7e9440966dc1ebf10b0588 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 13:46:40 -0400 Subject: [PATCH 11/15] uv/tests: update snapshot for regression test The `importlib-metadata` is no longer unconditionally repeated in the output for Python 3.10 (or Python 3.7). Fixes #6836 --- crates/uv/tests/pip_compile.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index 53fd3e930ae0..a974aba77d4b 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12259,7 +12259,7 @@ fn importlib_metadata_not_repeated() -> Result<()> { # via build importlib-metadata==6.7.0 ; python_full_version < '3.10' # via build - importlib-metadata==7.1.0 ; python_full_version < '3.10.2' + importlib-metadata==7.1.0 ; python_full_version >= '3.10' and python_full_version < '3.10.2' # via build packaging==24.0 # via build @@ -12273,7 +12273,7 @@ fn importlib_metadata_not_repeated() -> Result<()> { # via importlib-metadata zipp==3.15.0 ; python_full_version < '3.10' # via importlib-metadata - zipp==3.18.1 ; python_full_version < '3.10.2' + zipp==3.18.1 ; python_full_version >= '3.10' and python_full_version < '3.10.2' # via importlib-metadata ----- stderr ----- From a307721c900137578f0f667967106bb6847b9049 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 14:20:21 -0400 Subject: [PATCH 12/15] uv/tests: fix windows-only dependency filter Previously we were using `[+-~]`, but this includes the full range of characters from `+` to `~`. Incidentally, this does include `-`. We instead rewrite this as `[-+~]`, which probably matches the intent. --- crates/uv/tests/common/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/uv/tests/common/mod.rs b/crates/uv/tests/common/mod.rs index d255a7c26296..1d1e3841fd54 100644 --- a/crates/uv/tests/common/mod.rs +++ b/crates/uv/tests/common/mod.rs @@ -1039,10 +1039,10 @@ pub fn run_and_format_with_status>( if let Some(windows_filters) = windows_filters { // The optional leading +/-/~ is for install logs, the optional next line is for lockfiles let windows_only_deps = [ - ("( [+-~] )?colorama==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), - ("( [+-~] )?colorama==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), - ("( [+-~] )?tzdata==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), - ("( [+-~] )?tzdata==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), + ("( [-+~] )?colorama==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), + ("( [-+~] )?colorama==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), + ("( [-+~] )?tzdata==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), + ("( [-+~] )?tzdata==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), ]; let mut removed_packages = 0; for windows_only_dep in windows_only_deps { From def7a1766facb6e19ab0c6927ba91a7e9551f918 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 14:38:58 -0400 Subject: [PATCH 13/15] uv/tests: remove double-escaping The key change here is to use raw strings so that we don't need to double-escape things like `\d`. And in particular, we rely on the fact that `"\n"` and `r"\n"` are precisely equivalent when fed to `Regex::new` in the `regex` crate. --- crates/uv/tests/common/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/uv/tests/common/mod.rs b/crates/uv/tests/common/mod.rs index 1d1e3841fd54..5f4a8316d89e 100644 --- a/crates/uv/tests/common/mod.rs +++ b/crates/uv/tests/common/mod.rs @@ -1039,10 +1039,10 @@ pub fn run_and_format_with_status>( if let Some(windows_filters) = windows_filters { // The optional leading +/-/~ is for install logs, the optional next line is for lockfiles let windows_only_deps = [ - ("( [-+~] )?colorama==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), - ("( [-+~] )?colorama==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), - ("( [-+~] )?tzdata==\\d+(\\.[\\d+])+( \\\\\n --hash=.*)?\n( # via .*\n)?"), - ("( [-+~] )?tzdata==\\d+(\\.[\\d+])+(\\s+# via .*)?\n"), + (r"( [-+~] )?colorama==\d+(\.[\d+])+( \n --hash=.*)?\n( # via .*\n)?"), + (r"( [-+~] )?colorama==\d+(\.[\d+])+(\s+# via .*)?\n"), + (r"( [-+~] )?tzdata==\d+(\.[\d+])+( \n --hash=.*)?\n( # via .*\n)?"), + (r"( [-+~] )?tzdata==\d+(\.[\d+])+(\s+# via .*)?\n"), ]; let mut removed_packages = 0; for windows_only_dep in windows_only_deps { From 8e1535c723bed202833c0b30bb6718d37b6964f7 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 14:40:35 -0400 Subject: [PATCH 14/15] uv/tests: add test specific filters This is to account for slight differences on our Windows CI. --- crates/uv/tests/pip_compile.rs | 70 ++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index a974aba77d4b..9afdf27d5b65 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12058,12 +12058,26 @@ exceptiongroup==1.0.0rc8 ", )?; - uv_snapshot!(context - .pip_compile() - .arg("requirements.in") - .arg("-c").arg("constraints.txt") - .arg("--universal") - .arg("-p").arg("3.10"), @r###" + let filters: Vec<_> = [ + // 3.10 may not be installed + ( + "warning: The requested Python version 3.10 is not available; .* will be used to build dependencies instead.\n", + "", + ), + ] + .into_iter() + .chain(context.filters()) + .collect(); + + uv_snapshot!( + filters, + context + .pip_compile() + .arg("requirements.in") + .arg("-c").arg("constraints.txt") + .arg("--universal") + .arg("-p").arg("3.10"), + @r###" success: true exit_code: 0 ----- stdout ----- @@ -12173,9 +12187,25 @@ matplotlib ", )?; - uv_snapshot!(context - .pip_compile() - .arg("requirements.in").arg("--universal").arg("-p").arg("3.8"), @r###" + let filters: Vec<_> = [ + // 3.8 may not be installed + ( + "warning: The requested Python version 3.8 is not available; .* will be used to build dependencies instead.\n", + "", + ), + ] + .into_iter() + .chain(context.filters()) + .collect(); + + uv_snapshot!( + filters, + context + .pip_compile() + .arg("requirements.in") + .arg("--universal") + .arg("-p").arg("3.8"), + @r###" success: true exit_code: 0 ----- stdout ----- @@ -12245,9 +12275,25 @@ fn importlib_metadata_not_repeated() -> Result<()> { let requirements_in = context.temp_dir.child("requirements.in"); requirements_in.write_str("build")?; - uv_snapshot!(context - .pip_compile() - .arg("requirements.in").arg("--universal").arg("-p").arg("3.7"), @r###" + let filters: Vec<_> = [ + // 3.7 may not be installed + ( + "warning: The requested Python version 3.7 is not available; .* will be used to build dependencies instead.\n", + "", + ), + ] + .into_iter() + .chain(context.filters()) + .collect(); + + uv_snapshot!( + filters, + context + .pip_compile() + .arg("requirements.in") + .arg("--universal") + .arg("-p").arg("3.7"), + @r###" success: true exit_code: 0 ----- stdout ----- From 92e68ddb57dd443d2503f3ded2ce530dc689207a Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Tue, 3 Sep 2024 14:49:38 -0400 Subject: [PATCH 15/15] uv/tests: remove double-escaping And otherwise make the regexes a little more robust. --- crates/uv/tests/common/mod.rs | 8 ++++---- crates/uv/tests/pip_compile.rs | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/crates/uv/tests/common/mod.rs b/crates/uv/tests/common/mod.rs index 5f4a8316d89e..565af933fc7e 100644 --- a/crates/uv/tests/common/mod.rs +++ b/crates/uv/tests/common/mod.rs @@ -1039,10 +1039,10 @@ pub fn run_and_format_with_status>( if let Some(windows_filters) = windows_filters { // The optional leading +/-/~ is for install logs, the optional next line is for lockfiles let windows_only_deps = [ - (r"( [-+~] )?colorama==\d+(\.[\d+])+( \n --hash=.*)?\n( # via .*\n)?"), - (r"( [-+~] )?colorama==\d+(\.[\d+])+(\s+# via .*)?\n"), - (r"( [-+~] )?tzdata==\d+(\.[\d+])+( \n --hash=.*)?\n( # via .*\n)?"), - (r"( [-+~] )?tzdata==\d+(\.[\d+])+(\s+# via .*)?\n"), + (r"( ?[-+~] ?)?colorama==\d+(\.\d+)+( [\\]\n\s+--hash=.*)?\n(\s+# via .*\n)?"), + (r"( ?[-+~] ?)?colorama==\d+(\.\d+)+(\s+[-+~]?\s+# via .*)?\n"), + (r"( ?[-+~] ?)?tzdata==\d+(\.\d+)+( [\\]\n\s+--hash=.*)?\n(\s+# via .*\n)?"), + (r"( ?[-+~] ?)?tzdata==\d+(\.\d+)+(\s+[-+~]?\s+# via .*)?\n"), ]; let mut removed_packages = 0; for windows_only_dep in windows_only_deps { diff --git a/crates/uv/tests/pip_compile.rs b/crates/uv/tests/pip_compile.rs index 9afdf27d5b65..edafa06068ef 100644 --- a/crates/uv/tests/pip_compile.rs +++ b/crates/uv/tests/pip_compile.rs @@ -12193,6 +12193,20 @@ matplotlib "warning: The requested Python version 3.8 is not available; .* will be used to build dependencies instead.\n", "", ), + // For Windows, `tzdata` isn't included in the resolution. + // + // This should probably be investigated. It is possible this + // is a correct/expected result. For example, if there is a + // dependency that is sdist-only and has dynamic platform + // dependent dependencies. But if not, `tzdata` should still + // show up in the lock file. + // + // In any case, we filter `tzdata` out of the snapshot entirely + // on all platforms for this reason. + (r"( ?[-+~] ?)?tzdata==\d+(\.\d+)+(\s+[-+~]?\s+# via .*)?\n", ""), + // And because tzdata is omitted on Windows, the number of deps + // is different too. So filter that out too. + (r"Resolved 19 packages", "Resolved [NUM] packages"), ] .into_iter() .chain(context.filters()) @@ -12253,13 +12267,11 @@ matplotlib # via python-dateutil tomli==2.0.1 ; python_full_version <= '3.11' # via coverage - tzdata==2024.1 - # via pandas zipp==3.18.1 ; python_full_version < '3.10' # via importlib-resources ----- stderr ----- - Resolved 19 packages in [TIME] + Resolved [NUM] packages in [TIME] "###); Ok(())