-
-
Notifications
You must be signed in to change notification settings - Fork 488
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
On Decompositions, Generation Methods and related concepts in the theory of Matching Covered Graphs #38216
Closed
1 task done
Closed
1 task done
Labels
Comments
7 tasks
vbraun
pushed a commit
to vbraun/sage
that referenced
this issue
Sep 27, 2024
…ical()` <!-- ^ Please provide a concise and informative title. --> The objective of this issue is to implement `is_matching_covered()` and `is_bicritical()` and to collect the matching related methods and to put them under `matching.py`. <!-- ^ 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. --> This PR introduces two methods pertaining to matching and aims to list out all matching related functions in `matching.py`. The two new methods are described below: - [x] `is_matching_covered()`: Check if the graph is matching covered. - [x] `is_bicritical()`: Check if the graph is bicritical. <!-- v Why is this change required? What problem does it solve? --> This PR addresses couple of missing functions and also addresses the lack of a separate file for matchings. <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Fixes sagemath#38216. ### 📝 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, --> Nothing as of now (up to my knowledge). <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> cc: @dcoudert. URL: sagemath#38218 Reported by: Janmenjaya Panda Reviewer(s): David Coudert, Janmenjaya Panda
20 tasks
7 tasks
vbraun
pushed a commit
to vbraun/sage
that referenced
this issue
Nov 9, 2024
<!-- ^ Please provide a concise and informative title. --> The objective of this issue is to introduce a new class `MatchingCoveredGraph` through a new file `src/sage/graphs/matching_covered_graph.py` in order to address the decompositions, generation methods and related concepts in the theory of Matching Covered Graphs. <!-- ^ 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. --> This PR introduces a new class pertaining to matching, namely `MatchingCoveredGraph` and aims to list out all functions fundamentally related to matching covered graph in the file `src/sage/graphs/matching_covered_graph.py`. The initialization and some basic class methods in this context, that shall be addressed through this PR, are described below: - [x] `__init__()`: Create a matching covered graph, that is a connected nontrivial graph wherein each edge participates in some perfect matching. - [x] `__repr__()`: Return a short string representation of the matching covered graph. - [x] `_subgraph_by_adding()`: Return the matching covered subgraph containing the given vertices and edges. - [x] `_upgrade_from_graph()`: Upgrade the given graph to a matching covered graph if eligible. - [x] `add_edge()`: Add an edge from vertex ``u`` to vertex ``v``. - [x] `add_edges()`: Add edges from an iterable container. - [x] `add_vertex()`: Add a vertex to the (matching covered) graph. - [x] `add_vertices()`: Add vertices to the (matching covered) graph from an iterable container of vertices. - [x] `allow_loops()`: Change whether loops are allowed in (matching covered) graphs. - [x] `allows_loops()`: Return whether loops are permitted in (matching covered) graph. - [x] `delete_vertex()`: Delete a vertex, removing all incident edges.0 - [x] `delete_vertices()`: Delete specified vertices form ``self``. - [x] `get_matching()`: Return a :class:`~EdgesView` of ``self._matching`` (a perfect matching of the (matching covered) graph computed at the initialization). - [x] `has_perfect_matching()`: Return whether the graph has a perfect matching. - [x] `update_matching()`: Update the perfect matching captured in ``self._matching``. <!-- v Why is this change required? What problem does it solve? --> This PR shall establish a foundation to address the methods related to matching covered graphs. <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Fixes sagemath#38216. Note that this issue fixes a small part of the above-mentioned issue. ### 📝 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, --> Nothing as of now (up to my knowledge). <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> cc: @dcoudert. URL: sagemath#38742 Reported by: Janmenjaya Panda Reviewer(s): David Coudert, Janmenjaya Panda
13 tasks
vbraun
pushed a commit
to vbraun/sage
that referenced
this issue
Nov 13, 2024
<!-- ^ Please provide a concise and informative title. --> The objective of this issue is to introduce a new class `MatchingCoveredGraph` through a new file `src/sage/graphs/matching_covered_graph.py` in order to address the decompositions, generation methods and related concepts in the theory of Matching Covered Graphs. <!-- ^ 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. --> This PR introduces a new class pertaining to matching, namely `MatchingCoveredGraph` and aims to list out all functions fundamentally related to matching covered graph in the file `src/sage/graphs/matching_covered_graph.py`. The initialization and some basic class methods in this context, that shall be addressed through this PR, are described below: - [x] `__init__()`: Create a matching covered graph, that is a connected nontrivial graph wherein each edge participates in some perfect matching. - [x] `__repr__()`: Return a short string representation of the matching covered graph. - [x] `_subgraph_by_adding()`: Return the matching covered subgraph containing the given vertices and edges. - [x] `_upgrade_from_graph()`: Upgrade the given graph to a matching covered graph if eligible. - [x] `add_edge()`: Add an edge from vertex ``u`` to vertex ``v``. - [x] `add_edges()`: Add edges from an iterable container. - [x] `add_vertex()`: Add a vertex to the (matching covered) graph. - [x] `add_vertices()`: Add vertices to the (matching covered) graph from an iterable container of vertices. - [x] `allow_loops()`: Change whether loops are allowed in (matching covered) graphs. - [x] `allows_loops()`: Return whether loops are permitted in (matching covered) graph. - [x] `delete_vertex()`: Delete a vertex, removing all incident edges.0 - [x] `delete_vertices()`: Delete specified vertices form ``self``. - [x] `get_matching()`: Return a :class:`~EdgesView` of ``self._matching`` (a perfect matching of the (matching covered) graph computed at the initialization). - [x] `has_perfect_matching()`: Return whether the graph has a perfect matching. - [x] `update_matching()`: Update the perfect matching captured in ``self._matching``. <!-- v Why is this change required? What problem does it solve? --> This PR shall establish a foundation to address the methods related to matching covered graphs. <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Fixes sagemath#38216. Note that this issue fixes a small part of the above-mentioned issue. ### 📝 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, --> Nothing as of now (up to my knowledge). <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> cc: @dcoudert. URL: sagemath#38742 Reported by: Janmenjaya Panda Reviewer(s): David Coudert, Janmenjaya Panda
vbraun
pushed a commit
to vbraun/sage
that referenced
this issue
Nov 14, 2024
<!-- ^ Please provide a concise and informative title. --> The objective of this issue is to introduce a new class `MatchingCoveredGraph` through a new file `src/sage/graphs/matching_covered_graph.py` in order to address the decompositions, generation methods and related concepts in the theory of Matching Covered Graphs. <!-- ^ 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. --> This PR introduces a new class pertaining to matching, namely `MatchingCoveredGraph` and aims to list out all functions fundamentally related to matching covered graph in the file `src/sage/graphs/matching_covered_graph.py`. The initialization and some basic class methods in this context, that shall be addressed through this PR, are described below: - [x] `__init__()`: Create a matching covered graph, that is a connected nontrivial graph wherein each edge participates in some perfect matching. - [x] `__repr__()`: Return a short string representation of the matching covered graph. - [x] `_subgraph_by_adding()`: Return the matching covered subgraph containing the given vertices and edges. - [x] `_upgrade_from_graph()`: Upgrade the given graph to a matching covered graph if eligible. - [x] `add_edge()`: Add an edge from vertex ``u`` to vertex ``v``. - [x] `add_edges()`: Add edges from an iterable container. - [x] `add_vertex()`: Add a vertex to the (matching covered) graph. - [x] `add_vertices()`: Add vertices to the (matching covered) graph from an iterable container of vertices. - [x] `allow_loops()`: Change whether loops are allowed in (matching covered) graphs. - [x] `allows_loops()`: Return whether loops are permitted in (matching covered) graph. - [x] `delete_vertex()`: Delete a vertex, removing all incident edges.0 - [x] `delete_vertices()`: Delete specified vertices form ``self``. - [x] `get_matching()`: Return a :class:`~EdgesView` of ``self._matching`` (a perfect matching of the (matching covered) graph computed at the initialization). - [x] `has_perfect_matching()`: Return whether the graph has a perfect matching. - [x] `update_matching()`: Update the perfect matching captured in ``self._matching``. <!-- v Why is this change required? What problem does it solve? --> This PR shall establish a foundation to address the methods related to matching covered graphs. <!-- v If this PR resolves an open issue, please link to it here. For example, "Fixes sagemath#12345". --> Fixes sagemath#38216. Note that this issue fixes a small part of the above-mentioned issue. ### 📝 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, --> Nothing as of now (up to my knowledge). <!-- - sagemath#12345: short description why this is a dependency --> <!-- - sagemath#34567: ... --> cc: @dcoudert. URL: sagemath#38742 Reported by: Janmenjaya Panda Reviewer(s): David Coudert, Janmenjaya Panda
12 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Problem Description
Matchings and perfect matchings have received considerable attention in graph theory as well as in other related domains (such as, but not limited to, algorithms and optimization). There still remain many open problems — such as Barnette’s conjecture, Berge-Fulkerson conjecture, and so on — due to which it continues to remain an active area of research. For problems concerning perfect matchings, it is well-known that it suffices to solve them for matching covered graphs (that is, those connected graphs wherein each edge belongs to some perfect matching).
The objective of this issue is to implement efficient algorithms pertaining to the canonical partition, tight cut decomposition, dependency relations, (optimal) ear decomposition, brick and brace generation methods and related concepts in the theory of matching covered graphs, and to make all of these available freely to students, educators as well as researchers all across the world. This issue has been inspired by the book of C.L. Lucchesi and U.S.R. Murty: PERFECT MATCHINGS: A THEORY OF MATCHING COVERED GRAPHS 1.
Proposed Solution
To create a new class:
MatchingCoveredGraph
, in the modulesage.graphs.matching_covered_graph
and to implement the following functions:maximal_barrier()
: Return the (unique) maximal barrier of the (matching covered) graph containing the (provided) vertex.canonical_partition()
: Return the canonical partition of the (matching covered) graph.tight_cut_decomposition()
: Return <a maximal set of laminar nontrivial tight cuts, the vertex set partition as the shores wrt these cuts> of the (matching covered) graph.bricks_and_braces()
: Return the list of (underlying simple graph of) the bricks and braces of the (matching covered) graph.number_of_bricks()
: Return the number of bricks.number_of_braces()
: Return the number of braces.number_of_petersen_bricks()
: Return the number of Petersen bricks (the bricks the underlying simple graph of which is isomorphic tographs.PetersenGraph()
).is_brick()
: Check if the (matching covered) graph is a brick.is_brace()
: Check if the (matching covered) graph is a brace.is_removable_edge()
: Check if the edge of the (matching covered) graph is removable.removable_edges()
: Return the list of all removable edges of the (matching covered) graph.is_removable_doubleton()
: Check if the pair of edges constitute a removable doubleton in the (matching covered) graph.removable_doubletons()
: Return the list of all removable doubletons.retract()
: Compute the retract of the (matching covered) graph.ear_decomposition()
: Return an efficient or an optimal ear decomposition (aka a list of ears/ a list of graphs).is_b_invariant_edge()
: Check if the edge is b-invariant.is_thin_edge()
: Check if the edge is thin.is_strictly_thin_edge()
: Check if the edge is strictly thin.is_mccuaig_brace()
: Check if the brace is a McCuaig brace.is_norine_thomas_brick()
: Check if the brick is a Norine-Thomas brick.brick_generation_sequence()
: Return a Norine-Thomas brick generation sequence of the (given) brick.brace_generation_sequence()
: Return a McCuaig brace generation sequence of the (given) brace.The following two functions are proposed to be implemented under the class:
Graph
insage.graphs.graph
:is_matching_covered()
: Check if the graph is matching covered.is_bicritical()
: Check if the graph is bicritical.We adopt the notations and definitions as described in the aforementioned book of C.L. Lucchesi and U.S.R. Murty 1.
Alternatives Considered
NA
Additional Information
This implementation is a part of the project: link.
cc: @dcoudert.
Is there an existing issue for this?
References
The text was updated successfully, but these errors were encountered: