Skip to content

feat: support customize cutoff-based detection by ase#2408

Merged
njzjz merged 22 commits intodeepmodeling:masterfrom
SchrodingersCattt:feat/support-ase-detect
Mar 15, 2026
Merged

feat: support customize cutoff-based detection by ase#2408
njzjz merged 22 commits intodeepmodeling:masterfrom
SchrodingersCattt:feat/support-ase-detect

Conversation

@SchrodingersCattt
Copy link
Copy Markdown
Contributor

@SchrodingersCattt SchrodingersCattt commented Dec 28, 2025

Summary by CodeRabbit

  • New Features

    • ASE-based bond detection with per‑pair custom cutoffs and a global cutoff multiplier; avoids duplicate bonds across periodic boundaries.
    • Optional SciPy-powered connected‑components grouping for bond clustering.
  • Improvements

    • Auto-enables ASE mode when custom cutoffs or a non‑default multiplier are supplied (with a warning).
    • New CLI flags: --use-ase, --ase-cutoff-mult, --ase-pair-cutoffs.
    • Improved logging during LAMMPS file processing.
  • Tests

    • Expanded coverage for ASE mode, CLI args, cutoff parsing, bond detection, deduplication, and clustering.

Comment thread tests/test_ase.py Fixed
Comment thread tests/test_ase.py Fixed
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 28, 2025

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds ASE-based bond detection with configurable global and per-pair cutoffs, optional SciPy connected-component grouping for bonds, CLI flags to control ASE behavior, auto-enable logic for ASE when cutoff parameters are provided, extra logging, and new tests for these flows.

Changes

Cohort / File(s) Summary
ASE bond detection & helpers
reacnetgenerator/_detect.py
Adds _getbondfromase() (ASE neighbor-list bond perception with global multiplier and parsed per-pair cutoffs), _parse_custom_cutoffs(); _getbondfromcrd() delegates to ASE when enabled; _connectmolecule() may use SciPy connected-components; adds LAMMPS-reading logging.
CLI option exposure
reacnetgenerator/commandline.py
Adds CLI flags --use-ase, --ase-cutoff-mult, --ase-pair-cutoffs; passes ASE options into runtime and includes flags in parm2cmd().
ReacNetGenerator config / auto-enable
reacnetgenerator/reacnetgen.py
Adds default config keys use_ase, ase_cutoff_mult, custom_cutoffs; auto-enables use_ase (with a warning) when custom cutoffs or non-default multiplier provided.
Unit tests — ASE mode & CLI
tests/test_ase.py, tests/test_ase_cli.py, tests/test_detect.py, tests/test_reacnetgen.py
Adds tests for ASE parsing, _getbondfromase() behavior (bonds, levels, PBC deduplication), SciPy clustering branch, CLI parsing/help, and auto-enable logic.

Sequence Diagram

sequenceDiagram
    participant User
    participant CLI as commandline.py
    participant RNG as ReacNetGenerator
    participant Detect as _detect.py
    participant ASE as ASE
    participant SciPy as SciPy

    User->>CLI: invoke with ASE flags or custom cutoffs
    CLI->>RNG: pass use_ase, ase_cutoff_mult, custom_cutoffs
    RNG->>RNG: evaluate auto-enable and set use_ase if needed
    alt use_ase == true
        RNG->>Detect: request bond detection (_getbondfromcrd)
        Detect->>Detect: _parse_custom_cutoffs()
        Detect->>ASE: neighbor-list using global_cutoff*mult + per-pair cutoffs
        ASE-->>Detect: neighbor pairs (deduplicated across PBC)
        Detect->>Detect: assemble per-atom bonds and bond levels
    else
        RNG->>Detect: request bond detection (OpenBabel path)
    end
    Detect->>Detect: _connectmolecule(bonds)
    alt SciPy available
        Detect->>SciPy: build CSR graph, compute connected components
        SciPy-->>Detect: component labels
        Detect->>Detect: split bonds by component
    else
        Detect->>Detect: fallback DPS-based grouping
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title accurately describes the main change: adding support for customizable cutoff-based bond detection using ASE (Atomic Simulation Environment).
Docstring Coverage ✅ Passed Docstring coverage is 89.80% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 28, 2025

Codecov Report

❌ Patch coverage is 94.66667% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 95.23%. Comparing base (a7c28d9) to head (2a49d35).
⚠️ Report is 8 commits behind head on master.

Files with missing lines Patch % Lines
reacnetgenerator/commandline.py 66.66% 3 Missing ⚠️
reacnetgenerator/_detect.py 98.41% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2408      +/-   ##
==========================================
- Coverage   95.26%   95.23%   -0.03%     
==========================================
  Files          17       17              
  Lines        1457     1532      +75     
==========================================
+ Hits         1388     1459      +71     
- Misses         69       73       +4     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Dec 28, 2025

Merging this PR will improve performance by 17.55%

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 2 improved benchmarks
✅ 7 untouched benchmarks
⏩ 8 skipped benchmarks1

Performance Changes

Mode Benchmark BASE HEAD Efficiency
WallTime test_benchmark_hmm[reacnetgen_param2] 2.2 ms 1.8 ms +17.18%
WallTime test_benchmark_hmm[reacnetgen_param1] 2.2 ms 1.8 ms +17.55%

Comparing SchrodingersCattt:feat/support-ase-detect (2a49d35) with master (a7c28d9)

Open in CodSpeed

Footnotes

  1. 8 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
reacnetgenerator/_detect.py (1)

221-221: Prefix unused variable with underscore.

The n_components variable is not used in the subsequent logic. Following Python conventions, prefix it with an underscore to indicate it's intentionally unused.

🔎 Proposed fix
-            n_components, labels = connected_components(graph, directed=False)
+            _n_components, labels = connected_components(graph, directed=False)
tests/test_ase.py (1)

109-111: Consider clarifying frozenset construction.

While frozenset({"O", "O"}) is technically correct (frozensets deduplicate automatically), writing frozenset({"O"}) would be clearer and avoid static analysis warnings.

🔎 Proposed fix
         assert frozenset({"H", "O"}) in parsed
-        assert frozenset({"O", "O"}) in parsed
+        assert frozenset({"O"}) in parsed
         assert parsed[frozenset({"H", "O"})] == 1.5
-        assert parsed[frozenset({"O", "O"})] == 2.0
+        assert parsed[frozenset({"O"})] == 2.0
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 943409a and e3b6205.

📒 Files selected for processing (5)
  • reacnetgenerator/_detect.py
  • reacnetgenerator/commandline.py
  • reacnetgenerator/reacnetgen.py
  • tests/test_ase.py
  • tests/test_ase_cli.py
🧰 Additional context used
🧬 Code graph analysis (3)
tests/test_ase_cli.py (1)
reacnetgenerator/commandline.py (1)
  • main_parser (13-153)
tests/test_ase.py (1)
reacnetgenerator/reacnetgen.py (1)
  • ReacNetGenerator (67-382)
reacnetgenerator/_detect.py (1)
reacnetgenerator/utils.py (5)
  • SharedRNGData (388-423)
  • WriteBuffer (44-119)
  • listtobytes (217-230)
  • run_mp (535-568)
  • append (76-85)
🪛 GitHub Actions: Type checker
reacnetgenerator/_detect.py

[error] 218-218: "csr_matrix" is possibly unbound (reportPossiblyUnboundVariable)

🪛 GitHub Check: CodeQL
tests/test_ase.py

[notice] 12-12: Unused import
Import of 'natural_cutoffs' is not used.
Import of 'neighbor_list' is not used.


[notice] 19-19: Unused import
Import of 'connected_components' is not used.

🪛 GitHub Check: pyright
reacnetgenerator/_detect.py

[failure] 221-221:
"connected_components" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 218-218:
"csr_matrix" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 441-441:
Cannot access attribute "ase_cutoff_mult" for class "ReacNetGenerator"
  Attribute "ase_cutoff_mult" is unknown (reportAttributeAccessIssue)


[failure] 419-419:
"neighbor_list" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 407-407:
Cannot access attribute "ase_cutoff_mult" for class "ReacNetGenerator"
  Attribute "ase_cutoff_mult" is unknown (reportAttributeAccessIssue)


[failure] 392-392:
Cannot access attribute "custom_cutoffs" for class "ReacNetGenerator"
  Attribute "custom_cutoffs" is unknown (reportAttributeAccessIssue)


[failure] 391-391:
Cannot access attribute "custom_cutoffs" for class "ReacNetGenerator"
  Attribute "custom_cutoffs" is unknown (reportAttributeAccessIssue)


[failure] 387-387:
Argument of type "float" cannot be assigned to parameter "mult" of type "int" in function "natural_cutoffs"
  "float" is not assignable to "int" (reportArgumentType)


[failure] 387-387:
"natural_cutoffs" is possibly unbound (reportPossiblyUnboundVariable)

🪛 Ruff (0.14.10)
tests/test_ase.py

109-109: Sets should not contain duplicate item "O"

Remove duplicate item

(B033)


111-111: Sets should not contain duplicate item "O"

Remove duplicate item

(B033)


231-231: Loop control variable component not used within loop body

Rename unused component to _component

(B007)

reacnetgenerator/_detect.py

221-221: Unpacked variable n_components is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


383-383: Avoid specifying long messages outside the exception class

(TRY003)

🔇 Additional comments (14)
reacnetgenerator/reacnetgen.py (2)

171-173: LGTM! Sensible default values for ASE configuration.

The default values align with the CLI argument defaults and provide reasonable starting points for ASE-based bond detection.


233-241: LGTM! Well-designed auto-enabling logic.

The automatic activation of ASE mode when custom cutoffs or modified multipliers are provided improves the user experience by reducing configuration overhead.

reacnetgenerator/_detect.py (6)

44-63: LGTM! Proper handling of optional dependencies.

The conditional import pattern with availability flags follows best practices and matches the existing pattern used for OpenBabel.


476-478: LGTM! Clean conditional delegation to ASE.

The use of getattr with a default value provides robust fallback behavior when the use_ase attribute is not present.


547-547: LGTM! Improved observability for LAMMPS dump parsing.

The additional logging provides useful visibility into the parsing progress and helps with debugging.

Also applies to: 576-576, 583-583


448-453: Excellent duplicate bond prevention for PBC.

The duplicate check is crucial for preventing "bond already exists" errors when PBC creates periodic images. This is correctly validated by the test suite.


382-384: The method is already properly guarded by callers.

The code at line 477-478 in _detect.py checks if getattr(self.rng, "use_ase", False): before invoking _getbondfromase. The ImportError at lines 382-383 serves as an appropriate defensive check within the method, ensuring it fails gracefully if called incorrectly.


387-387: No action needed. ASE's natural_cutoffs function explicitly accepts both int and float for the mult parameter. The code at line 387 correctly passes mult=1.0, which is a valid type.

reacnetgenerator/commandline.py (2)

70-86: LGTM! Well-structured CLI arguments for ASE mode.

The arguments provide clear options for users to control ASE-based bond detection, with sensible defaults that align with the internal configuration.


181-183: LGTM! Consistent parameter wiring.

The ASE parameters are correctly passed from CLI arguments to ReacNetGenerator and properly reconstructed in parm2cmd.

Also applies to: 236-241

tests/test_ase_cli.py (1)

1-65: LGTM! Comprehensive CLI argument tests.

The tests thoroughly validate that ASE-related command-line arguments are correctly parsed, have proper defaults, and are documented in help text.

tests/test_ase.py (3)

43-92: LGTM! Thorough tests for ASE mode enabling.

The tests validate default behavior, manual enabling, and auto-enabling logic with custom cutoffs or modified multipliers.


134-203: LGTM! Essential tests for ASE bond detection.

The tests validate bond perception and duplicate prevention, which are critical for correct ASE-based bond detection, especially with PBC.


237-272: LGTM! Comprehensive integration and warning tests.

The integration test validates end-to-end ASE functionality with custom cutoffs, and the warning test ensures users are notified when ASE mode is auto-enabled.

Also applies to: 274-290

Comment thread reacnetgenerator/_detect.py
Comment thread reacnetgenerator/commandline.py Outdated
Comment thread tests/test_ase.py Outdated
Comment thread tests/test_detect.py Fixed
Comment thread tests/test_detect.py Fixed
Comment thread tests/test_detect.py Fixed
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
tests/test_detect.py (4)

67-73: Remove unused import or use underscore prefix.

The imports natural_cutoffs and neighbor_list are flagged as unused by static analysis. While they appear to be used in the implementation code being tested (reacnetgenerator/_detect.py), they are not directly used in this test file.

🔎 Proposed fix

If these imports are truly unused in this test file, remove them:

 try:
-    from ase.neighborlist import natural_cutoffs, neighbor_list
+    from ase import Atoms
 
     ASE_AVAILABLE = True
 except ImportError:
     ASE_AVAILABLE = False

Or if you're keeping them for future use, prefix with underscore to indicate they're intentionally unused:

-    from ase.neighborlist import natural_cutoffs, neighbor_list
+    from ase.neighborlist import natural_cutoffs as _natural_cutoffs, neighbor_list as _neighbor_list

76-77: Remove unused import or use underscore prefix.

The import connected_components is flagged as unused. It's defined but not directly used in this test file.

🔎 Proposed fix
 try:
-    from scipy.sparse.csgraph import connected_components
+    # connected_components is used in the implementation, not in tests
 
     SCIPY_AVAILABLE = True
 except ImportError:
     SCIPY_AVAILABLE = False

180-202: Prefix unused variable to suppress linter warning.

