Robust sort_backbone: detect disconnected selections and avoid infinite loops #5113
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #5112
Problem:
sort_backbone
can hang indefinitely when the inputAtomGroup
is disconnected (e.g., some backbone atoms were excluded by selection). Currently, the function only checksn_fragments
, which is insufficient to catch all cases of disconnected backbones.Cause:
n_fragments
alone does not reliably detect disconnected selections.while
loop insort_backbone
iterates until the backbone is fully traversed, but if the selection is disconnected, the loop can never complete.Solution / Changes made:
Added robust validation before the traversal, checking:
Replaced the “dangerous” unbounded
while
loop with a bounded iteration over the backbone length.Tested with backbone selections missing internal atoms, that now raises a descriptive ValueError instead of hanging.
PR Checklist
package/CHANGELOG
file updated?package/AUTHORS
? (If it is not, add it!)Developers Certificate of Origin
I certify that I can submit this code contribution as described in the Developer Certificate of Origin, under the MDAnalysis LICENSE.
📚 Documentation preview 📚: https://mdanalysis--5113.org.readthedocs.build/en/5113/