Commit 14be08f
Migrate Johnson's algorithm to rustworkx-core (#1318)
* Migrate Johnson's algorithm to rustworkx-core
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.
* Simplify python side logic
* Set name of pyclass to SimpleCycleIter for backwards compat
* Fix rustdoc warnings
---------
Co-authored-by: Ivan Carvalho <[email protected]>
Co-authored-by: Ivan Carvalho <[email protected]>1 parent 6bc3933 commit 14be08f
File tree
6 files changed
+646
-274
lines changed- releasenotes/notes
- rustworkx-core/src
- connectivity
- graph_ext
- src/connectivity
6 files changed
+646
-274
lines changedLines changed: 12 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
0 commit comments