The bondlevel variable is unpacked but never used in this test. Consider prefixing it with an underscore to indicate it's intentionally unused.

🔎 Proposed fix
-        bond, bondlevel = detect_instance._getbondfromase(atoms, cell)
+        bond, _bondlevel = detect_instance._getbondfromase(atoms, cell)
 
         # Check that there are no duplicate entries in bond lists
         for i, neighbors in enumerate(bond):

236-262: Add assertion on component data to strengthen test.

The test creates component_bytes but doesn't verify its structure or contents. Consider adding assertions to validate the component data format.

🔎 Proposed enhancement
         # The component should contain all atoms
-        component_bytes = result[0]
-        # The first part of the component bytes contains the atom indices
-        # Need to extract the atom list from the bytes format
-        # This is tricky since it's in the internal format, so just check length
-        # The result format is: atom_indices + bond_pairs + bond_levels
         assert len(result) == 1  # Single connected component
+        
+        # Verify the component contains all atoms by checking it's non-empty
+        assert len(result[0]) > 0, "Component data should not be empty"
reacnetgenerator/_detect.py (1)

381-387: Chain exception for better error context.

When re-raising a ValueError after catching one, use raise ... from err to preserve the exception chain and provide better debugging context.

🔎 Proposed fix
         try:
             distance = float(dist_str)
-        except ValueError:
+        except ValueError as err:
             raise ValueError(
                 f"Invalid distance value '{dist_str}' in '{pair}'. Expected a number. "
                 f"Example: 'Al-O:2.5,C-H:1.1'"
-            )
+            ) from err
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b937710 and 884c714.

📒 Files selected for processing (3)
  • reacnetgenerator/_detect.py
  • tests/test_detect.py
  • tests/test_reacnetgen.py
🧰 Additional context used
🧬 Code graph analysis (1)
reacnetgenerator/_detect.py (1)
reacnetgenerator/utils.py (3)
  • WriteBuffer (44-119)
  • listtobytes (217-230)
  • append (76-85)
🪛 GitHub Actions: Type checker
reacnetgenerator/_detect.py

[error] 218-218: pyright: 'csr_matrix' is possibly unbound. (reportPossiblyUnboundVariable)

🪛 GitHub Check: CodeQL
tests/test_detect.py

[notice] 69-69: Unused import
Import of 'natural_cutoffs' is not used.
Import of 'neighbor_list' is not used.


[notice] 76-76: Unused import
Import of 'connected_components' is not used.


[notice] 257-257: Unused local variable
Variable component_bytes is not used.

🪛 GitHub Check: pyright
reacnetgenerator/_detect.py

[failure] 221-221:
"connected_components" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 218-218:
"csr_matrix" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 468-468:
Cannot access attribute "ase_cutoff_mult" for class "ReacNetGenerator"
  Attribute "ase_cutoff_mult" is unknown (reportAttributeAccessIssue)


[failure] 446-446:
"neighbor_list" is possibly unbound (reportPossiblyUnboundVariable)


[failure] 434-434:
Cannot access attribute "ase_cutoff_mult" for class "ReacNetGenerator"
  Attribute "ase_cutoff_mult" is unknown (reportAttributeAccessIssue)


[failure] 419-419:
Cannot access attribute "custom_cutoffs" for class "ReacNetGenerator"
  Attribute "custom_cutoffs" is unknown (reportAttributeAccessIssue)


[failure] 418-418:
Cannot access attribute "custom_cutoffs" for class "ReacNetGenerator"
  Attribute "custom_cutoffs" is unknown (reportAttributeAccessIssue)


[failure] 414-414:
Argument of type "float" cannot be assigned to parameter "mult" of type "int" in function "natural_cutoffs"
  "float" is not assignable to "int" (reportArgumentType)


[failure] 414-414:
"natural_cutoffs" is possibly unbound (reportPossiblyUnboundVariable)

🪛 Ruff (0.14.10)
tests/test_detect.py

214-214: Unpacked variable bondlevel is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


257-257: Local variable component_bytes is assigned to but never used

Remove assignment to unused variable component_bytes

(F841)

reacnetgenerator/_detect.py

362-365: Avoid specifying long messages outside the exception class

(TRY003)


372-375: Avoid specifying long messages outside the exception class

(TRY003)


384-387: Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling

(B904)


384-387: Avoid specifying long messages outside the exception class

(TRY003)


410-410: Avoid specifying long messages outside the exception class

(TRY003)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Build wheels for cp38-win_amd64
  • GitHub Check: Build wheels for cp310-manylinux_aarch64
  • GitHub Check: Test with tox
  • GitHub Check: Benchmark with codspeed
🔇 Additional comments (9)
tests/test_reacnetgen.py (1)

170-232: LGTM! Well-structured tests for ASE auto-enable logic.

The test class validates the expected auto-enable behavior when ASE-related parameters are provided despite use_ase=False. The three test cases cover the key scenarios:

  1. Custom cutoffs trigger auto-enable
  2. Modified multiplier triggers auto-enable
  3. Default values do not trigger auto-enable
tests/test_detect.py (2)

85-138: LGTM! Comprehensive validation of custom cutoff parsing.

The test class thoroughly validates the _parse_custom_cutoffs method with:

  • Valid simple and multiple pair formats
  • Whitespace handling
  • Error cases (missing colon, missing dash, invalid distance)
  • Helpful error messages

265-300: LGTM! Auto-enable tests provide good coverage.

These tests validate the auto-enable behavior for ASE mode, covering both positive cases (custom cutoffs and modified multiplier) and the negative case (defaults).

reacnetgenerator/_detect.py (6)

48-63: LGTM! Conditional imports properly structured.

The ASE and SciPy imports are correctly guarded with try-except blocks and availability flags. The static analysis warnings about "possibly unbound" are false positives—all imported symbols are used only within their respective availability checks.


203-267: LGTM! Well-implemented SciPy-based connected components with proper fallback.

The implementation elegantly uses SciPy's sparse graph algorithms when available and falls back to the existing DPS implementation otherwise. The code correctly:

  • Builds a CSR adjacency matrix from bond lists
  • Computes connected components
  • Groups atoms by component
  • Extracts bonds within each component (avoiding duplicates by checking atom_idx < neighbor_idx)
  • Serializes components in the expected format

The static analysis warning about csr_matrix being "possibly unbound" (line 218) is a false positive—it's imported in the try block and only used within the SCIPY_AVAILABLE guard.


338-390: LGTM! Robust parsing with clear error messages.

The _parse_custom_cutoffs method properly validates user input and provides helpful error messages for malformed strings. The implementation correctly:

  • Handles empty/None input
  • Strips whitespace to allow flexible formatting
  • Validates presence of colon and dash separators
  • Validates numeric distance values
  • Returns a frozenset-keyed dictionary for order-independent pair lookups

This addresses the past review comment requesting error handling for malformed inputs.


392-482: LGTM! Comprehensive ASE-based bond detection with custom cutoffs.

The _getbondfromase method implements a robust bond detection algorithm:

  • Computes natural covalent radii as a baseline
  • Parses and applies custom per-pair cutoffs
  • Calculates an appropriate global search cutoff (max of base + custom with buffer)
  • Uses ASE neighbor lists with PBC support
  • Applies pair-specific thresholds (custom if available, else scaled radii)
  • Deduplicates bonds (line 475 check prevents duplicate bonds from PBC images)

The implementation correctly handles edge cases like empty atom lists and integrates well with the existing codebase.


503-505: LGTM! Clean delegation to ASE-based detection.

The conditional check properly routes to ASE-based bond detection when enabled, preserving the original Open Babel path otherwise.


574-574: LGTM! Helpful logging for LAMMPS dump parsing.

The logging statements improve observability during file parsing, making it easier to diagnose issues with trajectory files.

Also applies to: 603-603, 610-610

Comment thread tests/test_detect.py Fixed
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
tests/test_detect.py (1)

249-254: Remove unused variable assignment.

The variable component_bytes is assigned but never used. The subsequent assertion only checks len(result), not the variable itself.

🔎 Proposed fix
-        # The component should contain all atoms
-        component_bytes = result[0]
-        # The first part of the component bytes contains the atom indices
-        # Need to extract the atom list from the bytes format
-        # This is tricky since it's in the internal format, so just check length
-        # The result format is: atom_indices + bond_pairs + bond_levels
         assert len(result) == 1  # Single connected component
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 884c714 and 23edf0e.

📒 Files selected for processing (1)
  • tests/test_detect.py
🧰 Additional context used
🪛 GitHub Check: CodeQL
tests/test_detect.py

[warning] 76-76: Unreachable code
This statement is unreachable.


[notice] 257-257: Unused local variable
Variable component_bytes is not used.

🪛 Ruff (0.14.10)
tests/test_detect.py

249-249: Local variable component_bytes is assigned to but never used

Remove assignment to unused variable component_bytes

(F841)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Build wheels for cp38-win_amd64
  • GitHub Check: Build wheels for cp310-manylinux_aarch64
  • GitHub Check: Benchmark with codspeed
  • GitHub Check: Test with tox
🔇 Additional comments (4)
tests/test_detect.py (4)

25-28: LGTM! Typo fix.

The fixture variable rename from start_direcroty to start_directory corrects the typo.


82-135: LGTM! Comprehensive test coverage.

The test cases thoroughly cover valid input formats, edge cases with whitespace, and error scenarios with descriptive assertion messages.


137-211: LGTM! Well-structured ASE bond detection tests.

The test cases effectively validate bond detection logic for water molecules, duplicate prevention with periodic boundary conditions, and custom cutoff override behavior.


257-292: LGTM! Auto-enable logic tests are well-designed.

The tests effectively verify that ASE mode is automatically enabled when relevant parameters (custom cutoffs or modified multiplier) are provided, even when use_ase is explicitly set to False.

Comment thread tests/test_detect.py
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
tests/test_detect.py (1)

249-257: Remove unused variable and duplicate assertion.

The variable component_bytes is assigned but never used, and the assertion at line 257 duplicates line 249. Either complete the verification logic or clean up the dead code.

🔎 Proposed fix
         # Should have 1 component containing all atoms
         assert len(result) == 1
-
-        # The component should contain all atoms
-        component_bytes = result[0]
-        # The first part of the component bytes contains the atom indices
-        # Need to extract the atom list from the bytes format
-        # This is tricky since it's in the internal format, so just check length
-        # The result format is: atom_indices + bond_pairs + bond_levels
-        assert len(result) == 1  # Single connected component
🧹 Nitpick comments (1)
tests/test_detect.py (1)

74-80: Remove the debug print statement.

The print(scipy.__version__) statement pollutes test output and serves no functional purpose. The SciPy availability check works correctly without it.

🔎 Proposed fix
 try:
     import scipy
 
-    print(scipy.__version__)
     SCIPY_AVAILABLE = True
 except ImportError:
     SCIPY_AVAILABLE = False
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23edf0e and ff0e869.

📒 Files selected for processing (1)
  • tests/test_detect.py
🧰 Additional context used
🪛 GitHub Check: CodeQL
tests/test_detect.py

[notice] 257-257: Unused local variable
Variable component_bytes is not used.

🪛 Ruff (0.14.10)
tests/test_detect.py

252-252: Local variable component_bytes is assigned to but never used

Remove assignment to unused variable component_bytes

(F841)

🔇 Additional comments (4)
tests/test_detect.py (4)

25-28: LGTM!

The typo fix from start_direcroty to start_directory improves code clarity and consistency.


85-138: LGTM!

Comprehensive test coverage for the _parse_custom_cutoffs method with clear scenarios covering valid formats, edge cases with spaces, and various error conditions with helpful message assertions.


140-214: LGTM!

Well-structured tests for ASE-based bond detection covering water molecule bonds, PBC duplicate prevention, and custom cutoff overrides. The skipif decorator properly guards against missing ASE.


260-295: LGTM!

Good test coverage for the auto-enable logic, verifying that ASE mode is automatically enabled when custom_cutoffs or ase_cutoff_mult parameters are provided, even if use_ase=False is explicitly set.

Copy link
Copy Markdown
Member

@njzjz njzjz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix the CIs

dependabot Bot and others added 9 commits March 14, 2026 13:57
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4
to 6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<p><strong>Breaking Changes</strong></p>
<ul>
<li>Limit automatic caching to npm, update workflows and documentation
by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1374">actions/setup-node#1374</a></li>
</ul>
<p><strong>Dependency Upgrades</strong></p>
<ul>
<li>Upgrade ts-jest from 29.1.2 to 29.4.1 and document breaking changes
in v5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1336">#1336</a></li>
<li>Upgrade prettier from 2.8.8 to 3.6.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1334">#1334</a></li>
<li>Upgrade actions/publish-action from 0.3.0 to 0.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1362">#1362</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v5...v6.0.0">https://github.com/actions/setup-node/compare/v5...v6.0.0</a></p>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<h3>Breaking Changes</h3>
<ul>
<li>Enhance caching in setup-node with automatic package manager
detection by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1348">actions/setup-node#1348</a></li>
</ul>
<p>This update, introduces automatic caching when a valid
<code>packageManager</code> field is present in your
<code>package.json</code>. This aims to improve workflow performance and
make dependency management more seamless.
To disable this automatic caching, set <code>package-manager-cache:
false</code></p>
<pre lang="yaml"><code>steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
  with:
    package-manager-cache: false
</code></pre>
<ul>
<li>Upgrade action to use node24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1325">actions/setup-node#1325</a></li>
</ul>
<p>Make sure your runner is on version v2.327.1 or later to ensure
compatibility with this release. <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">See
Release Notes</a></p>
<h3>Dependency Upgrades</h3>
<ul>
<li>Upgrade <code>@​octokit/request-error</code> and
<code>@​actions/github</code> by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1227">actions/setup-node#1227</a></li>
<li>Upgrade uuid from 9.0.1 to 11.1.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1273">actions/setup-node#1273</a></li>
<li>Upgrade undici from 5.28.5 to 5.29.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1295">actions/setup-node#1295</a></li>
<li>Upgrade form-data to bring in fix for critical vulnerability by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1332">actions/setup-node#1332</a></li>
<li>Upgrade actions/checkout from 4 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1345">actions/setup-node#1345</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1348">actions/setup-node#1348</a></li>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1325">actions/setup-node#1325</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v4...v5.0.0">https://github.com/actions/setup-node/compare/v4...v5.0.0</a></p>
<h2>v4.4.0</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-node/commit/2028fbc5c25fe9cf00d9f06a71cc4710d4507903"><code>2028fbc</code></a>
Limit automatic caching to npm, update workflows and documentation (<a
href="https://redirect.github.com/actions/setup-node/issues/1374">#1374</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/13427813f706a0f6c9b74603b31103c40ab1c35a"><code>1342781</code></a>
Bump actions/publish-action from 0.3.0 to 0.4.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1362">#1362</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/89d709d423dc495668cd762a18dd4a070611be3f"><code>89d709d</code></a>
Bump prettier from 2.8.8 to 3.6.2 (<a
href="https://redirect.github.com/actions/setup-node/issues/1334">#1334</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/cd2651c46231bc0d6f48d6b34433b845331235fe"><code>cd2651c</code></a>
Bump ts-jest from 29.1.2 to 29.4.1 (<a
href="https://redirect.github.com/actions/setup-node/issues/1336">#1336</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/a0853c24544627f65ddf259abe73b1d18a591444"><code>a0853c2</code></a>
Bump actions/checkout from 4 to 5 (<a
href="https://redirect.github.com/actions/setup-node/issues/1345">#1345</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/b7234cc9fe124f0f4932554b4e5284543083ae7b"><code>b7234cc</code></a>
Upgrade action to use node24 (<a
href="https://redirect.github.com/actions/setup-node/issues/1325">#1325</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/d7a11313b581b306c961b506cfc8971208bb03f6"><code>d7a1131</code></a>
Enhance caching in setup-node with automatic package manager detection
(<a
href="https://redirect.github.com/actions/setup-node/issues/1348">#1348</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/5e2628c959b9ade56971c0afcebbe5332d44b398"><code>5e2628c</code></a>
Bumps form-data (<a
href="https://redirect.github.com/actions/setup-node/issues/1332">#1332</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/65beceff8e91358525397bdce9103d999507ab03"><code>65becef</code></a>
Bump undici from 5.28.5 to 5.29.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1295">#1295</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/7e24a656e1c7a0d6f3eaef8d8e84ae379a5b035b"><code>7e24a65</code></a>
Bump uuid from 9.0.1 to 11.1.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1273">#1273</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-node/compare/v4...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=4&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Added a new "Install via uv" section to the installation guide,
including a help example.
* Included help (-h) examples shown after conda and pip install
commands.
* Minor formatting adjustments in the Docker installation area for
clarity.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Jinzhe Zeng <jinzhe.zeng@ustc.edu.cn>
Signed-off-by: Jinzhe Zeng <njzjz@qq.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Jinzhe Zeng <jinzhe.zeng@ustc.edu.cn>
Signed-off-by: Jinzhe Zeng <njzjz@qq.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* CI workflow and installer updated to a slimmer runner and modernized
steps; type-checking runs changed to a new check invocation.
  * Project tooling configuration added/updated.

* **Refactor**
* Tightened type annotations and generics across utilities; download
accepts optional checksum and a zero-check helper now returns a native
bool.
* Public API surface preserved; type-only imports added to improve
static typing.

* **Style**
* Minor cleanup of suppressed-type comments and small sorting-key
clarifications.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to
6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>v6-beta by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2298">actions/checkout#2298</a></li>
<li>update readme/changelog for v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2311">actions/checkout#2311</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5.0.0...v6.0.0">https://github.com/actions/checkout/compare/v5.0.0...v6.0.0</a></p>
<h2>v6-beta</h2>
<h2>What's Changed</h2>
<p>Updated persist-credentials to store the credentials under
<code>$RUNNER_TEMP</code> instead of directly in the local git
config.</p>
<p>This requires a minimum Actions Runner version of <a
href="https://github.com/actions/runner/releases/tag/v2.329.0">v2.329.0</a>
to access the persisted credentials for <a
href="https://docs.github.com/en/actions/tutorials/use-containerized-services/create-a-docker-container-action">Docker
container action</a> scenarios.</p>
<h2>v5.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5...v5.0.1">https://github.com/actions/checkout/compare/v5...v5.0.1</a></p>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
<li>Prepare v5.0.0 release by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2238">actions/checkout#2238</a></li>
</ul>
<h2>⚠️ Minimum Compatible Runner Version</h2>
<p><strong>v2.327.1</strong><br />
<a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Release
Notes</a></p>
<p>Make sure your runner is updated to this version or newer to use this
release.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v4...v5.0.0">https://github.com/actions/checkout/compare/v4...v5.0.0</a></p>
<h2>v4.3.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v4...v4.3.1">https://github.com/actions/checkout/compare/v4...v4.3.1</a></p>
<h2>v4.3.0</h2>
<h2>What's Changed</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a
href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
<a
href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
<li>Pin actions/checkout's own workflows to a known, good, stable
version. by <a href="https://github.com/jww3"><code>@​jww3</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li>
</ul>
<h2>v4.1.6</h2>
<ul>
<li>Check platform to set archive extension appropriately by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/8e8c483db84b4bee98b60c0593521ed34d9990e8"><code>8e8c483</code></a>
Clarify v6 README (<a
href="https://redirect.github.com/actions/checkout/issues/2328">#2328</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/033fa0dc0b82693d8986f1016a0ec2c5e7d9cbb1"><code>033fa0d</code></a>
Add worktree support for persist-credentials includeIf (<a
href="https://redirect.github.com/actions/checkout/issues/2327">#2327</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5"><code>c2d88d3</code></a>
Update all references from v5 and v4 to v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2314">#2314</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3"><code>1af3b93</code></a>
update readme/changelog for v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2311">#2311</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/71cf2267d89c5cb81562390fa70a37fa40b1305e"><code>71cf226</code></a>
v6-beta (<a
href="https://redirect.github.com/actions/checkout/issues/2298">#2298</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/069c6959146423d11cd0184e6accf28f9d45f06e"><code>069c695</code></a>
Persist creds to a separate file (<a
href="https://redirect.github.com/actions/checkout/issues/2286">#2286</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493"><code>ff7abcd</code></a>
Update README to include Node.js 24 support details and requirements (<a
href="https://redirect.github.com/actions/checkout/issues/2248">#2248</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/08c6903cd8c0fde910a37f88322edcfb5dd907a8"><code>08c6903</code></a>
Prepare v5.0.0 release (<a
href="https://redirect.github.com/actions/checkout/issues/2238">#2238</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/9f265659d3bb64ab1440b03b12f4d47a24320917"><code>9f26565</code></a>
Update actions checkout to use node 24 (<a
href="https://redirect.github.com/actions/checkout/issues/2226">#2226</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/v4...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=4&new-version=6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from
2.23 to 3.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/cibuildwheel/releases">pypa/cibuildwheel's
releases</a>.</em></p>
<blockquote>
<h2>v3.3.0</h2>
<ul>
<li>🐛 Fix an incompatibility with Docker v29 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2660">#2660</a>)</li>
<li>✨ Adds <code>test-runtime</code> option, to customise how tests on
simulated/emulated environments are run (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2636">#2636</a>)</li>
<li>✨ Adds support for new <code>manylinux_2_35</code> images on 32-bit
ARM <code>armv7l</code>, offering better C++20 compatibility (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2656">#2656</a>)</li>
<li>✨ <code>build[uv]</code> is now supported on Android (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2587">#2587</a>)</li>
<li>✨ You can now install extras (such as <code>uv</code>) with a simple
option on the GitHub Action (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2630">#2630</a>)</li>
<li>✨ <code>{project}</code> and <code>{package}</code> placeholders are
now supported in <code>repair-wheel-command</code> (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2589">#2589</a>)</li>
<li>🛠 The versions set with <code>dependency-versions</code> no longer
constrain packages specified by your <code>build-system.requires</code>.
Previously, on platforms other than Linux, the constraints in this
option would remain in the environment during the build. This has been
tidied up make behaviour more consistent between platforms, and to
prevent version conflicts. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2583">#2583</a>)</li>
<li>🛠 Improve the handling of <code>test-command</code> on Android,
enabling more options to be passed (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2590">#2590</a>)</li>
<li>📚 Docs improvements (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2618">#2618</a>)</li>
</ul>
<h2>v3.2.1</h2>
<ul>
<li>🛠 Update to CPython 3.14.0 final (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2614">#2614</a>)</li>
<li>🐛 Fix the default MACOSX_DEPLOYMENT_TARGET on Python 3.14 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2613">#2613</a>)</li>
<li>📚 Docs improvements (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2617">#2617</a>)</li>
</ul>
<h2>v3.2.0</h2>
<ul>
<li>✨ Adds GraalPy v25 (Python 3.12) support (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2597">#2597</a>)</li>
<li>🛠 Update to CPython 3.14.0rc3 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2602">#2602</a>)</li>
<li>🛠 Adds CPython 3.14.0 prerelease support for Android, and a number
of improvements to Android builds (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2568">#2568</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2591">#2591</a>)</li>
<li>🛠 Improvements to testing on Android, passing environment markers
when installing the venv, and providing more debug output when
build-verbosity is set (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2575">#2575</a>)</li>
<li>⚠️ PyPy 3.10 was moved to <code>pypy-eol</code> in the
<code>enable</code> option, as it is now end-of-life. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2521">#2521</a>)</li>
<li>📚 Docs improvements (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2574">#2574</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2601">#2601</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2598">#2598</a>)</li>
</ul>
<h2>v3.1.4</h2>
<ul>
<li>✨ Add a <code>--clean-cache</code> command to clean up our cache (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2489">#2489</a>)</li>
<li>🛠 Update Python to 3.14rc2 and other patch version bumps (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2542">#2542</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2556">#2556</a>)</li>
<li>🛠 Update Pyodide to 0.28.2 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2562">#2562</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2558">#2558</a>)</li>
<li>🐛 Fix resolution with <code>pyodide-build</code> when
<code>dependency-versions</code> is set (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2548">#2548</a>)</li>
<li>🐛 Set <code>CMAKE_FIND_ROOT_PATH_MODE_PACKAGE</code> to
<code>BOTH</code> on Android (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2547">#2547</a>)</li>
<li>🐛 Add <code>patchelf</code> dependency for platforms that can build
Android wheels (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2552">#2552</a>)</li>
<li>🐛 Ignore empty values for <code>CIBW_ARCHS</code> like most other
environment variables (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2541">#2541</a>)</li>
<li>💼 The <code>color</code> and <code>suggest_on_error</code> argparse
options are now default in 3.14rc1+ (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2554">#2554</a>)</li>
<li>💼 Use the virtualenv release URL instead of blob URL (should be more
robust) (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2555">#2555</a>)</li>
<li>🧪 For iOS, lowering to macos-14 is needed for now due to issues with
GitHub's runner images (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2557">#2557</a>)</li>
<li>🧪 Split out platforms iOS and Android in our tests (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2519">#2519</a>)</li>
<li>🧪 Fix and enable doctests (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2546">#2546</a>)</li>
<li>📚 Improve our docs on free-threading (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2549">#2549</a>)</li>
</ul>
<h2>v3.1.3</h2>
<ul>
<li>🐛 Fix bug where &quot;latest&quot; dependencies couldn't update to
pip 25.2 on Windows (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2537">#2537</a>)</li>
<li>🧪 Use pytest-rerunfailures to improve some of our iOS/Android tests
(<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2527">#2527</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2539">#2539</a>)</li>
<li>🧪 Remove some GraalPy Windows workarounds in our tests (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2501">#2501</a>)</li>
</ul>
<h2>v3.1.2</h2>
<ul>
<li>⚠️ Add an error if <code>CIBW_FREE_THREADING_SUPPORT</code> is set;
you are likely missing 3.13t wheels, please use the
<code>enable</code>/<code>CIBW_ENABLE</code> (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2520">#2520</a>)</li>
<li>🛠 <code>riscv64</code> now enabled if you target that architecture,
it's now supported on PyPI (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2509">#2509</a>)</li>
<li>🛠 Add warning when using <code>cpython-experimental-riscv64</code>
(no longer needed) (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2526">#2526</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2528">#2528</a>)</li>
<li>🛠 iOS versions bumped, fixing issues with 3.14 (now RC 1) (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2530">#2530</a>)</li>
<li>🐛 Fix bug in Android running wheel from our GitHub Action (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2517">#2517</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md">pypa/cibuildwheel's
changelog</a>.</em></p>
<blockquote>
<h3>v2.23.3</h3>
<p><em>26 April 2025</em></p>
<ul>
<li>🛠 Dependency updates, including Python 3.13.3 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2371">#2371</a>)</li>
</ul>
<h3>v2.23.2</h3>
<p><em>24 March 2025</em></p>
<ul>
<li>🐛 Workaround an issue with pyodide builds when running cibuildwheel
with a Python that was installed via UV (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2328">#2328</a>
via <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2331">#2331</a>)</li>
<li>🛠 Dependency updates, including a manylinux update that fixes an <a
href="https://redirect.github.com/pypa/manylinux/issues/1760">'undefined
symbol' error</a> in gcc-toolset (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2334">#2334</a>)</li>
</ul>
<h3>v2.23.1</h3>
<p><em>15 March 2025</em></p>
<ul>
<li>⚠️ Added warnings when the shorthand values <code>manylinux1</code>,
<code>manylinux2010</code>, <code>manylinux_2_24</code>, and
<code>musllinux_1_1</code> are used to specify the images in linux
builds. The shorthand to these (unmaintainted) images will be removed in
v3.0. If you want to keep using these images, explicitly opt-in using
the full image URL, which can be found in <a
href="https://github.com/pypa/cibuildwheel/blob/v2.23.1/cibuildwheel/resources/pinned_docker_images.cfg">this
file</a>. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2312">#2312</a>)</li>
<li>🛠 Dependency updates, including a manylinux update which fixes an <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2303">issue
with rustup</a>. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2315">#2315</a>)</li>
</ul>
<h3>v2.23.0</h3>
<p><em>1 March 2025</em></p>
<ul>
<li>✨ Adds official support for the new GitHub Actions Arm runners. In
fact these worked out-of-the-box, now we include them in our tests and
example configs. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2135">#2135</a>
via <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2281">#2281</a>)</li>
<li>✨ Adds support for building PyPy 3.11 wheels (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2268">#2268</a>
via <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2281">#2281</a>)</li>
<li>🛠 Adopts the beta pypa/manylinux image for armv7l builds (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2269">#2269</a>
via <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2281">#2281</a>)</li>
<li>🛠 Dependency updates, including Pyodide 0.27 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2117">#2117</a>
and <a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2281">#2281</a>)</li>
</ul>
<h3>v2.22.0</h3>
<p><em>23 November 2024</em></p>
<ul>
<li>🌟 Added a new <code>CIBW_ENABLE</code>/<code>enable</code> feature
that replaces
<code>CIBW_FREETHREADED_SUPPORT</code>/<code>free-threaded-support</code>
and <code>CIBW_PRERELEASE_PYTHONS</code> with a system that supports
both. In cibuildwheel 3, this will also include a PyPy setting and the
deprecated options will be removed. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2048">#2048</a>)</li>
<li>🌟 <a href="https://peps.python.org/pep-0735/">Dependency groups</a>
are now supported for tests. Use
<code>CIBW_TEST_GROUPS</code>/<code>test-groups</code> to specify groups
in <code>[dependency-groups]</code> for testing. (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2063">#2063</a>)</li>
<li>🌟 Support for the experimental Ubuntu-based ARMv7l manylinux image
(<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2052">#2052</a>)</li>
<li>✨ Show a warning when cibuildwheel is run from Python 3.10 or older;
cibuildwheel 3.0 will require Python 3.11 or newer as host (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2050">#2050</a>)</li>
<li>🐛 Fix issue with stderr interfering with checking the docker version
(<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2074">#2074</a>)</li>
<li>🛠 Python 3.9 is now used in
<code>CIBW_BEFORE_ALL</code>/<code>before-all</code> on linux, replacing
3.8, which is now EoL (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2043">#2043</a>)</li>
<li>🛠 Error messages for producing a pure-Python wheel are slightly more
informative (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2044">#2044</a>)</li>
<li>🛠 Better error when <code>uname -m</code> fails on ARM (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2049">#2049</a>)</li>
<li>🛠 Better error when repair fails and docs for abi3audit on Windows
(<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2058">#2058</a>)</li>
<li>🛠 Better error when <code>manylinux-interpreters ensure</code> fails
(<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2066">#2066</a>)</li>
<li>🛠 Update Pyodide to 0.26.4, and adapt to the unbundled pyodide-build
(now 0.29) (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2090">#2090</a>)</li>
<li>🛠 Now cibuildwheel uses dependency-groups for development
dependencies (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2064">#2064</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2085">#2085</a>)</li>
<li>📚 Docs updates and tidy ups (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2061">#2061</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2067">#2067</a>,
<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2072">#2072</a>)</li>
</ul>
<h3>v2.21.3</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/298ed2fb2c105540f5ed055e8a6ad78d82dd3a7e"><code>298ed2f</code></a>
Bump version: v3.3.1</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/f0ff94431807b2d31ad3170007669061f91f0241"><code>f0ff944</code></a>
[3.3.x] Update dependencies (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2708">#2708</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/63fd63b352a9a8bdcc24791c9dbee952ee9a8abc"><code>63fd63b</code></a>
Bump version: v3.3.0</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/f4fe311fc96f735aa0d7beb74d6ae61801cf5382"><code>f4fe311</code></a>
fix: support Docker 29 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2660">#2660</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/f6c810852d424abdddc6abc44d1e4b165797399d"><code>f6c8108</code></a>
feat: make the <code>{project}</code> placeholder available to
<code>repair-wheel-command</code> (#...</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/ccbae30b538eeacb2269052ca6603ba28485206b"><code>ccbae30</code></a>
feat: support uv with Android (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2587">#2587</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/1337e50f74cda9ab8a65568b3052d7e4b82da54c"><code>1337e50</code></a>
chore: pytest log_level is better than log_cli_level (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2657">#2657</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/720f8e266f6c4b5d3064fc8c366397266eaedfe5"><code>720f8e2</code></a>
feat: add manylinux_2_35 (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2656">#2656</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/4c7f3696b166b9a2cefcd9c33a7ace9648a823b9"><code>4c7f369</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2658">#2658</a>)</li>
<li><a
href="https://github.com/pypa/cibuildwheel/commit/e1baa60eb0f6e7e57cbb5087940acefcaa86fb97"><code>e1baa60</code></a>
chore: enable more Ruff checks (<a
href="https://redirect.github.com/pypa/cibuildwheel/issues/2654">#2654</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/cibuildwheel/compare/v2.23...v3.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pypa/cibuildwheel&package-manager=github_actions&previous-version=2.23&new-version=3.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Jinzhe Zeng <jinzhe.zeng@ustc.edu.cn>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jinzhe Zeng <jinzhe.zeng@ustc.edu.cn>
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 6
to 7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/setup-uv/releases">astral-sh/setup-uv's
releases</a>.</em></p>
<blockquote>
<h2>v7.2.1 🌈 update known checksums up to 0.9.28</h2>
<h2>Changes</h2>
<h2>🧰 Maintenance</h2>
<ul>
<li>chore: update known checksums for 0.9.28 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/744">#744</a>)</li>
<li>chore: update known checksums for 0.9.27 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/742">#742</a>)</li>
<li>chore: update known checksums for 0.9.26 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/734">#734</a>)</li>
<li>chore: update known checksums for 0.9.25 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/733">#733</a>)</li>
<li>chore: update known checksums for 0.9.24 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/730">#730</a>)</li>
</ul>
<h2>📚 Documentation</h2>
<ul>
<li>Clarify impact of using actions/setup-python <a
href="https://github.com/eifinger"><code>@​eifinger</code></a> (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/732">#732</a>)</li>
</ul>
<h2>⬆️ Dependency updates</h2>
<ul>
<li>Bump zizmorcore/zizmor-action from 0.3.0 to 0.4.1 @<a
href="https://github.com/apps/dependabot">dependabot[bot]</a> (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/741">#741</a>)</li>
</ul>
<h2>v7.0.0 🌈 node24 and a lot of bugfixes</h2>
<h2>Changes</h2>
<p>This release comes with a load of bug fixes and a speed up. Because
of switching from node20 to node24 it is also a breaking change. If you
are running on GitHub hosted runners this will just work, if you are
using self-hosted runners make sure, that your runners are up to date.
If you followed the normal installation instructions your self-hosted
runner will keep itself updated.</p>
<p>This release also removes the deprecated input
<code>server-url</code> which was used to download uv releases from a
different server.
The <a
href="https://github.com/astral-sh/setup-uv?tab=readme-ov-file#manifest-file">manifest-file</a>
input supersedes that functionality by adding a flexible way to define
available versions and where they should be downloaded from.</p>
<h3>Fixes</h3>
<ul>
<li>The action now respects when the environment variable
<code>UV_CACHE_DIR</code> is already set and does not overwrite it. It
now also finds <a
href="https://docs.astral.sh/uv/reference/settings/#cache-dir">cache-dir</a>
settings in config files if you set them.</li>
<li>Some users encountered problems that <a
href="https://github.com/astral-sh/setup-uv?tab=readme-ov-file#disable-cache-pruning">cache
pruning</a> took forever because they had some <code>uv</code> processes
running in the background. Starting with uv version <code>0.8.24</code>
this action uses <code>uv cache prune --ci --force</code> to ignore the
running processes</li>
<li>If you just want to install uv but not have it available in path,
this action now respects <code>UV_NO_MODIFY_PATH</code></li>
<li>Some other actions also set the env var <code>UV_CACHE_DIR</code>.
This action can now deal with that but as this could lead to unwanted
behavior in some edgecases a warning is now displayed.</li>
</ul>
<h3>Improvements</h3>
<p>If you are using minimum version specifiers for the version of uv to
install for example</p>
<pre lang="toml"><code>[tool.uv]
required-version = &quot;&gt;=0.8.17&quot;
</code></pre>
<p>This action now detects that and directly uses the latest version.
Previously it would download all available releases from the uv repo
to determine the highest matching candidate for the version specifier,
which took much more time.</p>
<p>If you are using other specifiers like <code>0.8.x</code> this action
still needs to download all available releases because the specifier
defines an upper bound (not 0.9.0 or later) and &quot;latest&quot; would
possibly not satisfy that.</p>
<h2>🚨 Breaking changes</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/eac588ad8def6316056a12d4907a9d4d84ff7a3b"><code>eac588a</code></a>
Bump typesafegithub/github-actions-typing from 2.2.1 to 2.2.2 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/753">#753</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/a97c6cbe9c11a3fc620e0f506b2967ef4fe74ebb"><code>a97c6cb</code></a>
Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/751">#751</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/02182fa02a198f2423c87ba9a41982b2efbaa3ef"><code>02182fa</code></a>
fix: warn instead of error when no python to cache (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/762">#762</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/a3b3eaea92d7cf978795e7ae0a996f861347b70b"><code>a3b3eae</code></a>
chore: update known checksums for 0.10.0 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/759">#759</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/78cebeceac116b9740b3fb83de1d99c68aa4ced9"><code>78cebec</code></a>
fix: use --clear to create venv (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/761">#761</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/b6b8e2cd6a1bad11205c4c74af16307cdbecd194"><code>b6b8e2c</code></a>
refactor: tilde-expansion tests as unittests and no self-hosted tests
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/760">#760</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/e31bec8546a22248f075a182e7e60c534bffa057"><code>e31bec8</code></a>
chore: update known checksums for 0.9.30 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/756">#756</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/db2b65ebaeba7fdae1dfc2a646812fa8ebccefe2"><code>db2b65e</code></a>
Bump actions/checkout from 6.0.1 to 6.0.2 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/740">#740</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/3511ff7054b4bdbf897f4410d573261859a8eeb2"><code>3511ff7</code></a>
feat: add venv-path input for activate-environment (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/746">#746</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/99b0f0474b8c709992d2d82e9cfa8745d4715d14"><code>99b0f04</code></a>
Fix punctuation (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/747">#747</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/setup-uv/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astral-sh/setup-uv&package-manager=github_actions&previous-version=6&new-version=7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Follow up deepmodeling/deepmd-kit@69eb0c3, use mdformat to format
Markdown.

- Add mdformat hook
- Remove markdown from prettier types_or

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
@SchrodingersCattt SchrodingersCattt force-pushed the feat/support-ase-detect branch from dd21b23 to e9d298c Compare March 14, 2026 16:21
Removed redundant guards: Deleted the try/except ASE_AVAILABLE and try/except SCIPY_AVAILABLE blocks. ase is a required dependency; from ase.neighborlist import natural_cutoffs, neighbor_list is now a plain top-level import.

Simplified _connectmolecule: Removed ~60 lines of scipy-based connected-components logic. The method now always uses the original dps algorithm.

Added _DetectCrd.__init__: Properly copies use_ase, ase_cutoff_mult, custom_cutoffs from rng via SharedRNGData, consistent with the pattern used for all other parameters. Also pre-parses custom_cutoffs once into self._parsed_custom_cutoffs instead of re-parsing on every timestep.

Simplified _getbondfromase: Replaced the manual two-pass global-cutoff approach with ASE's native dict-based per-pair cutoff support. Builds a complete {('El1', 'El2'): distance} dict covering all element pairs (natural cutoffs as default, custom values as overrides), then passes it directly to neighbor_list. ASE handles tilt box (arbitrary 3×3 cell) natively.

Removed noisy debug logger.info calls added by the PR in _DetectLAMMPSdump._readNfunc.

Fixed _getbondfromcrd: Changed getattr(self.rng, "use_ase", False) to self.use_ase (now properly set via SharedRNGData).
@SchrodingersCattt SchrodingersCattt force-pushed the feat/support-ase-detect branch from 3fc096c to 7d250d1 Compare March 15, 2026 01:13
@njzjz njzjz added this pull request to the merge queue Mar 15, 2026
Merged via the queue into deepmodeling:master with commit 1eda938 Mar 15, 2026
21 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants