-
Notifications
You must be signed in to change notification settings - Fork 162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate Johnson's algorithm to rustworkx-core #1318
Conversation
This commit adds Johnson's algorithm for computing simple cycles to rustworkx-core. This implementation returns an iterator-like struct which requires a reference to the graph for each step of the iterator. This mirrors the structure of the Bfs and similar structs in petgraph. While an implementor of Iterator could be used for this, this complicates using it from Python because we can't have a shared reference in a pyclass struct. This also has the advantage of enabling mutable references while iterating over the cycles. To facilitate this 2 traits are added `EdgeFindable` and `EdgeRemovable` which add traits for `remove_edge()` and `find_edge()` to petgraph graph types. The `EdgeRemovable` trait isn't actually used currently, it was in an earlier local draft of the PR which attempted to remove self cycles from a clone before changing direction of the interface. Since the implementation was done and relatively simple, and the potential general usefulness this was left in. `EdgeFindable` is actively used by this new function however.
Pull Request Test Coverage Report for Build 12365623964Details
💛 - Coveralls |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM but I left a comment about possibly keeping the old name of the struct given the return type is public. Of course most users just iterate over it but it would be nice not to change anything
I will try to clone the branch and fix. I think the new rustdoc lint added recently complains about the docstring |
This commit adds Johnson's algorithm for computing simple cycles to rustworkx-core. This implementation returns an iterator-like struct which requires a reference to the graph for each step of the iterator. This mirrors the structure of the Bfs and similar structs in petgraph. While an implementor of Iterator could be used for this, this complicates using it from Python because we can't have a shared reference in a pyclass struct. This also has the advantage of enabling mutable references while iterating over the cycles.
To facilitate this 2 traits are added
EdgeFindable
andEdgeRemovable
which add traits forremove_edge()
andfind_edge()
to petgraph graph types. TheEdgeRemovable
trait isn't actually used currently, it was in an earlier local draft of the PR which attempted to remove self cycles from a clone before changing direction of the interface. Since the implementation was done and relatively simple, and the potential general usefulness this was left in.EdgeFindable
is actively used by this new function however.