-
-
Notifications
You must be signed in to change notification settings - Fork 628
add parameter immutable
to some graph operations in sage/graphs/generic_graph.py
#39280
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
add parameter immutable
to some graph operations in sage/graphs/generic_graph.py
#39280
Conversation
Documentation preview for this PR (built with commit 4aeb7dd; changes) is ready! 🎉 |
I must say that I would like it much better if graphs were immutable by default :-( |
Before debating such drastic change, we must make sure that the entire graph library, including generators, is consistent. |
maybe you could create a function "scream_if_immutable" to avoid repeating ? |
I'm adding this idea to my todo list. It should certainly be done also in backends... |
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
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.
ok, good
sagemathgh-39280: add parameter `immutable` to some graph operations in `sage/graphs/generic_graph.py` As proposed in sagemath#39177, we add parameter `immutable` to (some) graph operations. - add tests to `add_clique`, `add_path`, and `add_cycle` to prevent modifying an immutable graph - add the parameter to method `complement` - ensure that method `to_undirected` behaves as expected - propose a more direct version of `disjoint_union` to ensure a correct behavior - ensure that method `union` behaves as expected This is only a beginning. More to come in future PRs. ### 📝 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. - [x] 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#39280 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39280: add parameter `immutable` to some graph operations in `sage/graphs/generic_graph.py` As proposed in sagemath#39177, we add parameter `immutable` to (some) graph operations. - add tests to `add_clique`, `add_path`, and `add_cycle` to prevent modifying an immutable graph - add the parameter to method `complement` - ensure that method `to_undirected` behaves as expected - propose a more direct version of `disjoint_union` to ensure a correct behavior - ensure that method `union` behaves as expected This is only a beginning. More to come in future PRs. ### 📝 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. - [x] 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#39280 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39285: add parameter `immutable` to some graph products in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to some graph product operations defined in `sage/graphs/generic_graph.py`: - `cartesian_product` - `tensor_product` - `lexicographic_product` - `strong_product` - `disjunctive_product` ### 📝 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. - [x] 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#39285 Reported by: David Coudert Reviewer(s): David Coudert, Frédéric Chapoton
sagemathgh-39297: more care about parameter `immutable` in `sage/graphs/generic_graph.py` Following sagemath#39280, sagemath#39285, sagemath#39287, sagemath#39296 and discussions in sagemath#39177, we add parameter immutable to methods in `sage/graphs/generic_graph.py`: - `longest_cycle` - `longest_path` - `hamiltonian_path` - and add tests in `cycle_basis` ### 📝 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. - [x] 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#39297 Reported by: David Coudert Reviewer(s): Kwankyu Lee
sagemathgh-39287: add parameter `immutable` to transitive closure methods in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to methods related to transitive closure in `sage/graphs/generic_graph.py` and `sage/graphs/generic_graph_pyx.pyx`: - `transitive_closure`. We also fix the use of parameter `loops` that was previously ignored - `transitive_reduction` - `transitive_reduction_acyclic` - `is_transitively_reduced`. Here we ensure that the method accepts immutable digraphs. ### 📝 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. - [x] 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#39287 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39287: add parameter `immutable` to transitive closure methods in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to methods related to transitive closure in `sage/graphs/generic_graph.py` and `sage/graphs/generic_graph_pyx.pyx`: - `transitive_closure`. We also fix the use of parameter `loops` that was previously ignored - `transitive_reduction` - `transitive_reduction_acyclic` - `is_transitively_reduced`. Here we ensure that the method accepts immutable digraphs. ### 📝 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. - [x] 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#39287 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39296: fix the behavior for immutable graphs in methods related to isomorphisms in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to methods related to graph isomorphisms in `sage/graphs/generic_graph.py` and `bliss.pyx`: - `canonical_form` - `automorphism_group` - `is_isomorphic` - `graph_isom_equivalent_non_edge_labeled_graph` - and also `cayley_graph` We also fix the behavior of method `canonical_label` in `BipartiteGraph`. ### 📝 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. - [x] 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#39296 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39296: fix the behavior for immutable graphs in methods related to isomorphisms in `sage/graphs/generic_graph.py` Following sagemath#39280 and discussions in sagemath#39177, we add parameter `immutable` to methods related to graph isomorphisms in `sage/graphs/generic_graph.py` and `bliss.pyx`: - `canonical_form` - `automorphism_group` - `is_isomorphic` - `graph_isom_equivalent_non_edge_labeled_graph` - and also `cayley_graph` We also fix the behavior of method `canonical_label` in `BipartiteGraph`. ### 📝 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. - [x] 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#39296 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39755: add helper method `_scream_if_immutable` to graphs As proposed in sagemath#39280 (comment), we add a helper method `_scream_if_immutable` to (di)graphs. We then use it in several methods trying to modify the graph. ### 📝 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. - [x] 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#39755 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39755: add helper method `_scream_if_immutable` to graphs As proposed in sagemath#39280 (comment), we add a helper method `_scream_if_immutable` to (di)graphs. We then use it in several methods trying to modify the graph. ### 📝 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. - [x] 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#39755 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39755: add helper method `_scream_if_immutable` to graphs As proposed in sagemath#39280 (comment), we add a helper method `_scream_if_immutable` to (di)graphs. We then use it in several methods trying to modify the graph. ### 📝 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. - [x] 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#39755 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39755: add helper method `_scream_if_immutable` to graphs As proposed in sagemath#39280 (comment), we add a helper method `_scream_if_immutable` to (di)graphs. We then use it in several methods trying to modify the graph. ### 📝 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. - [x] 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#39755 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
sagemathgh-39755: add helper method `_scream_if_immutable` to graphs As proposed in sagemath#39280 (comment), we add a helper method `_scream_if_immutable` to (di)graphs. We then use it in several methods trying to modify the graph. ### 📝 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. - [x] 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#39755 Reported by: David Coudert Reviewer(s): Frédéric Chapoton
As proposed in #39177, we add parameter
immutable
to (some) graph operations.add_clique
,add_path
, andadd_cycle
to prevent modifying an immutable graphcomplement
to_undirected
behaves as expecteddisjoint_union
to ensure a correct behaviorunion
behaves as expectedThis is only a beginning. More to come in future PRs.
📝 Checklist
⌛ Dependencies