complexipy 5.3.0__tar.gz → 5.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {complexipy-5.3.0 → complexipy-5.4.0}/Cargo.lock +1 -1
  2. {complexipy-5.3.0 → complexipy-5.4.0}/Cargo.toml +1 -1
  3. {complexipy-5.3.0 → complexipy-5.4.0}/PKG-INFO +4 -6
  4. {complexipy-5.3.0 → complexipy-5.4.0}/README.md +2 -1
  5. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/index.md +2 -1
  6. {complexipy-5.3.0 → complexipy-5.4.0}/docs/index.md +2 -1
  7. {complexipy-5.3.0 → complexipy-5.4.0}/pyproject.toml +15 -7
  8. {complexipy-5.3.0 → complexipy-5.4.0}/src/classes.rs +5 -4
  9. {complexipy-5.3.0 → complexipy-5.4.0}/src/cognitive_complexity.rs +26 -9
  10. {complexipy-5.3.0 → complexipy-5.4.0}/src/lib.rs +4 -3
  11. {complexipy-5.3.0 → complexipy-5.4.0}/src/utils.rs +0 -49
  12. {complexipy-5.3.0 → complexipy-5.4.0}/src/wasm.rs +3 -1
  13. {complexipy-5.3.0 → complexipy-5.4.0}/uv.lock +64 -91
  14. {complexipy-5.3.0 → complexipy-5.4.0}/.pre-commit-config.yaml +0 -0
  15. {complexipy-5.3.0 → complexipy-5.4.0}/LICENSE +0 -0
  16. {complexipy-5.3.0 → complexipy-5.4.0}/build-wasm.sh +0 -0
  17. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/__init__.py +0 -0
  18. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/_complexipy.pyi +0 -0
  19. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/api.py +0 -0
  20. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/main.py +0 -0
  21. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/py.typed +0 -0
  22. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/types.py +0 -0
  23. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/__init__.py +0 -0
  24. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/cache.py +0 -0
  25. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/csv.py +0 -0
  26. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/diff.py +0 -0
  27. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/gitlab.py +0 -0
  28. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/json.py +0 -0
  29. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/output.py +0 -0
  30. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/sarif.py +0 -0
  31. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/snapshot.py +0 -0
  32. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy/utils/toml.py +0 -0
  33. {complexipy-5.3.0 → complexipy-5.4.0}/complexipy.toml +0 -0
  34. {complexipy-5.3.0 → complexipy-5.4.0}/docs/about.md +0 -0
  35. {complexipy-5.3.0 → complexipy-5.4.0}/docs/comparison-with-ruff.md +0 -0
  36. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/about.md +0 -0
  37. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/comparison-with-ruff.md +0 -0
  38. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/img/complexipy_icon.svg +0 -0
  39. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/understanding-scores.md +0 -0
  40. {complexipy-5.3.0 → complexipy-5.4.0}/docs/es/usage-guide.md +0 -0
  41. {complexipy-5.3.0 → complexipy-5.4.0}/docs/img/complexipy_icon.svg +0 -0
  42. {complexipy-5.3.0 → complexipy-5.4.0}/docs/understanding-scores.md +0 -0
  43. {complexipy-5.3.0 → complexipy-5.4.0}/docs/usage-guide.md +0 -0
  44. {complexipy-5.3.0 → complexipy-5.4.0}/mkdocs.es.yml +0 -0
  45. {complexipy-5.3.0 → complexipy-5.4.0}/mkdocs.yml +0 -0
  46. {complexipy-5.3.0 → complexipy-5.4.0}/serve-web-version.sh +0 -0
  47. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/.vscode-test.mjs +0 -0
  48. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/.vscodeignore +0 -0
  49. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/CHANGELOG.md +0 -0
  50. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/LICENSE +0 -0
  51. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/README.md +0 -0
  52. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/eslint.config.mjs +0 -0
  53. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/extension.js +0 -0
  54. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/img/complexipy.png +0 -0
  55. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/img/complexipy_icon.png +0 -0
  56. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/img/complexipy_icon.svg +0 -0
  57. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/jsconfig.json +0 -0
  58. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/package-lock.json +0 -0
  59. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/package.json +0 -0
  60. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/test/extension.test.js +0 -0
  61. {complexipy-5.3.0 → complexipy-5.4.0}/vscode/complexipy/test/statusbar.test.js +0 -0
@@ -113,7 +113,7 @@ dependencies = [
113
113
 
114
114
  [[package]]
115
115
  name = "complexipy"
116
- version = "5.3.0"
116
+ version = "5.4.0"
117
117
  dependencies = [
118
118
  "console_error_panic_hook",
119
119
  "csv",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "complexipy"
3
- version = "5.3.0"
3
+ version = "5.4.0"
4
4
  edition = "2024"
5
5
  authors = ["Robin Quintero <rohaquinlop301@gmail.com>"]
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: complexipy
3
- Version: 5.3.0
3
+ Version: 5.4.0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -18,12 +18,9 @@ Classifier: Topic :: Software Development :: Testing
18
18
  Classifier: Topic :: Software Development :: Libraries
19
19
  Requires-Dist: tomli>=2.2.1
20
20
  Requires-Dist: typer>=0.12.5
21
- Requires-Dist: ruff>=0.9.0 ; extra == 'dev'
22
- Requires-Dist: ty>=0.0.1a1 ; extra == 'dev'
23
- Provides-Extra: dev
24
21
  License-File: LICENSE
25
22
  Summary: An extremely fast Python library to calculate the cognitive complexity of Python files, written in Rust.
26
- Keywords: cognitive,complexity,cognitive complexity,quality,quality assurance,testing,libraries,performance
23
+ Keywords: maintainability,usability,DevEx tools,cognitive,complexity,cognitive complexity,quality,quality assurance,libraries,performance,static analysis,code quality,technical debt,refactoring,CI/CD,fast
27
24
  Home-Page: https://github.com/rohaquinlop/complexipy
28
25
  Author-email: Robin Quintero <rohaquinlop301@gmail.com>
29
26
  License: MIT
@@ -50,7 +47,8 @@ Project-URL: Repository, https://github.com/rohaquinlop/complexipy
50
47
  <a href="#installation">Installation</a> •
51
48
  <a href="#quick-start">Quick Start</a> •
52
49
  <a href="#integrations">Integrations</a> •
53
- <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a>
50
+ <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a> •
51
+ <a href="https://www.complexipy-teams.com/">Complexipy Teams</a>
54
52
  </p>
55
53
  </div>
56
54
 
@@ -15,7 +15,8 @@
15
15
  <a href="#installation">Installation</a> •
16
16
  <a href="#quick-start">Quick Start</a> •
17
17
  <a href="#integrations">Integrations</a> •
18
- <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a>
18
+ <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a> •
19
+ <a href="https://www.complexipy-teams.com/">Complexipy Teams</a>
19
20
  </p>
20
21
  </div>
21
22
 
@@ -15,7 +15,8 @@
15
15
  <a href="#instalación">Instalación</a> •
16
16
  <a href="#inicio-rápido">Inicio Rápido</a> •
17
17
  <a href="#integraciones">Integraciones</a> •
18
- <a href="https://rohaquinlop.github.io/complexipy/">Documentación</a>
18
+ <a href="https://rohaquinlop.github.io/complexipy/">Documentación</a> •
19
+ <a href="https://www.complexipy-teams.com/">Complexipy Teams</a>
19
20
  </p>
20
21
  </div>
21
22
 
@@ -15,7 +15,8 @@
15
15
  <a href="#installation">Installation</a> •
16
16
  <a href="#quick-start">Quick Start</a> •
17
17
  <a href="#integrations">Integrations</a> •
18
- <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a>
18
+ <a href="https://rohaquinlop.github.io/complexipy/">Documentation</a> •
19
+ <a href="https://www.complexipy-teams.com/">Complexipy Teams</a>
19
20
  </p>
20
21
  </div>
21
22
 
@@ -9,14 +9,22 @@ readme = "README.md"
9
9
  license = { text = "MIT" }
10
10
  authors = [{name = "Robin Quintero", email = "rohaquinlop301@gmail.com"}]
11
11
  keywords = [
12
+ "maintainability",
13
+ "usability",
14
+ "DevEx tools",
12
15
  "cognitive",
13
16
  "complexity",
14
17
  "cognitive complexity",
15
18
  "quality",
16
19
  "quality assurance",
17
- "testing",
18
20
  "libraries",
19
21
  "performance",
22
+ "static analysis",
23
+ "code quality",
24
+ "technical debt",
25
+ "refactoring",
26
+ "CI/CD",
27
+ "fast",
20
28
  ]
21
29
  requires-python = ">=3.8"
22
30
  classifiers = [
@@ -74,12 +82,6 @@ indent-width = 4
74
82
  [tool.ty.src]
75
83
  exclude = ["tests"]
76
84
 
77
- [project.optional-dependencies]
78
- dev = [
79
- "ruff>=0.9.0",
80
- "ty>=0.0.1a1",
81
- ]
82
-
83
85
  [dependency-groups]
84
86
  dev = [
85
87
  "maturin>=1.8.3",
@@ -89,3 +91,9 @@ dev = [
89
91
  "ruff>=0.9.0",
90
92
  "ty>=0.0.1a1",
91
93
  ]
94
+
95
+ [tool.pytest.ini_options]
96
+ testpaths = ["tests"]
97
+ python_files = ["test_*.py", "main.py"]
98
+ python_functions = ["test_*"]
99
+ norecursedirs = ["tests/src"]
@@ -29,12 +29,11 @@ pub struct FunctionComplexity {
29
29
  pub line_complexities: Vec<LineComplexity>,
30
30
  }
31
31
 
32
- #[cfg_attr(feature = "python", pyclass(module = "complexipy", get_all))]
33
32
  #[cfg_attr(
34
- any(feature = "python", feature = "wasm"),
35
- derive(Serialize, Deserialize)
33
+ feature = "python",
34
+ pyclass(module = "complexipy", get_all),
35
+ derive(Serialize, Deserialize, Clone)
36
36
  )]
37
- #[derive(Clone)]
38
37
  pub struct FileComplexity {
39
38
  pub path: String,
40
39
  pub file_name: String,
@@ -51,4 +50,6 @@ pub struct FileComplexity {
51
50
  pub struct CodeComplexity {
52
51
  pub functions: Vec<FunctionComplexity>,
53
52
  pub complexity: u64,
53
+ #[cfg(feature = "wasm")]
54
+ pub version: String,
54
55
  }
@@ -1,10 +1,13 @@
1
1
  #[cfg(any(feature = "python", feature = "wasm"))]
2
2
  mod shared_deps {
3
- pub use crate::classes::{CodeComplexity, FileComplexity, FunctionComplexity, LineComplexity};
3
+ pub use crate::classes::{FunctionComplexity, LineComplexity};
4
4
  pub use crate::utils::{count_bool_ops, get_line_number, has_noqa_complexipy, is_decorator};
5
5
  pub use ruff_python_ast::{self as ast, Stmt};
6
6
  }
7
7
 
8
+ #[cfg(feature = "python")]
9
+ use crate::classes::{CodeComplexity, FileComplexity};
10
+
8
11
  #[cfg(any(feature = "python", feature = "wasm"))]
9
12
  use shared_deps::*;
10
13
 
@@ -30,6 +33,7 @@ mod python_deps {
30
33
  #[cfg(feature = "python")]
31
34
  use python_deps::*;
32
35
 
36
+ #[cfg(feature = "python")]
33
37
  type ComplexitiesAndFailedPaths = (Vec<FileComplexity>, Vec<String>);
34
38
 
35
39
  #[cfg(feature = "python")]
@@ -137,7 +141,8 @@ pub fn process_path(
137
141
  }
138
142
 
139
143
  let repo_path = dir.path().join(&repo_name).to_string_lossy().to_string();
140
- let (complexities, f_paths) = evaluate_dir(&repo_path, quiet, exclude.clone(), check_script);
144
+ let (complexities, f_paths) =
145
+ evaluate_dir(&repo_path, quiet, exclude.clone(), check_script);
141
146
  dir.close()?;
142
147
 
143
148
  file_complexities = complexities;
@@ -168,7 +173,12 @@ pub fn process_path(
168
173
  }
169
174
 
170
175
  #[cfg(feature = "python")]
171
- fn evaluate_dir(path: &str, quiet: bool, exclude: Vec<&str>, check_script: bool) -> ComplexitiesAndFailedPaths {
176
+ fn evaluate_dir(
177
+ path: &str,
178
+ quiet: bool,
179
+ exclude: Vec<&str>,
180
+ check_script: bool,
181
+ ) -> ComplexitiesAndFailedPaths {
172
182
  let mut files_paths: Vec<String> = Vec::new();
173
183
 
174
184
  let parent_dir = path::Path::new(path)
@@ -263,10 +273,12 @@ fn evaluate_dir(path: &str, quiet: bool, exclude: Vec<&str>, check_script: bool)
263
273
  if quiet {
264
274
  let results: Vec<_> = files_paths
265
275
  .iter()
266
- .map(|file_path| match file_complexity(file_path, parent_dir, check_script) {
267
- Ok(file_complexity) => (Some(file_complexity), None),
268
- Err(_) => (None, Some(file_path.clone())),
269
- })
276
+ .map(
277
+ |file_path| match file_complexity(file_path, parent_dir, check_script) {
278
+ Ok(file_complexity) => (Some(file_complexity), None),
279
+ Err(_) => (None, Some(file_path.clone())),
280
+ },
281
+ )
270
282
  .collect();
271
283
 
272
284
  let mut complexities = Vec::new();
@@ -320,7 +332,11 @@ fn evaluate_dir(path: &str, quiet: bool, exclude: Vec<&str>, check_script: bool)
320
332
  #[cfg(feature = "python")]
321
333
  #[pyfunction]
322
334
  #[pyo3(signature = (file_path, base_path, check_script=false))]
323
- pub fn file_complexity(file_path: &str, base_path: &str, check_script: bool) -> PyResult<FileComplexity> {
335
+ pub fn file_complexity(
336
+ file_path: &str,
337
+ base_path: &str,
338
+ check_script: bool,
339
+ ) -> PyResult<FileComplexity> {
324
340
  let path = path::Path::new(file_path);
325
341
  let file_name = path
326
342
  .file_name()
@@ -370,7 +386,8 @@ pub fn code_complexity(code: &str, check_script: bool) -> PyResult<CodeComplexit
370
386
 
371
387
  // println!("{:#?}", ast_body);
372
388
 
373
- let (functions, complexity) = function_level_cognitive_complexity_shared(&ast_body, code, check_script);
389
+ let (functions, complexity) =
390
+ function_level_cognitive_complexity_shared(&ast_body, code, check_script);
374
391
 
375
392
  Ok(CodeComplexity {
376
393
  functions,
@@ -2,16 +2,17 @@ mod classes;
2
2
  mod cognitive_complexity;
3
3
  mod utils;
4
4
 
5
- #[cfg(feature = "python")]
6
- use pyo3::prelude::*;
7
-
8
5
  // Add WASM support when wasm feature is enabled
9
6
  #[cfg(feature = "wasm")]
10
7
  mod wasm;
11
8
 
12
9
  #[cfg(feature = "python")]
13
10
  use classes::{CodeComplexity, FileComplexity, FunctionComplexity, LineComplexity};
11
+ #[cfg(feature = "python")]
14
12
  use cognitive_complexity::{code_complexity, file_complexity, main};
13
+ #[cfg(feature = "python")]
14
+ use pyo3::prelude::*;
15
+ #[cfg(feature = "python")]
15
16
  use utils::{create_snapshot_file, load_snapshot_file, output_csv, output_json};
16
17
 
17
18
  /// A Python module implemented in Rust.
@@ -284,61 +284,12 @@ pub fn count_bool_ops(expr: ast::Expr, nesting_level: u64) -> u64 {
284
284
  complexity += count_bool_ops(value.clone(), nesting_level);
285
285
  }
286
286
  }
287
- ast::Expr::FString(f) => {
288
- for element in f.value.elements() {
289
- if element.is_interpolation() {
290
- if let Some(inter) = element.as_interpolation() {
291
- complexity += count_bool_ops(*inter.expression.clone(), nesting_level);
292
- }
293
- }
294
- }
295
- }
296
- ast::Expr::ListComp(l) => {
297
- complexity +=
298
- count_comprehension_complexity(&l.generators, *l.elt.clone(), nesting_level);
299
- }
300
- ast::Expr::SetComp(s) => {
301
- complexity +=
302
- count_comprehension_complexity(&s.generators, *s.elt.clone(), nesting_level);
303
- }
304
- ast::Expr::Generator(g) => {
305
- complexity +=
306
- count_comprehension_complexity(&g.generators, *g.elt.clone(), nesting_level);
307
- }
308
- ast::Expr::DictComp(d) => {
309
- complexity +=
310
- count_comprehension_complexity(&d.generators, *d.key.clone(), nesting_level);
311
- complexity += count_bool_ops(*d.value.clone(), nesting_level + 1);
312
- }
313
287
  _ => {}
314
288
  }
315
289
 
316
290
  complexity
317
291
  }
318
292
 
319
- #[cfg(any(feature = "python", feature = "wasm"))]
320
- fn count_comprehension_complexity(
321
- generators: &[ast::Comprehension],
322
- elt: ast::Expr,
323
- nesting_level: u64,
324
- ) -> u64 {
325
- let mut complexity: u64 = 1 + nesting_level;
326
-
327
- for (i, clause) in generators.iter().enumerate() {
328
- if i > 0 {
329
- complexity += 1;
330
- }
331
- for if_expr in clause.ifs.iter() {
332
- complexity += 1 + count_bool_ops(if_expr.clone(), nesting_level + 1);
333
- }
334
- complexity += count_bool_ops(clause.iter.clone(), nesting_level + 1);
335
- }
336
-
337
- complexity += count_bool_ops(elt, nesting_level + 1);
338
-
339
- complexity
340
- }
341
-
342
293
  #[cfg(any(feature = "python", feature = "wasm"))]
343
294
  fn count_different_childs_type(expr: ast::Expr, prev_pr: ast::Expr) -> u64 {
344
295
  let mut complexity: u64 = 0;
@@ -27,10 +27,12 @@ fn get_code_complexity(code: &str) -> Result<CodeComplexity, String> {
27
27
  Err(e) => return Err(format!("Parse error: {}", e)),
28
28
  };
29
29
 
30
- let (functions, complexity) = function_level_cognitive_complexity_shared(parsed.suite(), code, false);
30
+ let (functions, complexity) =
31
+ function_level_cognitive_complexity_shared(parsed.suite(), code, false);
31
32
 
32
33
  Ok(CodeComplexity {
33
34
  complexity,
34
35
  functions,
36
+ version: env!("CARGO_PKG_VERSION").to_string(),
35
37
  })
36
38
  }
@@ -64,11 +64,11 @@ wheels = [
64
64
 
65
65
  [[package]]
66
66
  name = "certifi"
67
- version = "2026.2.25"
67
+ version = "2026.4.22"
68
68
  source = { registry = "https://pypi.org/simple" }
69
- sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
69
+ sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" }
70
70
  wheels = [
71
- { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
71
+ { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" },
72
72
  ]
73
73
 
74
74
  [[package]]
@@ -282,34 +282,25 @@ dependencies = [
282
282
  { name = "typer", version = "0.24.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
283
283
  ]
284
284
 
285
- [package.optional-dependencies]
286
- dev = [
287
- { name = "ruff" },
288
- { name = "ty" },
289
- ]
290
-
291
285
  [package.dev-dependencies]
292
286
  dev = [
293
287
  { name = "maturin" },
294
288
  { name = "mkdocs-material" },
295
289
  { name = "pre-commit", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
296
290
  { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
297
- { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
291
+ { name = "pre-commit", version = "4.6.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
298
292
  { name = "pytest", version = "8.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
299
293
  { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
300
- { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
294
+ { name = "pytest", version = "9.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
301
295
  { name = "ruff" },
302
296
  { name = "ty" },
303
297
  ]
304
298
 
305
299
  [package.metadata]
306
300
  requires-dist = [
307
- { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.9.0" },
308
301
  { name = "tomli", specifier = ">=2.2.1" },
309
- { name = "ty", marker = "extra == 'dev'", specifier = ">=0.0.1a1" },
310
302
  { name = "typer", specifier = ">=0.12.5" },
311
303
  ]
312
- provides-extras = ["dev"]
313
304
 
314
305
  [package.metadata.requires-dev]
315
306
  dev = [
@@ -335,8 +326,7 @@ name = "exceptiongroup"
335
326
  version = "1.3.1"
336
327
  source = { registry = "https://pypi.org/simple" }
337
328
  dependencies = [
338
- { name = "typing-extensions", version = "4.13.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
339
- { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.13'" },
329
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
340
330
  ]
341
331
  sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
342
332
  wheels = [
@@ -369,14 +359,14 @@ wheels = [
369
359
 
370
360
  [[package]]
371
361
  name = "filelock"
372
- version = "3.25.2"
362
+ version = "3.29.0"
373
363
  source = { registry = "https://pypi.org/simple" }
374
364
  resolution-markers = [
375
365
  "python_full_version >= '3.10'",
376
366
  ]
377
- sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" }
367
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" }
378
368
  wheels = [
379
- { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" },
369
+ { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" },
380
370
  ]
381
371
 
382
372
  [[package]]
@@ -417,23 +407,23 @@ wheels = [
417
407
 
418
408
  [[package]]
419
409
  name = "identify"
420
- version = "2.6.18"
410
+ version = "2.6.19"
421
411
  source = { registry = "https://pypi.org/simple" }
422
412
  resolution-markers = [
423
413
  "python_full_version >= '3.10'",
424
414
  ]
425
- sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580, upload-time = "2026-03-15T18:39:50.319Z" }
415
+ sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" }
426
416
  wheels = [
427
- { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394, upload-time = "2026-03-15T18:39:48.915Z" },
417
+ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" },
428
418
  ]
429
419
 
430
420
  [[package]]
431
421
  name = "idna"
432
- version = "3.11"
422
+ version = "3.13"
433
423
  source = { registry = "https://pypi.org/simple" }
434
- sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
424
+ sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" }
435
425
  wheels = [
436
- { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
426
+ { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" },
437
427
  ]
438
428
 
439
429
  [[package]]
@@ -459,7 +449,7 @@ resolution-markers = [
459
449
  "python_full_version == '3.9.*'",
460
450
  ]
461
451
  dependencies = [
462
- { name = "zipp", version = "3.23.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
452
+ { name = "zipp", version = "3.23.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
463
453
  ]
464
454
  sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" }
465
455
  wheels = [
@@ -740,26 +730,26 @@ wheels = [
740
730
 
741
731
  [[package]]
742
732
  name = "maturin"
743
- version = "1.12.6"
733
+ version = "1.13.1"
744
734
  source = { registry = "https://pypi.org/simple" }
745
735
  dependencies = [
746
736
  { name = "tomli", marker = "python_full_version < '3.11'" },
747
737
  ]
748
- sdist = { url = "https://files.pythonhosted.org/packages/0c/18/8b2eebd3ea086a5ec73d7081f95ec64918ceda1900075902fc296ea3ad55/maturin-1.12.6.tar.gz", hash = "sha256:d37be3a811a7f2ee28a0fa0964187efa50e90f21da0c6135c27787fa0b6a89db", size = 269165, upload-time = "2026-03-01T14:54:04.21Z" }
738
+ sdist = { url = "https://files.pythonhosted.org/packages/39/16/b284a7bc4af3dd87717c784278c1b8cb18606ad1f6f7a671c47bfd9c3df0/maturin-1.13.1.tar.gz", hash = "sha256:9a87ff3b8e4d1c6eac33ebfe8e261e8236516d98d45c0323550621819b5a1a2f", size = 340369, upload-time = "2026-04-09T15:14:07.026Z" }
749
739
  wheels = [
750
- { url = "https://files.pythonhosted.org/packages/71/8b/9ddfde8a485489e3ebdc50ee3042ef1c854f00dfea776b951068f6ffe451/maturin-1.12.6-py3-none-linux_armv6l.whl", hash = "sha256:6892b4176992fcc143f9d1c1c874a816e9a041248eef46433db87b0f0aff4278", size = 9789847, upload-time = "2026-03-01T14:54:09.172Z" },
751
- { url = "https://files.pythonhosted.org/packages/ef/e8/5f7fd3763f214a77ac0388dbcc71cc30aec5490016bd0c8e6bd729fc7b0a/maturin-1.12.6-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c0c742beeeef7fb93b6a81bd53e75507887e396fd1003c45117658d063812dad", size = 19023833, upload-time = "2026-03-01T14:53:46.743Z" },
752
- { url = "https://files.pythonhosted.org/packages/e0/7f/706ff3839c8b2046436d4c2bc97596c558728264d18abc298a1ad862a4be/maturin-1.12.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2cb41139295eed6411d3cdafc7430738094c2721f34b7eeb44f33cac516115dc", size = 9821620, upload-time = "2026-03-01T14:54:12.04Z" },
753
- { url = "https://files.pythonhosted.org/packages/0e/9c/70917fb123c8dd6b595e913616c9c72d730cbf4a2b6cac8077dc02a12586/maturin-1.12.6-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:351f3af1488a7cbdcff3b6d8482c17164273ac981378a13a4a9937a49aec7d71", size = 9849107, upload-time = "2026-03-01T14:53:48.971Z" },
754
- { url = "https://files.pythonhosted.org/packages/59/ea/f1d6ad95c0a12fbe761a7c28a57540341f188564dbe8ad730a4d1788cd32/maturin-1.12.6-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:6dbddfe4dc7ddee60bbac854870bd7cfec660acb54d015d24597d59a1c828f61", size = 10242855, upload-time = "2026-03-01T14:53:44.605Z" },
755
- { url = "https://files.pythonhosted.org/packages/93/1b/2419843a4f1d2fb4747f3dc3d9c4a2881cd97a3274dd94738fcdf0835e79/maturin-1.12.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:8fdb0f63e77ee3df0f027a120e9af78dbc31edf0eb0f263d55783c250c33b728", size = 9674972, upload-time = "2026-03-01T14:53:52.763Z" },
756
- { url = "https://files.pythonhosted.org/packages/71/46/b60ab2fc996d904b40e55bd475599dcdccd8f7ad3e649bf95e87970df466/maturin-1.12.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:fa84b7493a2e80759cacc2e668fa5b444d55b9994e90707c42904f55d6322c1e", size = 9645755, upload-time = "2026-03-01T14:53:58.497Z" },
757
- { url = "https://files.pythonhosted.org/packages/a4/96/03f2b55a8c226805115232fc23c4a4f33f0c9d39e11efab8166dc440f80d/maturin-1.12.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:e90dc12bc6a38e9495692a36c9e231c4d7e0c9bfde60719468ab7d8673db3c45", size = 12737612, upload-time = "2026-03-01T14:54:05.393Z" },
758
- { url = "https://files.pythonhosted.org/packages/2b/c2/648667022c5b53cdccefa67c245e8a984970f3045820f00c2e23bdb2aff4/maturin-1.12.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06fc8d089f98623ce924c669b70911dfed30f9a29956c362945f727f9abc546b", size = 10455028, upload-time = "2026-03-01T14:54:07.349Z" },
759
- { url = "https://files.pythonhosted.org/packages/63/d6/5b5efe3ca0c043357ed3f8d2b2d556169fdbf1ff75e50e8e597708a359d2/maturin-1.12.6-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:75133e56274d43b9227fd49dca9a86e32f1fd56a7b55544910c4ce978c2bb5aa", size = 10014531, upload-time = "2026-03-01T14:53:54.548Z" },
760
- { url = "https://files.pythonhosted.org/packages/68/d5/39c594c27b1a8b32a0cb95fff9ad60b888c4352d1d1c389ac1bd20dc1e16/maturin-1.12.6-py3-none-win32.whl", hash = "sha256:3f32e0a3720b81423c9d35c14e728cb1f954678124749776dc72d533ea1115e8", size = 8553012, upload-time = "2026-03-01T14:53:50.706Z" },
761
- { url = "https://files.pythonhosted.org/packages/94/66/b262832a91747e04051e21f986bd01a8af81fbffafacc7d66a11e79aab5f/maturin-1.12.6-py3-none-win_amd64.whl", hash = "sha256:977290159d252db946054a0555263c59b3d0c7957135c69e690f4b1558ee9983", size = 9890470, upload-time = "2026-03-01T14:53:56.659Z" },
762
- { url = "https://files.pythonhosted.org/packages/e3/47/76b8ca470ddc8d7d36aa8c15f5a6aed1841806bb93a0f4ead8ee61e9a088/maturin-1.12.6-py3-none-win_arm64.whl", hash = "sha256:bae91976cdc8148038e13c881e1e844e5c63e58e026e8b9945aa2d19b3b4ae89", size = 8606158, upload-time = "2026-03-01T14:54:02.423Z" },
740
+ { url = "https://files.pythonhosted.org/packages/43/4d/a23fc95be881aa8c7a6ea353410417872e4d7065df03d7f3db8f0dbed4a7/maturin-1.13.1-py3-none-linux_armv6l.whl", hash = "sha256:416e4e01cb88b798e606ee43929df897e42c1647b722ef68283816cca99a8742", size = 10102444, upload-time = "2026-04-09T15:13:48.393Z" },
741
+ { url = "https://files.pythonhosted.org/packages/a6/1e/65c385d65bae95cf04895d52f39dbed8b1453ae55da2903d252ade40a774/maturin-1.13.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:72888e87819ce546d0d2df900e4b385e4ef299077d92ee37b48923a5602dae94", size = 19576043, upload-time = "2026-04-09T15:14:08.685Z" },
742
+ { url = "https://files.pythonhosted.org/packages/8f/13/f6bc868d0bfecd9314870b97f530a167e31f7878ac4945c78245c6eef69c/maturin-1.13.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:98b5fcf1a186c217830a8295ecc2989c6b1cf50945417adfc15252107b9475b7", size = 10117339, upload-time = "2026-04-09T15:13:40.559Z" },
743
+ { url = "https://files.pythonhosted.org/packages/51/58/279e081305c11c1c1c4fccacf77df8959646c5d4de7a57ec7e787653e270/maturin-1.13.1-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:3da18cccf2f683c0977bff9146a0908d6ffce836d600665736ac01679f588cb9", size = 10139689, upload-time = "2026-04-09T15:13:38.291Z" },
744
+ { url = "https://files.pythonhosted.org/packages/00/94/69391af5396c6aab723932240803f49e5f3de3dd7c57d32f02d237a0ce32/maturin-1.13.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:6b1e5916a253243e8f5f9e847b62bbc98420eec48c9ce2e2e8724c6da89d359b", size = 10551141, upload-time = "2026-04-09T15:13:42.887Z" },
745
+ { url = "https://files.pythonhosted.org/packages/9e/bf/4edac2667b49e3733438062ae416413b8fc8d42e1bd499ba15e1fb02fc55/maturin-1.13.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:dc91031e0619c1e28730279ef9ee5f106c9b9ec806b013f888676b242f892eb7", size = 9983094, upload-time = "2026-04-09T15:13:56.868Z" },
746
+ { url = "https://files.pythonhosted.org/packages/79/94/a6d651cfe8fc6bf2e892c90e3cdbb25c06d81c9115140d03ea1a68a97575/maturin-1.13.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:001741c6cff56aa8ea59a0d78ae990c0550d0e3e82b00b683eedb4158a8ef7e6", size = 9949980, upload-time = "2026-04-09T15:13:59.185Z" },
747
+ { url = "https://files.pythonhosted.org/packages/b5/d1/82c067464f848e38af9910bce55eb54302b1c1284a279d515dbfcf5994f5/maturin-1.13.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:01c845825c917c07c1d0b2c9032c59c16a7d383d1e649a46481d3e5693c2750f", size = 13186276, upload-time = "2026-04-09T15:13:45.725Z" },
748
+ { url = "https://files.pythonhosted.org/packages/7c/f4/25367baf1025580f047f9b37598bb3fadc416e24536afd4f28e190335c73/maturin-1.13.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f69093ed4a0e6464e52a7fc26d714f859ce15630ec8070743398c6bf41f38a9e", size = 10891837, upload-time = "2026-04-09T15:13:35.68Z" },
749
+ { url = "https://files.pythonhosted.org/packages/af/be/caafad8ce74974b7deafdf144d12f758993dfea4c66c9905b138f51a7792/maturin-1.13.1-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:c1490584f3c70af45466ee99065b49e6657ebdccac6b10571bb44681309c9396", size = 10351032, upload-time = "2026-04-09T15:14:01.632Z" },
750
+ { url = "https://files.pythonhosted.org/packages/66/0e/970a721d27cfa410e8bfa0a1e32e6ef52cb8169692110a5fdabe1af3f570/maturin-1.13.1-py3-none-win32.whl", hash = "sha256:c6a720b252c99de072922dbe4432ab19662b6f80045b0355fec23bdfccb450da", size = 8855465, upload-time = "2026-04-09T15:13:51.122Z" },
751
+ { url = "https://files.pythonhosted.org/packages/88/70/7c1e0d65fa147d5479055a171541c82b8cdfc1c825d85a82240470f14176/maturin-1.13.1-py3-none-win_amd64.whl", hash = "sha256:a2017d2281203d0c6570240e7d746564d766d756105823b7de68bda6ae722711", size = 10230471, upload-time = "2026-04-09T15:13:53.89Z" },
752
+ { url = "https://files.pythonhosted.org/packages/c5/2a/afe0193b673a79ffd2e01ad999511b7e9e6b49af02bb3759d82a78c3043d/maturin-1.13.1-py3-none-win_arm64.whl", hash = "sha256:2839024dcd65776abb4759e5bca29941971e095574162a4d335191da4be9ff24", size = 8905575, upload-time = "2026-04-09T15:14:03.891Z" },
763
753
  ]
764
754
 
765
755
  [[package]]
@@ -802,7 +792,7 @@ dependencies = [
802
792
  { name = "mkdocs-get-deps", version = "0.2.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
803
793
  { name = "packaging" },
804
794
  { name = "pathspec", version = "0.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
805
- { name = "pathspec", version = "1.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
795
+ { name = "pathspec", version = "1.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
806
796
  { name = "pyyaml" },
807
797
  { name = "pyyaml-env-tag", version = "0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
808
798
  { name = "pyyaml-env-tag", version = "1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
@@ -844,7 +834,7 @@ dependencies = [
844
834
  { name = "importlib-metadata", version = "8.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
845
835
  { name = "mergedeep", marker = "python_full_version >= '3.9'" },
846
836
  { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
847
- { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
837
+ { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
848
838
  { name = "pyyaml", marker = "python_full_version >= '3.9'" },
849
839
  ]
850
840
  sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" }
@@ -901,11 +891,11 @@ wheels = [
901
891
 
902
892
  [[package]]
903
893
  name = "packaging"
904
- version = "26.0"
894
+ version = "26.1"
905
895
  source = { registry = "https://pypi.org/simple" }
906
- sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" }
896
+ sdist = { url = "https://files.pythonhosted.org/packages/df/de/0d2b39fb4af88a0258f3bac87dfcbb48e73fbdea4a2ed0e2213f9a4c2f9a/packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de", size = 215519, upload-time = "2026-04-14T21:12:49.362Z" }
907
897
  wheels = [
908
- { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
898
+ { url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
909
899
  ]
910
900
 
911
901
  [[package]]
@@ -931,15 +921,15 @@ wheels = [
931
921
 
932
922
  [[package]]
933
923
  name = "pathspec"
934
- version = "1.0.4"
924
+ version = "1.1.0"
935
925
  source = { registry = "https://pypi.org/simple" }
936
926
  resolution-markers = [
937
927
  "python_full_version >= '3.10'",
938
928
  "python_full_version == '3.9.*'",
939
929
  ]
940
- sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" }
930
+ sdist = { url = "https://files.pythonhosted.org/packages/2e/17/9c3094b822982b9f1ea666d8580ce59000f61f87c1663556fb72031ad9ec/pathspec-1.1.0.tar.gz", hash = "sha256:f5d7c555da02fd8dde3e4a2354b6aba817a89112fa8f333f7917a2a4834dd080", size = 133918, upload-time = "2026-04-23T01:46:22.298Z" }
941
931
  wheels = [
942
- { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" },
932
+ { url = "https://files.pythonhosted.org/packages/fa/c9/8eed0486f074e9f1ca7f8ce5ad663e65f12fdab344028d658fa1b03d35e0/pathspec-1.1.0-py3-none-any.whl", hash = "sha256:574b128f7456bd899045ccd142dd446af7e6cfd0072d63ad73fbc55fbb4aaa42", size = 56264, upload-time = "2026-04-23T01:46:20.606Z" },
943
933
  ]
944
934
 
945
935
  [[package]]
@@ -968,14 +958,14 @@ wheels = [
968
958
 
969
959
  [[package]]
970
960
  name = "platformdirs"
971
- version = "4.9.4"
961
+ version = "4.9.6"
972
962
  source = { registry = "https://pypi.org/simple" }
973
963
  resolution-markers = [
974
964
  "python_full_version >= '3.10'",
975
965
  ]
976
- sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737, upload-time = "2026-03-05T18:34:13.271Z" }
966
+ sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" }
977
967
  wheels = [
978
- { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216, upload-time = "2026-03-05T18:34:12.172Z" },
968
+ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
979
969
  ]
980
970
 
981
971
  [[package]]
@@ -1043,21 +1033,21 @@ wheels = [
1043
1033
 
1044
1034
  [[package]]
1045
1035
  name = "pre-commit"
1046
- version = "4.5.1"
1036
+ version = "4.6.0"
1047
1037
  source = { registry = "https://pypi.org/simple" }
1048
1038
  resolution-markers = [
1049
1039
  "python_full_version >= '3.10'",
1050
1040
  ]
1051
1041
  dependencies = [
1052
1042
  { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1053
- { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1043
+ { name = "identify", version = "2.6.19", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1054
1044
  { name = "nodeenv", marker = "python_full_version >= '3.10'" },
1055
1045
  { name = "pyyaml", marker = "python_full_version >= '3.10'" },
1056
1046
  { name = "virtualenv", marker = "python_full_version >= '3.10'" },
1057
1047
  ]
1058
- sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232, upload-time = "2025-12-16T21:14:33.552Z" }
1048
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" }
1059
1049
  wheels = [
1060
- { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437, upload-time = "2025-12-16T21:14:32.409Z" },
1050
+ { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" },
1061
1051
  ]
1062
1052
 
1063
1053
  [[package]]
@@ -1162,7 +1152,7 @@ wheels = [
1162
1152
 
1163
1153
  [[package]]
1164
1154
  name = "pytest"
1165
- version = "9.0.2"
1155
+ version = "9.0.3"
1166
1156
  source = { registry = "https://pypi.org/simple" }
1167
1157
  resolution-markers = [
1168
1158
  "python_full_version >= '3.10'",
@@ -1176,9 +1166,9 @@ dependencies = [
1176
1166
  { name = "pygments", version = "2.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1177
1167
  { name = "tomli", marker = "python_full_version == '3.10.*'" },
1178
1168
  ]
1179
- sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
1169
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" }
1180
1170
  wheels = [
1181
- { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
1171
+ { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" },
1182
1172
  ]
1183
1173
 
1184
1174
  [[package]]
@@ -1195,19 +1185,19 @@ wheels = [
1195
1185
 
1196
1186
  [[package]]
1197
1187
  name = "python-discovery"
1198
- version = "1.2.1"
1188
+ version = "1.2.2"
1199
1189
  source = { registry = "https://pypi.org/simple" }
1200
1190
  dependencies = [
1201
1191
  { name = "filelock", version = "3.16.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1202
1192
  { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
1203
- { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1193
+ { name = "filelock", version = "3.29.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1204
1194
  { name = "platformdirs", version = "4.3.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1205
1195
  { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
1206
- { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1196
+ { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1207
1197
  ]
1208
- sdist = { url = "https://files.pythonhosted.org/packages/b9/88/815e53084c5079a59df912825a279f41dd2e0df82281770eadc732f5352c/python_discovery-1.2.1.tar.gz", hash = "sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e", size = 58457, upload-time = "2026-03-26T22:30:44.496Z" }
1198
+ sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872, upload-time = "2026-04-07T17:28:49.249Z" }
1209
1199
  wheels = [
1210
- { url = "https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl", hash = "sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502", size = 31674, upload-time = "2026-03-26T22:30:43.396Z" },
1200
+ { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894, upload-time = "2026-04-07T17:28:48.09Z" },
1211
1201
  ]
1212
1202
 
1213
1203
  [[package]]
@@ -1531,7 +1521,7 @@ dependencies = [
1531
1521
  { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1532
1522
  { name = "rich", marker = "python_full_version < '3.9'" },
1533
1523
  { name = "shellingham", marker = "python_full_version < '3.9'" },
1534
- { name = "typing-extensions", version = "4.13.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1524
+ { name = "typing-extensions", marker = "python_full_version < '3.9'" },
1535
1525
  ]
1536
1526
  sdist = { url = "https://files.pythonhosted.org/packages/6d/c1/933d30fd7a123ed981e2a1eedafceab63cb379db0402e438a13bc51bbb15/typer-0.20.1.tar.gz", hash = "sha256:68585eb1b01203689c4199bc440d6be616f0851e9f0eb41e4a778845c5a0fd5b", size = 105968, upload-time = "2025-12-19T16:48:56.302Z" }
1537
1527
  wheels = [
@@ -1578,27 +1568,11 @@ wheels = [
1578
1568
  name = "typing-extensions"
1579
1569
  version = "4.13.2"
1580
1570
  source = { registry = "https://pypi.org/simple" }
1581
- resolution-markers = [
1582
- "python_full_version < '3.9'",
1583
- ]
1584
1571
  sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967, upload-time = "2025-04-10T14:19:05.416Z" }
1585
1572
  wheels = [
1586
1573
  { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806, upload-time = "2025-04-10T14:19:03.967Z" },
1587
1574
  ]
1588
1575
 
1589
- [[package]]
1590
- name = "typing-extensions"
1591
- version = "4.15.0"
1592
- source = { registry = "https://pypi.org/simple" }
1593
- resolution-markers = [
1594
- "python_full_version >= '3.10'",
1595
- "python_full_version == '3.9.*'",
1596
- ]
1597
- sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" }
1598
- wheels = [
1599
- { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
1600
- ]
1601
-
1602
1576
  [[package]]
1603
1577
  name = "urllib3"
1604
1578
  version = "2.2.3"
@@ -1626,23 +1600,22 @@ wheels = [
1626
1600
 
1627
1601
  [[package]]
1628
1602
  name = "virtualenv"
1629
- version = "21.2.0"
1603
+ version = "21.2.4"
1630
1604
  source = { registry = "https://pypi.org/simple" }
1631
1605
  dependencies = [
1632
1606
  { name = "distlib" },
1633
1607
  { name = "filelock", version = "3.16.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1634
1608
  { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
1635
- { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1609
+ { name = "filelock", version = "3.29.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1636
1610
  { name = "platformdirs", version = "4.3.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1637
1611
  { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" },
1638
- { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1612
+ { name = "platformdirs", version = "4.9.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1639
1613
  { name = "python-discovery" },
1640
- { name = "typing-extensions", version = "4.13.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },
1641
- { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9' and python_full_version < '3.11'" },
1614
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
1642
1615
  ]
1643
- sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618, upload-time = "2026-03-09T17:24:38.013Z" }
1616
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/98/3a7e644e19cb26133488caff231be390579860bbbb3da35913c49a1d0a46/virtualenv-21.2.4.tar.gz", hash = "sha256:b294ef68192638004d72524ce7ef303e9d0cf5a44c95ce2e54a7500a6381cada", size = 5850742, upload-time = "2026-04-14T22:15:31.438Z" }
1644
1617
  wheels = [
1645
- { url = "https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f", size = 5825084, upload-time = "2026-03-09T17:24:35.378Z" },
1618
+ { url = "https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl", hash = "sha256:29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac", size = 5831232, upload-time = "2026-04-14T22:15:29.342Z" },
1646
1619
  ]
1647
1620
 
1648
1621
  [[package]]
@@ -1745,12 +1718,12 @@ wheels = [
1745
1718
 
1746
1719
  [[package]]
1747
1720
  name = "zipp"
1748
- version = "3.23.0"
1721
+ version = "3.23.1"
1749
1722
  source = { registry = "https://pypi.org/simple" }
1750
1723
  resolution-markers = [
1751
1724
  "python_full_version == '3.9.*'",
1752
1725
  ]
1753
- sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" }
1726
+ sdist = { url = "https://files.pythonhosted.org/packages/30/21/093488dfc7cc8964ded15ab726fad40f25fd3d788fd741cc1c5a17d78ee8/zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110", size = 25965, upload-time = "2026-04-13T23:21:46.6Z" }
1754
1727
  wheels = [
1755
- { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" },
1728
+ { url = "https://files.pythonhosted.org/packages/08/8a/0861bec20485572fbddf3dfba2910e38fe249796cb73ecdeb74e07eeb8d3/zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc", size = 10378, upload-time = "2026-04-13T23:21:45.386Z" },
1756
1729
  ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes