-
-
Notifications
You must be signed in to change notification settings - Fork 613
add weighted cycle enumeration in digraph #40114
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
base: develop
Are you sure you want to change the base?
Conversation
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.
otherwise, LGTM.
src/sage/graphs/digraph.py
Outdated
@@ -3010,6 +3126,22 @@ def all_cycles_iterator(self, starting_vertices=None, simple=False, | |||
h = copy(self) | |||
h.delete_edges((u, v) for u, v in h.edge_iterator(labels=False) if d[u] != d[v]) | |||
|
|||
# set by_weight, weight_function | |||
if weight_function is not None: |
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.
this is done in _get_weight_function
.
src/sage/graphs/digraph.py
Outdated
if weight_function is not None: | ||
by_weight = True | ||
|
||
if weight_function is None and by_weight: |
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.
this is also done in _get_weight_function
src/sage/graphs/digraph.py
Outdated
weight_function=weight_function, | ||
check_weight=check_weight) | ||
|
||
for e in h.edge_iterator(): |
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.
this should be done only when by_weight
is True
.
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.
Thank you for review. I fixed it
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.
<!-- ^ Please provide a concise and informative title. --> <!-- ^ Don't put issue numbers in the title, do this in the PR description below. --> <!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method to calculate 1 + 2". --> <!-- v Describe your changes below in detail. --> <!-- v Why is this change required? What problem does it solve? --> <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Add feature of enumerating weighted cycle in digraph. Specifically, I added several arguments related to weight in _all_cycles_iterator_vertex, all_cycles_iterator, all_simple_cycles functions. _all_cycles_iterator_vertex function enumerates cycles whose starting point is specifed in increasing weight order by using PriorityQueue instread of normal queue. By using this, all_cycls_iterator can enumerate cycles in increasing weight order. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [ ] I have updated the documentation and checked the documentation preview. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on. For example, --> <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> URL: sagemath#40114 Reported by: Yuta Inoue Reviewer(s): David Coudert, Yuta Inoue
Add feature of enumerating weighted cycle in digraph. Specifically, I added several arguments related to weight in
_all_cycles_iterator_vertex, all_cycles_iterator, all_simple_cycles functions.
_all_cycles_iterator_vertex function enumerates cycles whose starting point is specifed in increasing weight order by using PriorityQueue instread of normal queue. By using this, all_cycls_iterator can enumerate cycles in increasing weight order.
📝 Checklist
⌛ Dependencies