Use sets rather than vectors for lockfile requirements (#6107)

## Summary

Ensures that `--locked` is robust to reordering and duplicates.
This commit is contained in:
Charlie Marsh 2024-08-15 09:00:35 -04:00 committed by GitHub
parent fd0daae969
commit 29179570a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 500 additions and 349 deletions

View file

@ -37,7 +37,18 @@ use crate::{
/// // VersionSpecifiers derefs into a list of specifiers
/// assert_eq!(version_specifiers.iter().position(|specifier| *specifier.operator() == Operator::LessThan), Some(1));
/// ```
#[derive(Eq, PartialEq, Debug, Clone, Hash, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)]
#[derive(
Eq,
PartialEq,
Ord,
PartialOrd,
Debug,
Clone,
Hash,
rkyv::Archive,
rkyv::Deserialize,
rkyv::Serialize,
)]
#[archive(check_bytes)]
#[archive_attr(derive(Debug))]
#[cfg_attr(feature = "pyo3", pyclass(sequence))]

View file

@ -35,7 +35,9 @@ pub enum RequirementError {
///
/// The main change is using [`RequirementSource`] to represent all supported package sources over
/// [`VersionOrUrl`], which collapses all URL sources into a single stringly type.
#[derive(Hash, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
#[derive(
Hash, Debug, Clone, Eq, PartialEq, Ord, PartialOrd, serde::Serialize, serde::Deserialize,
)]
pub struct Requirement {
pub name: PackageName,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
@ -294,7 +296,9 @@ impl Display for Requirement {
/// We store both the parsed fields (such as the plain url and the subdirectory) and the joined
/// PEP 508 style url (e.g. `file:///<path>#subdirectory=<subdirectory>`) since we need both in
/// different locations.
#[derive(Hash, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
#[derive(
Hash, Debug, Clone, Eq, PartialEq, Ord, PartialOrd, serde::Serialize, serde::Deserialize,
)]
#[serde(try_from = "RequirementSourceWire", into = "RequirementSourceWire")]
pub enum RequirementSource {
/// The requirement has a version specifier, such as `foo >1,<2`.

View file

@ -680,9 +680,9 @@ impl Lock {
// Validate that the lockfile was generated with the same root members.
{
let expected = members;
let expected = members.iter().cloned().collect::<BTreeSet<_>>();
let actual = &self.manifest.members;
if expected != actual {
if expected != *actual {
debug!(
"Mismatched members:\n expected: {:?}\n found: {:?}",
expected, actual
@ -693,12 +693,12 @@ impl Lock {
// Validate that the lockfile was generated with the same constraints.
{
let expected: Vec<_> = constraints
let expected: BTreeSet<_> = constraints
.iter()
.cloned()
.map(|requirement| normalize_requirement(requirement, workspace))
.collect();
let actual: Vec<_> = self
let actual: BTreeSet<_> = self
.manifest
.constraints
.iter()
@ -716,12 +716,12 @@ impl Lock {
// Validate that the lockfile was generated with the same overrides.
{
let expected: Vec<_> = overrides
let expected: BTreeSet<_> = overrides
.iter()
.cloned()
.map(|requirement| normalize_requirement(requirement, workspace))
.collect();
let actual: Vec<_> = self
let actual: BTreeSet<_> = self
.manifest
.overrides
.iter()
@ -772,13 +772,13 @@ impl Lock {
// Validate the `requires-dist` metadata.
{
let expected: Vec<_> = archive
let expected: BTreeSet<_> = archive
.metadata
.requires_dist
.into_iter()
.map(|requirement| normalize_requirement(requirement, workspace))
.collect();
let actual: Vec<_> = package
let actual: BTreeSet<_> = package
.metadata
.requires_dist
.iter()
@ -797,7 +797,7 @@ impl Lock {
// Validate the `dev-dependencies` metadata.
{
let expected: BTreeMap<GroupName, Vec<Requirement>> = archive
let expected: BTreeMap<GroupName, BTreeSet<Requirement>> = archive
.metadata
.dev_dependencies
.into_iter()
@ -811,7 +811,7 @@ impl Lock {
)
})
.collect();
let actual: BTreeMap<GroupName, Vec<Requirement>> = package
let actual: BTreeMap<GroupName, BTreeSet<Requirement>> = package
.metadata
.requires_dev
.iter()
@ -888,25 +888,25 @@ struct ResolverOptions {
pub struct ResolverManifest {
/// The workspace members included in the lockfile.
#[serde(default)]
members: Vec<PackageName>,
members: BTreeSet<PackageName>,
/// The constraints provided to the resolver.
#[serde(default)]
constraints: Vec<Requirement>,
constraints: BTreeSet<Requirement>,
/// The overrides provided to the resolver.
#[serde(default)]
overrides: Vec<Requirement>,
overrides: BTreeSet<Requirement>,
}
impl ResolverManifest {
pub fn new(
members: Vec<PackageName>,
constraints: Vec<Requirement>,
overrides: Vec<Requirement>,
members: impl IntoIterator<Item = PackageName>,
constraints: impl IntoIterator<Item = Requirement>,
overrides: impl IntoIterator<Item = Requirement>,
) -> Self {
Self {
members,
constraints,
overrides,
members: members.into_iter().collect(),
constraints: constraints.into_iter().collect(),
overrides: overrides.into_iter().collect(),
}
}
}
@ -1010,14 +1010,24 @@ impl Package {
let sdist = SourceDist::from_annotated_dist(&id, annotated_dist)?;
let wheels = Wheel::from_annotated_dist(annotated_dist)?;
let requires_dist = if id.source.is_immutable() {
vec![]
BTreeSet::default()
} else {
annotated_dist.metadata.requires_dist.clone()
annotated_dist
.metadata
.requires_dist
.iter()
.cloned()
.collect()
};
let requires_dev = if id.source.is_immutable() {
BTreeMap::default()
} else {
annotated_dist.metadata.dev_dependencies.clone()
annotated_dist
.metadata
.dev_dependencies
.iter()
.map(|(k, v)| (k.clone(), v.iter().cloned().collect()))
.collect()
};
Ok(Package {
id,
@ -1029,7 +1039,6 @@ impl Package {
dev_dependencies: BTreeMap::default(),
metadata: PackageMetadata {
requires_dist,
requires_dev,
},
})
@ -1511,9 +1520,9 @@ struct PackageWire {
#[serde(rename_all = "kebab-case")]
struct PackageMetadata {
#[serde(default)]
requires_dist: Vec<Requirement>,
requires_dist: BTreeSet<Requirement>,
#[serde(default)]
requires_dev: BTreeMap<GroupName, Vec<Requirement>>,
requires_dev: BTreeMap<GroupName, BTreeSet<Requirement>>,
}
impl PackageWire {

View file

@ -58,7 +58,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -77,9 +77,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -65,7 +65,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -84,9 +84,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -63,7 +63,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -80,9 +80,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -51,7 +51,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -109,7 +109,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -139,9 +139,9 @@ Ok(
}: 1,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -51,7 +51,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -109,7 +109,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -139,9 +139,9 @@ Ok(
}: 1,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -51,7 +51,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -109,7 +109,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -139,9 +139,9 @@ Ok(
}: 1,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -37,7 +37,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -61,9 +61,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -35,7 +35,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -57,9 +57,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -30,7 +30,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -47,9 +47,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -30,7 +30,7 @@ Ok(
optional_dependencies: {},
dev_dependencies: {},
metadata: PackageMetadata {
requires_dist: [],
requires_dist: {},
requires_dev: {},
},
},
@ -47,9 +47,9 @@ Ok(
}: 0,
},
manifest: ResolverManifest {
members: [],
constraints: [],
overrides: [],
members: {},
constraints: {},
overrides: {},
},
},
)

View file

@ -228,8 +228,8 @@ fn root_package_splits_transitive_too() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "anyio", marker = "python_version >= '3.12'", specifier = "==4.3.0" },
{ name = "anyio", marker = "python_version < '3.12'", specifier = "==4.2.0" },
{ name = "anyio", marker = "python_version >= '3.12'", specifier = "==4.3.0" },
{ name = "b", directory = "b" },
]
@ -424,8 +424,8 @@ fn root_package_splits_other_dependencies_too() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "anyio", marker = "python_version >= '3.12'", specifier = "==4.3.0" },
{ name = "anyio", marker = "python_version < '3.12'", specifier = "==4.2.0" },
{ name = "anyio", marker = "python_version >= '3.12'", specifier = "==4.3.0" },
{ name = "b1", marker = "python_version < '3.12'", directory = "b1" },
{ name = "b2", marker = "python_version >= '3.12'", directory = "b2" },
]
@ -791,8 +791,8 @@ fn dont_pre_visit_url_packages() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "c", specifier = "==0.1.0" },
{ name = "b", directory = "b" },
{ name = "c", specifier = "==0.1.0" },
]
[[package]]

View file

@ -1926,12 +1926,12 @@ fn update() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "certifi", specifier = ">=2017.4.17" },
{ name = "chardet", marker = "extra == 'use-chardet-on-py3'", specifier = "<6,>=3.0.2" },
{ name = "charset-normalizer", specifier = "<4,>=2" },
{ name = "idna", specifier = "<4,>=2.5" },
{ name = "urllib3", specifier = "<3,>=1.21.1" },
{ name = "certifi", specifier = ">=2017.4.17" },
{ name = "pysocks", marker = "extra == 'socks'", specifier = "!=1.5.7,>=1.5.6" },
{ name = "chardet", marker = "extra == 'use-chardet-on-py3'", specifier = "<6,>=3.0.2" },
{ name = "urllib3", specifier = "<3,>=1.21.1" },
]
[[package]]

View file

@ -854,24 +854,24 @@ fn lock_wheel_url() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "idna", specifier = ">=2.8" },
{ name = "sniffio", specifier = ">=1.1" },
{ name = "exceptiongroup", marker = "python_version < '3.11'", specifier = ">=1.0.2" },
{ name = "typing-extensions", marker = "python_version < '3.11'", specifier = ">=4.1" },
{ name = "packaging", marker = "extra == 'doc'" },
{ name = "sphinx", marker = "extra == 'doc'", specifier = ">=7" },
{ name = "sphinx-rtd-theme", marker = "extra == 'doc'" },
{ name = "sphinx-autodoc-typehints", marker = "extra == 'doc'", specifier = ">=1.2.0" },
{ name = "anyio", extras = ["trio"], marker = "extra == 'test'" },
{ name = "coverage", extras = ["toml"], marker = "extra == 'test'", specifier = ">=7" },
{ name = "exceptiongroup", marker = "python_version < '3.11'", specifier = ">=1.0.2" },
{ name = "exceptiongroup", marker = "extra == 'test'", specifier = ">=1.2.0" },
{ name = "hypothesis", marker = "extra == 'test'", specifier = ">=4.0" },
{ name = "idna", specifier = ">=2.8" },
{ name = "packaging", marker = "extra == 'doc'" },
{ name = "psutil", marker = "extra == 'test'", specifier = ">=5.9" },
{ name = "pytest", marker = "extra == 'test'", specifier = ">=7.0" },
{ name = "pytest-mock", marker = "extra == 'test'", specifier = ">=3.6.1" },
{ name = "trustme", marker = "extra == 'test'" },
{ name = "uvloop", marker = "platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test'", specifier = ">=0.17" },
{ name = "sniffio", specifier = ">=1.1" },
{ name = "sphinx", marker = "extra == 'doc'", specifier = ">=7" },
{ name = "sphinx-autodoc-typehints", marker = "extra == 'doc'", specifier = ">=1.2.0" },
{ name = "sphinx-rtd-theme", marker = "extra == 'doc'" },
{ name = "trio", marker = "extra == 'trio'", specifier = ">=0.23" },
{ name = "trustme", marker = "extra == 'test'" },
{ name = "typing-extensions", marker = "python_version < '3.11'", specifier = ">=4.1" },
{ name = "uvloop", marker = "platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test'", specifier = ">=0.17" },
]
[[package]]
@ -987,24 +987,24 @@ fn lock_sdist_url() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "idna", specifier = ">=2.8" },
{ name = "sniffio", specifier = ">=1.1" },
{ name = "exceptiongroup", marker = "python_version < '3.11'", specifier = ">=1.0.2" },
{ name = "typing-extensions", marker = "python_version < '3.11'", specifier = ">=4.1" },
{ name = "packaging", marker = "extra == 'doc'" },
{ name = "sphinx", marker = "extra == 'doc'", specifier = ">=7" },
{ name = "sphinx-rtd-theme", marker = "extra == 'doc'" },
{ name = "sphinx-autodoc-typehints", marker = "extra == 'doc'", specifier = ">=1.2.0" },
{ name = "anyio", extras = ["trio"], marker = "extra == 'test'" },
{ name = "coverage", extras = ["toml"], marker = "extra == 'test'", specifier = ">=7" },
{ name = "exceptiongroup", marker = "python_version < '3.11'", specifier = ">=1.0.2" },
{ name = "exceptiongroup", marker = "extra == 'test'", specifier = ">=1.2.0" },
{ name = "hypothesis", marker = "extra == 'test'", specifier = ">=4.0" },
{ name = "idna", specifier = ">=2.8" },
{ name = "packaging", marker = "extra == 'doc'" },
{ name = "psutil", marker = "extra == 'test'", specifier = ">=5.9" },
{ name = "pytest", marker = "extra == 'test'", specifier = ">=7.0" },
{ name = "pytest-mock", marker = "extra == 'test'", specifier = ">=3.6.1" },
{ name = "trustme", marker = "extra == 'test'" },
{ name = "uvloop", marker = "platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test'", specifier = ">=0.17" },
{ name = "sniffio", specifier = ">=1.1" },
{ name = "sphinx", marker = "extra == 'doc'", specifier = ">=7" },
{ name = "sphinx-autodoc-typehints", marker = "extra == 'doc'", specifier = ">=1.2.0" },
{ name = "sphinx-rtd-theme", marker = "extra == 'doc'" },
{ name = "trio", marker = "extra == 'trio'", specifier = ">=0.23" },
{ name = "trustme", marker = "extra == 'test'" },
{ name = "typing-extensions", marker = "python_version < '3.11'", specifier = ">=4.1" },
{ name = "uvloop", marker = "platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test'", specifier = ">=0.17" },
]
[[package]]
@ -2073,8 +2073,8 @@ fn lock_upgrade_log() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "markupsafe", specifier = "<2" },
{ name = "iniconfig" },
{ name = "markupsafe", specifier = "<2" },
]
"###
);
@ -3797,12 +3797,12 @@ fn lock_python_version_marker_complement() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "iniconfig", marker = "python_version >= '3.10'" },
{ name = "iniconfig", marker = "python_version < '3.10'" },
{ name = "attrs", marker = "python_version > '3.10'" },
{ name = "attrs", marker = "python_version <= '3.10'" },
{ name = "typing-extensions", marker = "python_full_version > '3.10'" },
{ name = "attrs", marker = "python_version > '3.10'" },
{ name = "iniconfig", marker = "python_version < '3.10'" },
{ name = "iniconfig", marker = "python_version >= '3.10'" },
{ name = "typing-extensions", marker = "python_full_version <= '3.10'" },
{ name = "typing-extensions", marker = "python_full_version > '3.10'" },
]
[[package]]
@ -4332,8 +4332,8 @@ fn lock_cycles() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "testtools", specifier = "==2.3.0" },
{ name = "fixtures", specifier = "==3.0.0" },
{ name = "testtools", specifier = "==2.3.0" },
]
[[package]]
@ -5176,8 +5176,8 @@ fn lock_same_version_multiple_urls() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "dependency", marker = "sys_platform == 'darwin'", directory = "[TEMP_DIR]/v1" },
{ name = "dependency", marker = "sys_platform != 'darwin'", directory = "[TEMP_DIR]/v2" },
{ name = "dependency", marker = "sys_platform == 'darwin'", directory = "[TEMP_DIR]/v1" },
]
[[package]]
@ -5450,8 +5450,8 @@ fn lock_dev_transitive() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "foo", directory = "../foo" },
{ name = "baz", editable = "baz" },
{ name = "foo", directory = "../foo" },
{ name = "iniconfig", specifier = ">1" },
]
@ -7803,8 +7803,8 @@ fn lock_mixed_extras() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "leaf1", editable = "packages/leaf1" },
{ name = "workspace2", directory = "../workspace2" },
{ name = "typing-extensions", marker = "extra == 'async'", specifier = ">=4" },
{ name = "workspace2", directory = "../workspace2" },
]
[[package]]
@ -7992,8 +7992,8 @@ fn lock_transitive_extra() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "leaf", editable = "packages/leaf" },
{ name = "typing-extensions", marker = "extra == 'async'", specifier = ">=4" },
{ name = "leaf", extras = ["async"], marker = "extra == 'async'", editable = "packages/leaf" },
{ name = "typing-extensions", marker = "extra == 'async'", specifier = ">=4" },
]
"###
);
@ -9377,3 +9377,137 @@ fn lock_missing_metadata() -> Result<()> {
Ok(())
}
/// Lock a `pyproject.toml`, reorder the dependencies, and ensure that the lockfile is _not_ updated
/// on the next run.
#[test]
fn lock_reorder() -> Result<()> {
let context = TestContext::new("3.12");
let pyproject_toml = context.temp_dir.child("pyproject.toml");
pyproject_toml.write_str(
r#"
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["anyio", "iniconfig"]
"#,
)?;
uv_snapshot!(context.filters(), context.lock(), @r###"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
let lock = fs_err::read_to_string(context.temp_dir.join("uv.lock")).unwrap();
insta::with_settings!({
filters => context.filters(),
}, {
assert_snapshot!(
lock, @r###"
version = 1
requires-python = ">=3.12"
[options]
exclude-newer = "2024-03-25 00:00:00 UTC"
[[package]]
name = "anyio"
version = "4.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "idna" },
{ name = "sniffio" },
]
sdist = { url = "https://files.pythonhosted.org/packages/db/4d/3970183622f0330d3c23d9b8a5f52e365e50381fd484d08e3285104333d3/anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6", size = 159642 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/14/fd/2f20c40b45e4fb4324834aea24bd4afdf1143390242c0b33774da0e2e34f/anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8", size = 85584 },
]
[[package]]
name = "idna"
version = "3.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/bf/3f/ea4b9117521a1e9c50344b909be7886dd00a519552724809bb1f486986c2/idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", size = 175426 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c2/e7/a82b05cf63a603df6e68d59ae6a68bf5064484a0718ea5033660af4b54a9/idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f", size = 61567 },
]
[[package]]
name = "iniconfig"
version = "2.0.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
]
[[package]]
name = "project"
version = "0.1.0"
source = { editable = "." }
dependencies = [
{ name = "anyio" },
{ name = "iniconfig" },
]
[package.metadata]
requires-dist = [
{ name = "anyio" },
{ name = "iniconfig" },
]
[[package]]
name = "sniffio"
version = "1.3.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
]
"###
);
});
// Re-run with `--locked`.
uv_snapshot!(context.filters(), context.lock().arg("--locked"), @r###"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
// Reorder the dependencies.
pyproject_toml.write_str(
r#"
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["iniconfig", "anyio"]
"#,
)?;
// Re-run with `--locked`.
uv_snapshot!(context.filters(), context.lock().arg("--locked"), @r###"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
Ok(())
}

View file

@ -224,8 +224,8 @@ fn fork_allows_non_conflicting_repeated_dependencies() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "package-a", specifier = ">=1" },
{ name = "package-a", specifier = "<2" },
{ name = "package-a", specifier = ">=1" },
]
"###
);
@ -3671,9 +3671,9 @@ fn preferences_dependent_forking_tristable() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "package-bar" },
{ name = "package-cleaver" },
{ name = "package-foo" },
{ name = "package-bar" },
]
"###
);
@ -3873,9 +3873,9 @@ fn preferences_dependent_forking() -> Result<()> {
[package.metadata]
requires-dist = [
{ name = "package-bar" },
{ name = "package-cleaver" },
{ name = "package-foo" },
{ name = "package-bar" },
]
"###
);

View file

@ -204,18 +204,18 @@ uvloop = [
[package.metadata]
requires-dist = [
{ name = "aiohttp", marker = "implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd'", specifier = "!=3.9.0,>=3.7.4" },
{ name = "aiohttp", marker = "(implementation_name != 'pypy' and extra == 'd') or (sys_platform != 'win32' and extra == 'd')", specifier = ">=3.7.4" },
{ name = "click", specifier = ">=8.0.0" },
{ name = "colorama", marker = "extra == 'colorama'", specifier = ">=0.4.3" },
{ name = "ipython", marker = "extra == 'jupyter'", specifier = ">=7.8.0" },
{ name = "mypy-extensions", specifier = ">=0.4.3" },
{ name = "packaging", specifier = ">=22.0" },
{ name = "pathspec", specifier = ">=0.9.0" },
{ name = "platformdirs", specifier = ">=2" },
{ name = "tokenize-rt", marker = "extra == 'jupyter'", specifier = ">=3.2.0" },
{ name = "tomli", marker = "python_version < '3.11'", specifier = ">=1.1.0" },
{ name = "typing-extensions", marker = "python_version < '3.11'", specifier = ">=4.0.1" },
{ name = "colorama", marker = "extra == 'colorama'", specifier = ">=0.4.3" },
{ name = "aiohttp", marker = "implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd'", specifier = "!=3.9.0,>=3.7.4" },
{ name = "aiohttp", marker = "(implementation_name != 'pypy' and extra == 'd') or (sys_platform != 'win32' and extra == 'd')", specifier = ">=3.7.4" },
{ name = "ipython", marker = "extra == 'jupyter'", specifier = ">=7.8.0" },
{ name = "tokenize-rt", marker = "extra == 'jupyter'", specifier = ">=3.2.0" },
{ name = "uvloop", marker = "extra == 'uvloop'", specifier = ">=0.15.2" },
]

View file

@ -672,27 +672,27 @@ requires-dist = [
{ name = "aiozoneinfo", specifier = "==0.2.0" },
{ name = "astral", specifier = "==2.2" },
{ name = "async-interrupt", specifier = "==1.1.1" },
{ name = "attrs", specifier = "==23.2.0" },
{ name = "atomicwrites-homeassistant", specifier = "==1.4.1" },
{ name = "attrs", specifier = "==23.2.0" },
{ name = "awesomeversion", specifier = "==24.2.0" },
{ name = "bcrypt", specifier = "==4.1.2" },
{ name = "certifi", specifier = ">=2021.5.30" },
{ name = "ciso8601", specifier = "==2.3.1" },
{ name = "cryptography", specifier = "==42.0.8" },
{ name = "fnv-hash-fast", specifier = "==0.5.0" },
{ name = "hass-nabucasa", specifier = "==0.81.1" },
{ name = "httpx", specifier = "==0.27.0" },
{ name = "home-assistant-bluetooth", specifier = "==1.12.1" },
{ name = "httpx", specifier = "==0.27.0" },
{ name = "ifaddr", specifier = "==0.2.0" },
{ name = "jinja2", specifier = "==3.1.4" },
{ name = "lru-dict", specifier = "==1.3.0" },
{ name = "pyjwt", specifier = "==2.8.0" },
{ name = "cryptography", specifier = "==42.0.8" },
{ name = "pillow", specifier = "==10.3.0" },
{ name = "pyopenssl", specifier = "==24.1.0" },
{ name = "orjson", specifier = "==3.9.15" },
{ name = "packaging", specifier = ">=23.1" },
{ name = "pillow", specifier = "==10.3.0" },
{ name = "pip", specifier = ">=21.3.1" },
{ name = "psutil-home-assistant", specifier = "==0.0.1" },
{ name = "pyjwt", specifier = "==2.8.0" },
{ name = "pyopenssl", specifier = "==24.1.0" },
{ name = "python-slugify", specifier = "==8.0.4" },
{ name = "pyyaml", specifier = "==6.0.1" },
{ name = "requests", specifier = "==2.32.3" },

View file

@ -355,22 +355,22 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "msgspec", specifier = ">=0.18.4" },
{ name = "twine", specifier = ">=4.0.2" },
{ name = "hatchling", specifier = ">=1.20.0" },
{ name = "chevron-blue", specifier = ">=0.2.1" },
{ name = "setuptools", specifier = ">=69.1.1" },
{ name = "pyyaml", specifier = ">=6.0.1" },
{ name = "pypiserver", marker = "extra == 'index'", specifier = ">=2.0.1" },
{ name = "hatchling", specifier = ">=1.20.0" },
{ name = "msgspec", specifier = ">=0.18.4" },
{ name = "packse", extras = ["index"], marker = "extra == 'serve'" },
{ name = "pypiserver", marker = "extra == 'index'", specifier = ">=2.0.1" },
{ name = "pyyaml", specifier = ">=6.0.1" },
{ name = "setuptools", specifier = ">=69.1.1" },
{ name = "twine", specifier = ">=4.0.2" },
{ name = "watchfiles", marker = "extra == 'serve'", specifier = ">=0.21.0" },
]
[package.metadata.requires-dev]
dev = [
{ name = "syrupy", specifier = ">=4.6.0" },
{ name = "pytest", specifier = ">=7.4.3" },
{ name = "psutil", specifier = ">=5.9.7" },
{ name = "pytest", specifier = ">=7.4.3" },
{ name = "syrupy", specifier = ">=4.6.0" },
]
[[package]]

View file

@ -5868,276 +5868,269 @@ vision = [
[package.metadata]
requires-dist = [
{ name = "filelock" },
{ name = "huggingface-hub", specifier = ">=0.19.3,<1.0" },
{ name = "numpy", specifier = ">=1.17" },
{ name = "packaging", specifier = ">=20.0" },
{ name = "pyyaml", specifier = ">=5.1" },
{ name = "regex", specifier = "!=2019.12.17" },
{ name = "requests" },
{ name = "tokenizers", specifier = ">=0.14,<0.19" },
{ name = "safetensors", specifier = ">=0.4.1" },
{ name = "tqdm", specifier = ">=4.27" },
{ name = "fugashi", marker = "extra == 'ja'", specifier = ">=1.0" },
{ name = "ipadic", marker = "extra == 'ja'", specifier = ">=1.0.0,<2.0" },
{ name = "unidic-lite", marker = "extra == 'ja'", specifier = ">=1.0.7" },
{ name = "unidic", marker = "extra == 'ja'", specifier = ">=1.0.2" },
{ name = "sudachipy", marker = "extra == 'ja'", specifier = ">=0.6.6" },
{ name = "sudachidict-core", marker = "extra == 'ja'", specifier = ">=20220729" },
{ name = "rhoknp", marker = "extra == 'ja'", specifier = ">=1.1.0,<1.3.1" },
{ name = "scikit-learn", marker = "extra == 'sklearn'" },
{ name = "tensorflow", marker = "extra == 'tf'", specifier = ">=2.6,<2.16" },
{ name = "onnxconverter-common", marker = "extra == 'tf'" },
{ name = "tf2onnx", marker = "extra == 'tf'" },
{ name = "tensorflow-text", marker = "extra == 'tf'", specifier = "<2.16" },
{ name = "keras-nlp", marker = "extra == 'tf'", specifier = ">=0.3.1" },
{ name = "tensorflow-cpu", marker = "extra == 'tf-cpu'", specifier = ">=2.6,<2.16" },
{ name = "onnxconverter-common", marker = "extra == 'tf-cpu'" },
{ name = "tf2onnx", marker = "extra == 'tf-cpu'" },
{ name = "tensorflow-text", marker = "extra == 'tf-cpu'", specifier = "<2.16" },
{ name = "keras-nlp", marker = "extra == 'tf-cpu'", specifier = ">=0.3.1" },
{ name = "torch", marker = "extra == 'torch'" },
{ name = "accelerate", marker = "extra == 'torch'", specifier = ">=0.21.0" },
{ name = "accelerate", marker = "extra == 'accelerate'", specifier = ">=0.21.0" },
{ name = "faiss-cpu", marker = "extra == 'retrieval'" },
{ name = "datasets", marker = "extra == 'retrieval'", specifier = "!=2.5.0" },
{ name = "jax", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "flax", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "optax", marker = "extra == 'flax'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "tokenizers", marker = "extra == 'tokenizers'", specifier = ">=0.14,<0.19" },
{ name = "ftfy", marker = "extra == 'ftfy'" },
{ name = "onnxruntime", marker = "extra == 'onnxruntime'", specifier = ">=1.4.0" },
{ name = "onnxruntime-tools", marker = "extra == 'onnxruntime'", specifier = ">=1.4.2" },
{ name = "onnxconverter-common", marker = "extra == 'onnx'" },
{ name = "tf2onnx", marker = "extra == 'onnx'" },
{ name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.4.0" },
{ name = "onnxruntime-tools", marker = "extra == 'onnx'", specifier = ">=1.4.2" },
{ name = "cookiecutter", marker = "extra == 'modelcreation'", specifier = "==1.7.3" },
{ name = "sagemaker", marker = "extra == 'sagemaker'", specifier = "==2.226.1" },
{ name = "deepspeed", marker = "extra == 'deepspeed'", specifier = ">=0.9.3" },
{ name = "accelerate", marker = "extra == 'deepspeed'", specifier = ">=0.21.0" },
{ name = "optuna", marker = "extra == 'optuna'" },
{ name = "ray", extras = ["tune"], marker = "extra == 'ray'", specifier = ">=2.7.0" },
{ name = "sigopt", marker = "extra == 'sigopt'" },
{ name = "optuna", marker = "extra == 'integrations'" },
{ name = "ray", extras = ["tune"], marker = "extra == 'integrations'", specifier = ">=2.7.0" },
{ name = "sigopt", marker = "extra == 'integrations'" },
{ name = "pydantic", marker = "extra == 'serving'" },
{ name = "uvicorn", marker = "extra == 'serving'" },
{ name = "fastapi", marker = "extra == 'serving'" },
{ name = "starlette", marker = "extra == 'serving'" },
{ name = "librosa", marker = "extra == 'audio'" },
{ name = "pyctcdecode", marker = "extra == 'audio'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'audio'" },
{ name = "kenlm", marker = "extra == 'audio'" },
{ name = "torchaudio", marker = "extra == 'speech'" },
{ name = "librosa", marker = "extra == 'speech'" },
{ name = "pyctcdecode", marker = "extra == 'speech'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'speech'" },
{ name = "kenlm", marker = "extra == 'speech'" },
{ name = "torchaudio", marker = "extra == 'torch-speech'" },
{ name = "librosa", marker = "extra == 'torch-speech'" },
{ name = "pyctcdecode", marker = "extra == 'torch-speech'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'torch-speech'" },
{ name = "kenlm", marker = "extra == 'torch-speech'" },
{ name = "librosa", marker = "extra == 'tf-speech'" },
{ name = "pyctcdecode", marker = "extra == 'tf-speech'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'tf-speech'" },
{ name = "kenlm", marker = "extra == 'tf-speech'" },
{ name = "librosa", marker = "extra == 'flax-speech'" },
{ name = "pyctcdecode", marker = "extra == 'flax-speech'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'flax-speech'" },
{ name = "kenlm", marker = "extra == 'flax-speech'" },
{ name = "pillow", marker = "extra == 'vision'", specifier = ">=10.0.1,<=15.0" },
{ name = "timm", marker = "extra == 'timm'" },
{ name = "torchvision", marker = "extra == 'torch-vision'" },
{ name = "pillow", marker = "extra == 'torch-vision'", specifier = ">=10.0.1,<=15.0" },
{ name = "codecarbon", marker = "extra == 'codecarbon'", specifier = "==1.2.0" },
{ name = "decord", marker = "extra == 'video'", specifier = "==0.6.0" },
{ name = "av", marker = "extra == 'video'", specifier = "==9.2.0" },
{ name = "sentencepiece", marker = "extra == 'sentencepiece'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "protobuf", marker = "extra == 'sentencepiece'" },
{ name = "deepspeed", marker = "extra == 'deepspeed-testing'", specifier = ">=0.9.3" },
{ name = "accelerate", marker = "extra == 'deepspeed-testing'", specifier = ">=0.21.0" },
{ name = "pytest", marker = "extra == 'deepspeed-testing'", specifier = ">=7.2.0,<8.0.0" },
{ name = "pytest-xdist", marker = "extra == 'deepspeed-testing'" },
{ name = "timeout-decorator", marker = "extra == 'deepspeed-testing'" },
{ name = "parameterized", marker = "extra == 'deepspeed-testing'" },
{ name = "psutil", marker = "extra == 'deepspeed-testing'" },
{ name = "datasets", marker = "extra == 'deepspeed-testing'", specifier = "!=2.5.0" },
{ name = "dill", marker = "extra == 'deepspeed-testing'", specifier = "<0.3.5" },
{ name = "evaluate", marker = "extra == 'deepspeed-testing'", specifier = ">=0.2.0" },
{ name = "pytest-timeout", marker = "extra == 'deepspeed-testing'" },
{ name = "ruff", marker = "extra == 'deepspeed-testing'", specifier = "==0.1.5" },
{ name = "sacrebleu", marker = "extra == 'deepspeed-testing'", specifier = ">=1.4.12,<2.0.0" },
{ name = "rouge-score", marker = "extra == 'deepspeed-testing'", specifier = "!=0.0.7,!=0.0.8,!=0.1,!=0.1.1" },
{ name = "nltk", marker = "extra == 'deepspeed-testing'" },
{ name = "gitpython", marker = "extra == 'deepspeed-testing'", specifier = "<3.1.19" },
{ name = "hf-doc-builder", marker = "extra == 'deepspeed-testing'", specifier = ">=0.3.0" },
{ name = "protobuf", marker = "extra == 'deepspeed-testing'" },
{ name = "sacremoses", marker = "extra == 'deepspeed-testing'" },
{ name = "rjieba", marker = "extra == 'deepspeed-testing'" },
{ name = "beautifulsoup4", marker = "extra == 'deepspeed-testing'" },
{ name = "tensorboard", marker = "extra == 'deepspeed-testing'" },
{ name = "pydantic", marker = "extra == 'deepspeed-testing'" },
{ name = "faiss-cpu", marker = "extra == 'deepspeed-testing'" },
{ name = "datasets", marker = "extra == 'deepspeed-testing'", specifier = "!=2.5.0" },
{ name = "cookiecutter", marker = "extra == 'deepspeed-testing'", specifier = "==1.7.3" },
{ name = "optuna", marker = "extra == 'deepspeed-testing'" },
{ name = "sentencepiece", marker = "extra == 'deepspeed-testing'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "protobuf", marker = "extra == 'deepspeed-testing'" },
{ name = "datasets", marker = "extra == 'quality'", specifier = "!=2.5.0" },
{ name = "isort", marker = "extra == 'quality'", specifier = ">=5.5.4" },
{ name = "ruff", marker = "extra == 'quality'", specifier = "==0.1.5" },
{ name = "gitpython", marker = "extra == 'quality'", specifier = "<3.1.19" },
{ name = "hf-doc-builder", marker = "extra == 'quality'", specifier = ">=0.3.0" },
{ name = "urllib3", marker = "extra == 'quality'", specifier = "<2.0.0" },
{ name = "tensorflow", marker = "extra == 'all'", specifier = ">=2.6,<2.16" },
{ name = "onnxconverter-common", marker = "extra == 'all'" },
{ name = "tf2onnx", marker = "extra == 'all'" },
{ name = "tensorflow-text", marker = "extra == 'all'", specifier = "<2.16" },
{ name = "keras-nlp", marker = "extra == 'all'", specifier = ">=0.3.1" },
{ name = "torch", marker = "extra == 'all'" },
{ name = "accelerate", marker = "extra == 'all'", specifier = ">=0.21.0" },
{ name = "jax", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "flax", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "optax", marker = "extra == 'all'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "sentencepiece", marker = "extra == 'all'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "protobuf", marker = "extra == 'all'" },
{ name = "tokenizers", marker = "extra == 'all'", specifier = ">=0.14,<0.19" },
{ name = "torchaudio", marker = "extra == 'all'" },
{ name = "librosa", marker = "extra == 'all'" },
{ name = "pyctcdecode", marker = "extra == 'all'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'all'" },
{ name = "kenlm", marker = "extra == 'all'" },
{ name = "pillow", marker = "extra == 'all'", specifier = ">=10.0.1,<=15.0" },
{ name = "optuna", marker = "extra == 'all'" },
{ name = "ray", extras = ["tune"], marker = "extra == 'all'", specifier = ">=2.7.0" },
{ name = "sigopt", marker = "extra == 'all'" },
{ name = "timm", marker = "extra == 'all'" },
{ name = "torchvision", marker = "extra == 'all'" },
{ name = "pillow", marker = "extra == 'all'", specifier = ">=10.0.1,<=15.0" },
{ name = "codecarbon", marker = "extra == 'all'", specifier = "==1.2.0" },
{ name = "accelerate", marker = "extra == 'all'", specifier = ">=0.21.0" },
{ name = "decord", marker = "extra == 'all'", specifier = "==0.6.0" },
{ name = "av", marker = "extra == 'all'", specifier = "==9.2.0" },
{ name = "hf-doc-builder", marker = "extra == 'docs-specific'" },
{ name = "tensorflow", marker = "extra == 'docs'", specifier = ">=2.6,<2.16" },
{ name = "onnxconverter-common", marker = "extra == 'docs'" },
{ name = "tf2onnx", marker = "extra == 'docs'" },
{ name = "tensorflow-text", marker = "extra == 'docs'", specifier = "<2.16" },
{ name = "keras-nlp", marker = "extra == 'docs'", specifier = ">=0.3.1" },
{ name = "torch", marker = "extra == 'docs'" },
{ name = "accelerate", marker = "extra == 'docs'", specifier = ">=0.21.0" },
{ name = "jax", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "flax", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "optax", marker = "extra == 'docs'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "sentencepiece", marker = "extra == 'docs'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "protobuf", marker = "extra == 'docs'" },
{ name = "tokenizers", marker = "extra == 'docs'", specifier = ">=0.14,<0.19" },
{ name = "torchaudio", marker = "extra == 'docs'" },
{ name = "librosa", marker = "extra == 'docs'" },
{ name = "pyctcdecode", marker = "extra == 'docs'", specifier = ">=0.4.0" },
{ name = "phonemizer", marker = "extra == 'docs'" },
{ name = "kenlm", marker = "extra == 'docs'" },
{ name = "pillow", marker = "extra == 'docs'", specifier = ">=10.0.1,<=15.0" },
{ name = "optuna", marker = "extra == 'docs'" },
{ name = "ray", extras = ["tune"], marker = "extra == 'docs'", specifier = ">=2.7.0" },
{ name = "sigopt", marker = "extra == 'docs'" },
{ name = "timm", marker = "extra == 'docs'" },
{ name = "torchvision", marker = "extra == 'docs'" },
{ name = "pillow", marker = "extra == 'docs'", specifier = ">=10.0.1,<=15.0" },
{ name = "codecarbon", marker = "extra == 'docs'", specifier = "==1.2.0" },
{ name = "accelerate", marker = "extra == 'docs'", specifier = ">=0.21.0" },
{ name = "decord", marker = "extra == 'docs'", specifier = "==0.6.0" },
{ name = "av", marker = "extra == 'docs'", specifier = "==9.2.0" },
{ name = "hf-doc-builder", marker = "extra == 'docs'" },
{ name = "filelock", marker = "extra == 'torchhub'" },
{ name = "huggingface-hub", marker = "extra == 'torchhub'", specifier = ">=0.19.3,<1.0" },
{ name = "importlib-metadata", marker = "extra == 'torchhub'" },
{ name = "numpy", marker = "extra == 'torchhub'", specifier = ">=1.17" },
{ name = "packaging", marker = "extra == 'torchhub'", specifier = ">=20.0" },
{ name = "protobuf", marker = "extra == 'torchhub'" },
{ name = "regex", marker = "extra == 'torchhub'", specifier = "!=2019.12.17" },
{ name = "requests", marker = "extra == 'torchhub'" },
{ name = "sentencepiece", marker = "extra == 'torchhub'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "torch", marker = "extra == 'torchhub'" },
{ name = "tokenizers", marker = "extra == 'torchhub'", specifier = ">=0.14,<0.19" },
{ name = "tqdm", marker = "extra == 'torchhub'", specifier = ">=4.27" },
{ name = "diffusers", marker = "extra == 'agents'" },
{ name = "accelerate", marker = "extra == 'agents'", specifier = ">=0.21.0" },
{ name = "datasets", marker = "extra == 'agents'", specifier = "!=2.5.0" },
{ name = "torch", marker = "extra == 'agents'" },
{ name = "sentencepiece", marker = "extra == 'agents'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "opencv-python", marker = "extra == 'agents'" },
{ name = "pillow", marker = "extra == 'agents'", specifier = ">=10.0.1,<=15.0" },
{ name = "gitpython", marker = "extra == 'dev-dependencies'", specifier = "<3.1.19" },
{ name = "pillow", marker = "extra == 'dev-dependencies'", specifier = ">=10.0.1,<=15.0" },
{ name = "accelerate", marker = "extra == 'dev-dependencies'", specifier = ">=0.21.0" },
{ name = "av", marker = "extra == 'video'", specifier = "==9.2.0" },
{ name = "av", marker = "extra == 'all'", specifier = "==9.2.0" },
{ name = "av", marker = "extra == 'docs'", specifier = "==9.2.0" },
{ name = "av", marker = "extra == 'dev-dependencies'", specifier = "==9.2.0" },
{ name = "beautifulsoup4", marker = "extra == 'deepspeed-testing'" },
{ name = "beautifulsoup4", marker = "extra == 'dev-dependencies'" },
{ name = "codecarbon", marker = "extra == 'codecarbon'", specifier = "==1.2.0" },
{ name = "codecarbon", marker = "extra == 'all'", specifier = "==1.2.0" },
{ name = "codecarbon", marker = "extra == 'docs'", specifier = "==1.2.0" },
{ name = "codecarbon", marker = "extra == 'dev-dependencies'", specifier = "==1.2.0" },
{ name = "codecarbon", marker = "extra == 'dev-dependencies'", specifier = "==1.2.0" },
{ name = "cookiecutter", marker = "extra == 'modelcreation'", specifier = "==1.7.3" },
{ name = "cookiecutter", marker = "extra == 'deepspeed-testing'", specifier = "==1.7.3" },
{ name = "cookiecutter", marker = "extra == 'dev-dependencies'", specifier = "==1.7.3" },
{ name = "datasets", marker = "extra == 'retrieval'", specifier = "!=2.5.0" },
{ name = "datasets", marker = "extra == 'deepspeed-testing'", specifier = "!=2.5.0" },
{ name = "datasets", marker = "extra == 'quality'", specifier = "!=2.5.0" },
{ name = "datasets", marker = "extra == 'agents'", specifier = "!=2.5.0" },
{ name = "datasets", marker = "extra == 'dev-dependencies'", specifier = "!=2.5.0" },
{ name = "decord", marker = "extra == 'video'", specifier = "==0.6.0" },
{ name = "decord", marker = "extra == 'all'", specifier = "==0.6.0" },
{ name = "decord", marker = "extra == 'docs'", specifier = "==0.6.0" },
{ name = "decord", marker = "extra == 'dev-dependencies'", specifier = "==0.6.0" },
{ name = "deepspeed", marker = "extra == 'deepspeed'", specifier = ">=0.9.3" },
{ name = "deepspeed", marker = "extra == 'deepspeed-testing'", specifier = ">=0.9.3" },
{ name = "diffusers", marker = "extra == 'agents'" },
{ name = "dill", marker = "extra == 'deepspeed-testing'", specifier = "<0.3.5" },
{ name = "dill", marker = "extra == 'dev-dependencies'", specifier = "<0.3.5" },
{ name = "evaluate", marker = "extra == 'deepspeed-testing'", specifier = ">=0.2.0" },
{ name = "evaluate", marker = "extra == 'dev-dependencies'", specifier = ">=0.2.0" },
{ name = "faiss-cpu", marker = "extra == 'retrieval'" },
{ name = "faiss-cpu", marker = "extra == 'deepspeed-testing'" },
{ name = "faiss-cpu", marker = "extra == 'dev-dependencies'" },
{ name = "fastapi", marker = "extra == 'serving'" },
{ name = "filelock" },
{ name = "filelock", marker = "extra == 'torchhub'" },
{ name = "flax", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "flax", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "flax", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "flax", marker = "extra == 'dev-dependencies'", specifier = ">=0.4.1,<=0.7.0" },
{ name = "ftfy", marker = "extra == 'ftfy'" },
{ name = "fugashi", marker = "extra == 'ja'", specifier = ">=1.0" },
{ name = "fugashi", marker = "extra == 'dev-dependencies'", specifier = ">=1.0" },
{ name = "gitpython", marker = "extra == 'deepspeed-testing'", specifier = "<3.1.19" },
{ name = "gitpython", marker = "extra == 'quality'", specifier = "<3.1.19" },
{ name = "gitpython", marker = "extra == 'dev-dependencies'", specifier = "<3.1.19" },
{ name = "hf-doc-builder", marker = "extra == 'deepspeed-testing'", specifier = ">=0.3.0" },
{ name = "hf-doc-builder", marker = "extra == 'quality'", specifier = ">=0.3.0" },
{ name = "hf-doc-builder", marker = "extra == 'docs-specific'" },
{ name = "hf-doc-builder", marker = "extra == 'docs'" },
{ name = "hf-doc-builder", marker = "extra == 'dev-dependencies'" },
{ name = "hf-doc-builder", marker = "extra == 'dev-dependencies'", specifier = ">=0.3.0" },
{ name = "huggingface-hub", specifier = ">=0.19.3,<1.0" },
{ name = "huggingface-hub", marker = "extra == 'torchhub'", specifier = ">=0.19.3,<1.0" },
{ name = "importlib-metadata", marker = "extra == 'torchhub'" },
{ name = "ipadic", marker = "extra == 'ja'", specifier = ">=1.0.0,<2.0" },
{ name = "ipadic", marker = "extra == 'dev-dependencies'", specifier = ">=1.0.0,<2.0" },
{ name = "isort", marker = "extra == 'quality'", specifier = ">=5.5.4" },
{ name = "isort", marker = "extra == 'dev-dependencies'", specifier = ">=5.5.4" },
{ name = "jax", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jax", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jax", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jax", marker = "extra == 'dev-dependencies'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'flax'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'all'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'docs'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "jaxlib", marker = "extra == 'dev-dependencies'", specifier = ">=0.4.1,<=0.4.13" },
{ name = "kenlm", marker = "extra == 'audio'" },
{ name = "kenlm", marker = "extra == 'speech'" },
{ name = "kenlm", marker = "extra == 'torch-speech'" },
{ name = "kenlm", marker = "extra == 'tf-speech'" },
{ name = "kenlm", marker = "extra == 'flax-speech'" },
{ name = "kenlm", marker = "extra == 'all'" },
{ name = "kenlm", marker = "extra == 'docs'" },
{ name = "kenlm", marker = "extra == 'dev-dependencies'" },
{ name = "keras-nlp", marker = "extra == 'tf'", specifier = ">=0.3.1" },
{ name = "keras-nlp", marker = "extra == 'tf-cpu'", specifier = ">=0.3.1" },
{ name = "keras-nlp", marker = "extra == 'all'", specifier = ">=0.3.1" },
{ name = "keras-nlp", marker = "extra == 'docs'", specifier = ">=0.3.1" },
{ name = "keras-nlp", marker = "extra == 'dev-dependencies'", specifier = ">=0.3.1" },
{ name = "librosa", marker = "extra == 'audio'" },
{ name = "librosa", marker = "extra == 'speech'" },
{ name = "librosa", marker = "extra == 'torch-speech'" },
{ name = "librosa", marker = "extra == 'tf-speech'" },
{ name = "librosa", marker = "extra == 'flax-speech'" },
{ name = "librosa", marker = "extra == 'all'" },
{ name = "librosa", marker = "extra == 'docs'" },
{ name = "librosa", marker = "extra == 'dev-dependencies'" },
{ name = "nltk", marker = "extra == 'deepspeed-testing'" },
{ name = "nltk", marker = "extra == 'dev-dependencies'" },
{ name = "numpy", specifier = ">=1.17" },
{ name = "numpy", marker = "extra == 'torchhub'", specifier = ">=1.17" },
{ name = "onnxconverter-common", marker = "extra == 'tf'" },
{ name = "onnxconverter-common", marker = "extra == 'tf-cpu'" },
{ name = "onnxconverter-common", marker = "extra == 'onnx'" },
{ name = "onnxconverter-common", marker = "extra == 'all'" },
{ name = "onnxconverter-common", marker = "extra == 'docs'" },
{ name = "onnxconverter-common", marker = "extra == 'dev-dependencies'" },
{ name = "onnxruntime-tools", marker = "extra == 'dev-dependencies'", specifier = ">=1.4.2" },
{ name = "onnxruntime", marker = "extra == 'onnxruntime'", specifier = ">=1.4.0" },
{ name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.4.0" },
{ name = "onnxruntime", marker = "extra == 'dev-dependencies'", specifier = ">=1.4.0" },
{ name = "onnxruntime-tools", marker = "extra == 'onnxruntime'", specifier = ">=1.4.2" },
{ name = "onnxruntime-tools", marker = "extra == 'onnx'", specifier = ">=1.4.2" },
{ name = "onnxruntime-tools", marker = "extra == 'dev-dependencies'", specifier = ">=1.4.2" },
{ name = "opencv-python", marker = "extra == 'agents'" },
{ name = "optax", marker = "extra == 'flax'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "optax", marker = "extra == 'all'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "optax", marker = "extra == 'docs'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "optax", marker = "extra == 'dev-dependencies'", specifier = ">=0.0.8,<=0.1.4" },
{ name = "optuna", marker = "extra == 'optuna'" },
{ name = "optuna", marker = "extra == 'integrations'" },
{ name = "optuna", marker = "extra == 'deepspeed-testing'" },
{ name = "optuna", marker = "extra == 'all'" },
{ name = "optuna", marker = "extra == 'docs'" },
{ name = "optuna", marker = "extra == 'dev-dependencies'" },
{ name = "packaging", specifier = ">=20.0" },
{ name = "packaging", marker = "extra == 'torchhub'", specifier = ">=20.0" },
{ name = "parameterized", marker = "extra == 'deepspeed-testing'" },
{ name = "parameterized", marker = "extra == 'dev-dependencies'" },
{ name = "phonemizer", marker = "extra == 'audio'" },
{ name = "phonemizer", marker = "extra == 'speech'" },
{ name = "phonemizer", marker = "extra == 'torch-speech'" },
{ name = "phonemizer", marker = "extra == 'tf-speech'" },
{ name = "phonemizer", marker = "extra == 'flax-speech'" },
{ name = "phonemizer", marker = "extra == 'all'" },
{ name = "phonemizer", marker = "extra == 'docs'" },
{ name = "phonemizer", marker = "extra == 'dev-dependencies'" },
{ name = "pillow", marker = "extra == 'vision'", specifier = ">=10.0.1,<=15.0" },
{ name = "pillow", marker = "extra == 'torch-vision'", specifier = ">=10.0.1,<=15.0" },
{ name = "pillow", marker = "extra == 'all'", specifier = ">=10.0.1,<=15.0" },
{ name = "pillow", marker = "extra == 'docs'", specifier = ">=10.0.1,<=15.0" },
{ name = "pillow", marker = "extra == 'agents'", specifier = ">=10.0.1,<=15.0" },
{ name = "pillow", marker = "extra == 'dev-dependencies'", specifier = ">=10.0.1,<=15.0" },
{ name = "protobuf", marker = "extra == 'sentencepiece'" },
{ name = "protobuf", marker = "extra == 'deepspeed-testing'" },
{ name = "protobuf", marker = "extra == 'all'" },
{ name = "protobuf", marker = "extra == 'docs'" },
{ name = "protobuf", marker = "extra == 'torchhub'" },
{ name = "protobuf", marker = "extra == 'dev-dependencies'" },
{ name = "psutil", marker = "extra == 'deepspeed-testing'" },
{ name = "psutil", marker = "extra == 'dev-dependencies'" },
{ name = "pyctcdecode", marker = "extra == 'audio'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'speech'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'torch-speech'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'tf-speech'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'flax-speech'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'all'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'docs'", specifier = ">=0.4.0" },
{ name = "pyctcdecode", marker = "extra == 'dev-dependencies'", specifier = ">=0.4.0" },
{ name = "pydantic", marker = "extra == 'serving'" },
{ name = "pydantic", marker = "extra == 'deepspeed-testing'" },
{ name = "pydantic", marker = "extra == 'dev-dependencies'" },
{ name = "pytest-timeout", marker = "extra == 'dev-dependencies'" },
{ name = "pytest-xdist", marker = "extra == 'dev-dependencies'" },
{ name = "pytest", marker = "extra == 'deepspeed-testing'", specifier = ">=7.2.0,<8.0.0" },
{ name = "pytest", marker = "extra == 'dev-dependencies'", specifier = ">=7.2.0,<8.0.0" },
{ name = "pytest-timeout", marker = "extra == 'deepspeed-testing'" },
{ name = "pytest-timeout", marker = "extra == 'dev-dependencies'" },
{ name = "pytest-xdist", marker = "extra == 'deepspeed-testing'" },
{ name = "pytest-xdist", marker = "extra == 'dev-dependencies'" },
{ name = "pyyaml", specifier = ">=5.1" },
{ name = "ray", extras = ["tune"], marker = "extra == 'ray'", specifier = ">=2.7.0" },
{ name = "ray", extras = ["tune"], marker = "extra == 'integrations'", specifier = ">=2.7.0" },
{ name = "ray", extras = ["tune"], marker = "extra == 'all'", specifier = ">=2.7.0" },
{ name = "ray", extras = ["tune"], marker = "extra == 'docs'", specifier = ">=2.7.0" },
{ name = "ray", extras = ["tune"], marker = "extra == 'dev-dependencies'", specifier = ">=2.7.0" },
{ name = "regex", specifier = "!=2019.12.17" },
{ name = "regex", marker = "extra == 'torchhub'", specifier = "!=2019.12.17" },
{ name = "requests" },
{ name = "requests", marker = "extra == 'torchhub'" },
{ name = "rhoknp", marker = "extra == 'ja'", specifier = ">=1.1.0,<1.3.1" },
{ name = "rhoknp", marker = "extra == 'dev-dependencies'", specifier = ">=1.1.0,<1.3.1" },
{ name = "rjieba", marker = "extra == 'deepspeed-testing'" },
{ name = "rjieba", marker = "extra == 'dev-dependencies'" },
{ name = "rouge-score", marker = "extra == 'deepspeed-testing'", specifier = "!=0.0.7,!=0.0.8,!=0.1,!=0.1.1" },
{ name = "rouge-score", marker = "extra == 'dev-dependencies'", specifier = "!=0.0.7,!=0.0.8,!=0.1,!=0.1.1" },
{ name = "ruff", marker = "extra == 'deepspeed-testing'", specifier = "==0.1.5" },
{ name = "ruff", marker = "extra == 'quality'", specifier = "==0.1.5" },
{ name = "ruff", marker = "extra == 'dev-dependencies'", specifier = "==0.1.5" },
{ name = "sacrebleu", marker = "extra == 'deepspeed-testing'", specifier = ">=1.4.12,<2.0.0" },
{ name = "sacrebleu", marker = "extra == 'dev-dependencies'", specifier = ">=1.4.12,<2.0.0" },
{ name = "sacremoses", marker = "extra == 'deepspeed-testing'" },
{ name = "sacremoses", marker = "extra == 'dev-dependencies'" },
{ name = "safetensors", specifier = ">=0.4.1" },
{ name = "sagemaker", marker = "extra == 'sagemaker'", specifier = "==2.226.1" },
{ name = "scikit-learn", marker = "extra == 'sklearn'" },
{ name = "scikit-learn", marker = "extra == 'dev-dependencies'" },
{ name = "sentencepiece", marker = "extra == 'sentencepiece'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'deepspeed-testing'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'all'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'docs'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'torchhub'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'agents'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sentencepiece", marker = "extra == 'dev-dependencies'", specifier = ">=0.1.91,!=0.1.92" },
{ name = "sigopt", marker = "extra == 'sigopt'" },
{ name = "sigopt", marker = "extra == 'integrations'" },
{ name = "sigopt", marker = "extra == 'all'" },
{ name = "sigopt", marker = "extra == 'docs'" },
{ name = "sigopt", marker = "extra == 'dev-dependencies'" },
{ name = "starlette", marker = "extra == 'serving'" },
{ name = "sudachidict-core", marker = "extra == 'ja'", specifier = ">=20220729" },
{ name = "sudachidict-core", marker = "extra == 'dev-dependencies'", specifier = ">=20220729" },
{ name = "sudachipy", marker = "extra == 'ja'", specifier = ">=0.6.6" },
{ name = "sudachipy", marker = "extra == 'dev-dependencies'", specifier = ">=0.6.6" },
{ name = "tensorboard", marker = "extra == 'deepspeed-testing'" },
{ name = "tensorboard", marker = "extra == 'dev-dependencies'" },
{ name = "tensorflow-text", marker = "extra == 'dev-dependencies'", specifier = "<2.16" },
{ name = "tensorflow", marker = "extra == 'tf'", specifier = ">=2.6,<2.16" },
{ name = "tensorflow", marker = "extra == 'all'", specifier = ">=2.6,<2.16" },
{ name = "tensorflow", marker = "extra == 'docs'", specifier = ">=2.6,<2.16" },
{ name = "tensorflow", marker = "extra == 'dev-dependencies'", specifier = ">=2.6,<2.16" },
{ name = "tensorflow-cpu", marker = "extra == 'tf-cpu'", specifier = ">=2.6,<2.16" },
{ name = "tensorflow-text", marker = "extra == 'tf'", specifier = "<2.16" },
{ name = "tensorflow-text", marker = "extra == 'tf-cpu'", specifier = "<2.16" },
{ name = "tensorflow-text", marker = "extra == 'all'", specifier = "<2.16" },
{ name = "tensorflow-text", marker = "extra == 'docs'", specifier = "<2.16" },
{ name = "tensorflow-text", marker = "extra == 'dev-dependencies'", specifier = "<2.16" },
{ name = "tf2onnx", marker = "extra == 'tf'" },
{ name = "tf2onnx", marker = "extra == 'tf-cpu'" },
{ name = "tf2onnx", marker = "extra == 'onnx'" },
{ name = "tf2onnx", marker = "extra == 'all'" },
{ name = "tf2onnx", marker = "extra == 'docs'" },
{ name = "tf2onnx", marker = "extra == 'dev-dependencies'" },
{ name = "timeout-decorator", marker = "extra == 'deepspeed-testing'" },
{ name = "timeout-decorator", marker = "extra == 'dev-dependencies'" },
{ name = "timm", marker = "extra == 'timm'" },
{ name = "timm", marker = "extra == 'all'" },
{ name = "timm", marker = "extra == 'docs'" },
{ name = "timm", marker = "extra == 'dev-dependencies'" },
{ name = "tokenizers", specifier = ">=0.14,<0.19" },
{ name = "tokenizers", marker = "extra == 'tokenizers'", specifier = ">=0.14,<0.19" },
{ name = "tokenizers", marker = "extra == 'all'", specifier = ">=0.14,<0.19" },
{ name = "tokenizers", marker = "extra == 'docs'", specifier = ">=0.14,<0.19" },
{ name = "tokenizers", marker = "extra == 'torchhub'", specifier = ">=0.14,<0.19" },
{ name = "tokenizers", marker = "extra == 'dev-dependencies'", specifier = ">=0.14,<0.19" },
{ name = "torch", marker = "extra == 'torch'" },
{ name = "torch", marker = "extra == 'all'" },
{ name = "torch", marker = "extra == 'docs'" },
{ name = "torch", marker = "extra == 'torchhub'" },
{ name = "torch", marker = "extra == 'agents'" },
{ name = "torch", marker = "extra == 'dev-dependencies'" },
{ name = "torchaudio", marker = "extra == 'speech'" },
{ name = "torchaudio", marker = "extra == 'torch-speech'" },
{ name = "torchaudio", marker = "extra == 'all'" },
{ name = "torchaudio", marker = "extra == 'docs'" },
{ name = "torchaudio", marker = "extra == 'dev-dependencies'" },
{ name = "torchvision", marker = "extra == 'torch-vision'" },
{ name = "torchvision", marker = "extra == 'all'" },
{ name = "torchvision", marker = "extra == 'docs'" },
{ name = "torchvision", marker = "extra == 'dev-dependencies'" },
{ name = "tqdm", specifier = ">=4.27" },
{ name = "tqdm", marker = "extra == 'torchhub'", specifier = ">=4.27" },
{ name = "unidic", marker = "extra == 'ja'", specifier = ">=1.0.2" },
{ name = "unidic", marker = "extra == 'dev-dependencies'", specifier = ">=1.0.2" },
{ name = "unidic-lite", marker = "extra == 'ja'", specifier = ">=1.0.7" },
{ name = "unidic-lite", marker = "extra == 'dev-dependencies'", specifier = ">=1.0.7" },
{ name = "urllib3", marker = "extra == 'quality'", specifier = "<2.0.0" },
{ name = "urllib3", marker = "extra == 'dev-dependencies'", specifier = "<2.0.0" },
{ name = "uvicorn", marker = "extra == 'serving'" },
]
[[package]]

View file

@ -4281,8 +4281,8 @@ dev = [
requires-dist = [
{ name = "alembic", specifier = ">=0.7.0" },
{ name = "alembic-postgresql-enum" },
{ name = "automat" },
{ name = "argon2-cffi" },
{ name = "automat" },
{ name = "b2sdk" },
{ name = "babel" },
{ name = "bcrypt" },
@ -4293,6 +4293,7 @@ requires-dist = [
{ name = "click" },
{ name = "cryptography" },
{ name = "datadog", specifier = ">=0.19.0" },
{ name = "ddtrace", marker = "extra == 'deploy'", specifier = "==2.8.5" },
{ name = "disposable-email-domains" },
{ name = "elasticsearch", specifier = ">=7.0.0,<7.11.0" },
{ name = "elasticsearch-dsl", specifier = ">=7.0.0,<8.0.0" },
@ -4301,6 +4302,7 @@ requires-dist = [
{ name = "github-reserved-names", specifier = ">=1.0.0" },
{ name = "google-cloud-bigquery" },
{ name = "google-cloud-storage" },
{ name = "gunicorn", marker = "extra == 'deploy'", specifier = "==22.0.0" },
{ name = "hiredis" },
{ name = "html5lib" },
{ name = "humanize" },
@ -4323,9 +4325,10 @@ requires-dist = [
{ name = "psycopg", extras = ["c"] },
{ name = "pycurl" },
{ name = "pydantic" },
{ name = "pyjwt", extras = ["crypto"], specifier = ">=2.8.0" },
{ name = "pymacaroons" },
{ name = "pyqrcode" },
{ name = "pyramid", specifier = ">=2.0" },
{ name = "pymacaroons" },
{ name = "pyramid-jinja2", specifier = ">=2.5" },
{ name = "pyramid-mailer", specifier = ">=0.14.1" },
{ name = "pyramid-openapi3", specifier = ">=0.17.1" },
@ -4335,11 +4338,10 @@ requires-dist = [
{ name = "pyramid-tm", specifier = ">=0.12" },
{ name = "python-slugify" },
{ name = "pytz" },
{ name = "pyjwt", extras = ["crypto"], specifier = ">=2.8.0" },
{ name = "readme-renderer", extras = ["md"], specifier = ">=36.0" },
{ name = "redis", specifier = ">=2.8.0,<6.0.0" },
{ name = "requests" },
{ name = "requests-aws4auth" },
{ name = "redis", specifier = ">=2.8.0,<6.0.0" },
{ name = "rfc3986" },
{ name = "sentry-sdk" },
{ name = "setuptools" },
@ -4356,13 +4358,10 @@ requires-dist = [
{ name = "wtforms", extras = ["email"], specifier = ">=2.0.0" },
{ name = "zope-sqlalchemy" },
{ name = "zxcvbn" },
{ name = "gunicorn", marker = "extra == 'deploy'", specifier = "==22.0.0" },
{ name = "ddtrace", marker = "extra == 'deploy'", specifier = "==2.8.5" },
]
[package.metadata.requires-dev]
dev = [
{ name = "sphinx" },
{ name = "asyncudp", specifier = ">=0.7" },
{ name = "black", specifier = "==24.4.2" },
{ name = "cairosvg" },
@ -4390,20 +4389,19 @@ dev = [
{ name = "pip-tools", specifier = ">=1.0" },
{ name = "pretend" },
{ name = "pyramid-debugtoolbar", specifier = ">=2.5" },
{ name = "pytest", specifier = ">=3.0.0" },
{ name = "pytest-icdiff" },
{ name = "pytest-postgresql", specifier = ">=3.1.3,<7.0.0" },
{ name = "pytest-randomly" },
{ name = "pytest-socket" },
{ name = "pytest", specifier = ">=3.0.0" },
{ name = "pytz" },
{ name = "pyupgrade" },
{ name = "repository-service-tuf" },
{ name = "responses", specifier = ">=0.5.1" },
{ name = "sphinx" },
{ name = "sphinx-autobuild" },
{ name = "sphinxcontrib-httpdomain" },
{ name = "sphinxcontrib-mermaid" },
{ name = "types-wtforms" },
{ name = "types-webob" },
{ name = "types-babel" },
{ name = "types-boto3" },
{ name = "types-certifi" },
@ -4417,6 +4415,8 @@ dev = [
{ name = "types-requests", specifier = "==2.31.0.6" },
{ name = "types-setuptools" },
{ name = "types-stripe" },
{ name = "types-webob" },
{ name = "types-wtforms" },
{ name = "types-zxcvbn" },
{ name = "webtest" },
]

View file

@ -12,10 +12,10 @@
"The latest version is available at: https://gist.github.com/charliermarsh/07afd9f543dfea68408a4a42cede4be4.\n",
"\"\"\"\n",
"\n",
"import httpx\n",
"\n",
"from pathlib import Path\n",
"\n",
"import httpx\n",
"\n",
"api_key = \"\"\n",
"responses = {}"
]
@ -32,9 +32,9 @@
},
"outputs": [],
"source": [
"for i in range(100): # 100 pages with 100 per page -> 10k\n",
"for i in range(100): # 100 pages with 100 per page -> 10k\n",
" print(i)\n",
" if not i in responses:\n",
" if i not in responses:\n",
" # https://libraries.io/api#project-search\n",
" sort = \"dependents_count\"\n",
" url = f\"https://libraries.io/api/search?platforms=Pypi&per_page=100&page={i+1}&sort{sort}&api_key={api_key}\"\n",