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
Graph constructors: Remove gratuitous nondeterminism #37942
Conversation
…s): Use dict instead of set for vertices
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 the build bot is failing. It should not be related, but..
For a tentative to repair the currently very broken CI , see #37926 |
Some failing doctests due to this PR:
|
Thanks. |
Documentation preview for this PR (built with commit d1f3f4a; changes) is ready! 🎉 |
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.
Thank you! |
@@ -504,7 +515,7 @@ def relabel(x): | |||
|
|||
is_directed = G.is_directed() | |||
if not is_directed and multiedges: | |||
v_to_id = {v: i for i, v in enumerate(verts)} | |||
v_to_id = {v: i for i, v in enumerate(verts.keys())} |
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.
isn't enumerate(verts)
precisely the same as enumerate(verts.keys())
?
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.
Yes, that's right; I've written it in this verbose form for clarity only.
<!-- ^ 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". --> Since Python 3.x, `dict`s preserve insertion order. Here we modify the processing of "dict-of-dicts" and "dist-of-lists" input formats to avoid going through `set`, which introduces gratuitous nondeterminism regarding the order of vertices. This change gives for example this improvement: ```sage sage: G = graphs.CubeGraph(3) sage: G.vertices(sort=False) ['000', '001', '010', '011', '100', '101', '110', '111'] ``` ### 📝 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. - [ ] I have linked a relevant issue or discussion. - [ ] 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#37942 Reported by: Matthias Köppe Reviewer(s): David Coudert, Martin Rubey, Matthias Köppe
<!-- ^ 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". --> Since Python 3.x, `dict`s preserve insertion order. Here we modify the processing of "dict-of-dicts" and "dist-of-lists" input formats to avoid going through `set`, which introduces gratuitous nondeterminism regarding the order of vertices. This change gives for example this improvement: ```sage sage: G = graphs.CubeGraph(3) sage: G.vertices(sort=False) ['000', '001', '010', '011', '100', '101', '110', '111'] ``` ### 📝 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. - [ ] I have linked a relevant issue or discussion. - [ ] 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#37942 Reported by: Matthias Köppe Reviewer(s): David Coudert, Martin Rubey, Matthias Köppe
<!-- ^ 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". --> Since Python 3.x, `dict`s preserve insertion order. Here we modify the processing of "dict-of-dicts" and "dist-of-lists" input formats to avoid going through `set`, which introduces gratuitous nondeterminism regarding the order of vertices. This change gives for example this improvement: ```sage sage: G = graphs.CubeGraph(3) sage: G.vertices(sort=False) ['000', '001', '010', '011', '100', '101', '110', '111'] ``` ### 📝 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. - [ ] I have linked a relevant issue or discussion. - [ ] 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#37942 Reported by: Matthias Köppe Reviewer(s): David Coudert, Martin Rubey, Matthias Köppe
Since Python 3.x,
dict
s preserve insertion order.Here we modify the processing of "dict-of-dicts" and "dist-of-lists" input formats to avoid going through
set
, which introduces gratuitous nondeterminism regarding the order of vertices.This change gives for example this improvement:
📝 Checklist
⌛ Dependencies