Skip to content
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
janmenjayap opened this issue Jun 13, 2024 · 0 comments · Fixed by #38218 or #38742 · May be fixed by #38892, #38955 or #39065
Closed
1 task done

On Decompositions, Generation Methods and related concepts in the theory of Matching Covered Graphs #38216

janmenjayap opened this issue Jun 13, 2024 · 0 comments · Fixed by #38218 or #38742 · May be fixed by #38892, #38955 or #39065
Labels

Comments

@janmenjayap
Copy link
Contributor

janmenjayap commented Jun 13, 2024

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 module sage.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 to graphs.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 in sage.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?

  • I have searched the existing issues for a bug report that matches the one I want to file, without success.

References

  1. C.L. Lucchesi, U.S.R. Murty. Perfect Matchings: A Theory of Matching Covered Graphs. Algorithms and Computation in Mathematics. Springer Cham, 1st edition, 2024, doi: 10.1007/978-3-031-47504-7.
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
@vbraun vbraun closed this as completed in b104450 Sep 29, 2024
@dcoudert dcoudert added the gsoc: 2024 Tag for GSoC2024 issues/PRs label Nov 4, 2024
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
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment