From b11634787bb3bfe5746b9c12b17483fd41e65e9c Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:14:49 +0530 Subject: [PATCH 01/19] Overwrote methods concerning loops --- src/sage/graphs/matching_covered_graph.py | 25 ++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 2a9b8916c90..1221ee5f192 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -57,7 +57,6 @@ ``delete_multiedge()`` | Delete all edges from ``u`` to ``v``. ``disjoint_union()`` | Return the disjoint union of ``self`` and ``other``. ``disjunctive_product()`` | Return the disjunctive product of ``self`` and ``other``. - ``has_loops()`` | Return whether there are loops in the matching covered graph. ``is_biconnected()`` | Check if the matching covered graph is biconnected. ``is_block_graph()`` | Check whether the matching covered graph is a block graph. ``is_cograph()`` | Check whether the matching covered graph is cograph. @@ -69,12 +68,8 @@ ``join()`` | Return the join of ``self`` and ``other``. ``lexicographic_product()`` | Return the lexicographic product of ``self`` and ``other``. ``load_afile()`` | Load the matching covered graph specified in the given file into the current object. - ``loop_edges()`` | Return a list of all loops in the matching covered graph. - ``loop_vertices()`` | Return a list of vertices with loops. ``merge_vertices()`` | Merge vertices. - ``number_of_loops()`` | Return the number of edges that are loops. ``random_subgraph()`` | Return a random matching covered subgraph containing each vertex with probability ``p``. - ``remove_loops()`` | Remove loops on vertices in ``vertices``. ``save_afile()`` | Save the graph to file in alist format. ``strong_product()`` | Return the strong product of ``self`` and ``other``. ``subdivide_edge()`` | Subdivide an edge `k` times. @@ -1918,6 +1913,10 @@ def get_matching(self): """ return self._matching + @doc_index('Overwritten methods') + def has_loops(self): + raise NotImplementedError() + @doc_index('Overwritten methods') def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0, *, integrality_tolerance=1e-3): @@ -2003,6 +2002,22 @@ def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0, raise ValueError('algorithm must be set to \'Edmonds\', ' '\'LP_matching\' or \'LP\'') + @doc_index('Overwritten methods') + def loop_edges(self, labels=True): + raise NotImplementedError() + + @doc_index('Overwritten methods') + def loop_vertices(self): + raise NotImplementedError() + + @doc_index('Overwritten methods') + def number_of_loops(self): + raise NotImplementedError() + + @doc_index('Overwritten methods') + def remove_loops(self, vertices=None): + raise NotImplementedError() + @doc_index('Miscellaneous methods') def update_matching(self, matching): r""" From f6ad99cbc2a7eb53d5e3f145c5e499c9fd65402e Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:18:28 +0530 Subject: [PATCH 02/19] Overwrote has_loops() --- src/sage/graphs/matching_covered_graph.py | 82 ++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 1221ee5f192..4426fd5b211 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1915,7 +1915,87 @@ def get_matching(self): @doc_index('Overwritten methods') def has_loops(self): - raise NotImplementedError() + r""" + Check whether thare are loops in the (matching covered) graph. + + .. NOTE:: + + This method overwrites the + :meth:`~sage.graphs.generic_graph.GenericGraph.has_loops` method in + order to return ``False`` as matching covered graphs are always + free of looped edges. + + OUTPUT: + + - A boolean ``False`` is returned since matching covered graphs, by + definition, are free of self-loops. + + EXAMPLES: + + A matching covered graph, for instance the Petersen graph, is always free + of loops:: + + sage: P = graphs.PetersenGraph() + sage: G = MatchingCoveredGraph(P) + sage: G + Matching covered petersen graph: graph on 10 vertices + sage: G.has_loops() + False + sage: G.allows_loops() + False + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + A matching covered graph may support multiple edges, still no + loops are allowed:: + + sage: K = graphs.CompleteGraph(2) + sage: G = MatchingCoveredGraph(K) + sage: G.allow_multiple_edges(True) + sage: G + Matching covered complete graph: multi-graph on 2 vertices + sage: G.add_edge(0, 1, 'label') + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label')] + sage: G.allows_loops() + False + sage: G.has_loops() + False + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` + + """ + return False @doc_index('Overwritten methods') def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0, From 7de0b7be9bd2ff347e0eb0362ed50765bf8d5281 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:21:35 +0530 Subject: [PATCH 03/19] Overwrote loop_edges() --- src/sage/graphs/matching_covered_graph.py | 94 ++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 4426fd5b211..e6630415f34 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2084,7 +2084,99 @@ def has_perfect_matching(G, algorithm='Edmonds', solver=None, verbose=0, @doc_index('Overwritten methods') def loop_edges(self, labels=True): - raise NotImplementedError() + r""" + Return a list of all loops in the (matching covered) graph. + + .. NOTE:: + + This method overwrites the + :meth:`~sage.graphs.generic_graph.GenericGraph.loop_edges` method + in order to return an empty list as matching covered graphs are + free of looped edges. + + INPUT: + + - ``labels`` -- boolean (default: ``True``); whether returned edges have + labels (``(u,v,l)``) or not (``(u,v)``) + + OUTPUT: + + - A list capturing the edges that are loops in the matching covered + graph; note that, the list is empty since matching covered graphs do + not contain any looped edges. + + EXAMPLES: + + A matching covered graph, for instance the Heawood graph, by + definition, is always free of loops:: + + sage: H = graphs.HeawoodGraph() + sage: G = MatchingCoveredGraph(H) + sage: G + Matching covered heawood graph: graph on 14 vertices + sage: G.has_loops() + False + sage: G.allows_loops() + False + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + A matching covered graph may support multiple edges, still no + loops are allowed:: + + sage: C = graphs.CycleGraph(4) + sage: G = MatchingCoveredGraph(C) + sage: G.allow_multiple_edges(True) + sage: G + Matching covered cycle graph: multi-graph on 4 vertices + sage: G.add_edge(0, 1, 'label') + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label'), (0, 3, None), (1, 2, None), (2, 3, None)] + sage: G.allows_loops() + False + sage: G.has_loops() + False + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + One may set the ``label`` to either ``True`` or ``False``:: + + sage: G.loop_edges(labels=False) + [] + sage: G.loops(labels=True) + [] + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` + """ + return [] @doc_index('Overwritten methods') def loop_vertices(self): From a5a332fb85330f0587f1426e3b8b4fdc83ca0fc9 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:24:06 +0530 Subject: [PATCH 04/19] Overwrote loop_vertices() --- src/sage/graphs/matching_covered_graph.py | 86 ++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index e6630415f34..e73d96367da 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2180,7 +2180,91 @@ def loop_edges(self, labels=True): @doc_index('Overwritten methods') def loop_vertices(self): - raise NotImplementedError() + """ + Return a list of vertices with loops. + + .. NOTE:: + + This method overwrites the + :meth:`~sage.graphs.generic_graph.GenericGraph.loop_vertices` + method in order to return an empty list as matching covered graphs + are free of vertices that have looped edges. + + OUTPUT: + + - A list capturing the vertices that have loops in the matching covered + graph; note that, the list is empty since matching covered graphs do + not contain any looped edges. + + EXAMPLES: + + A matching covered graph, for instance the Möbius graph of order 8, by + definition, is always free of loops:: + + sage: M = graphs.MoebiusLadderGraph(4) + sage: G = MatchingCoveredGraph(M) + sage: G + Matching covered moebius ladder graph: graph on 8 vertices + sage: G.has_loops() + False + sage: G.allows_loops() + False + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + A matching covered graph may support multiple edges, still no + loops are allowed:: + + sage: S = graphs.StaircaseGraph(4) + sage: G = MatchingCoveredGraph(S) + sage: G.allow_multiple_edges(True) + sage: G + Matching covered staircase graph: multi-graph on 8 vertices + sage: G.add_edge(0, 1, 'label') + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label'), (0, 3, None), (0, 6, None), + (1, 2, None), (1, 4, None), (2, 5, None), (2, 7, None), + (3, 4, None), (3, 6, None), (4, 5, None), (5, 7, None), + (6, 7, None)] + sage: G.allows_loops() + False + sage: G.has_loops() + False + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` + + """ + return [] @doc_index('Overwritten methods') def number_of_loops(self): From 8979db1d7c2abbb48ec0dfd82a9e47265a8b5ce2 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:26:57 +0530 Subject: [PATCH 05/19] Overwrote loops() --- src/sage/graphs/matching_covered_graph.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index e73d96367da..133d86e32ac 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2266,6 +2266,8 @@ def loop_vertices(self): """ return [] + loops = loop_edges + @doc_index('Overwritten methods') def number_of_loops(self): raise NotImplementedError() From 7acc34d42283ea1c4a906105d0ffcf4e23a8d7eb Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:27:55 +0530 Subject: [PATCH 06/19] Overwrote number_of_loops() --- src/sage/graphs/matching_covered_graph.py | 84 ++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 133d86e32ac..77b3654374c 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2270,7 +2270,89 @@ def loop_vertices(self): @doc_index('Overwritten methods') def number_of_loops(self): - raise NotImplementedError() + r""" + Return the number of edges that are loops. + + .. NOTE:: + + This method overwrites the + :meth:`~sage.graphs.generic_graph.GenericGraph.number_of_loops` + method in order to return 0 as matching covered graphs are free + of looped edges. + + OUTPUT: + + - An integer, 0 is returned, since matching covered graphs do not + contain zero loops. + + EXAMPLES: + + A matching covered graph, for instance the Truncated biwheel graph, + by definition, is always free of loops:: + + sage: T = graphs.TruncatedBiwheelGraph(5) + sage: G = MatchingCoveredGraph(T) + sage: G + Matching covered truncated biwheel graph: graph on 10 vertices + sage: G.has_loops() + False + sage: G.allows_loops() + False + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + A matching covered graph may support multiple edges, still no + loops are allowed:: + + sage: B = graphs.BiwheelGraph(4) + sage: G = MatchingCoveredGraph(B) + sage: G.allow_multiple_edges(True) + sage: G + Matching covered biwheel graph: multi-graph on 8 vertices + sage: G.add_edge(0, 1, 'label') + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label'), (0, 5, None), (0, 7, None), + (1, 2, None), (1, 6, None), (2, 3, None), (2, 7, None), + (3, 4, None), (3, 6, None), (4, 5, None), (4, 7, None), + (5, 6, None)] + sage: G.allows_loops() + False + sage: G.has_loops() + False + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` + """ + return 0 @doc_index('Overwritten methods') def remove_loops(self, vertices=None): From d24784855e9dac71a2b0bb0c166a165fa93f2569 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:28:54 +0530 Subject: [PATCH 07/19] Overwrote remove_loops() --- src/sage/graphs/matching_covered_graph.py | 92 ++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 77b3654374c..7d035d2de81 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2356,7 +2356,97 @@ def number_of_loops(self): @doc_index('Overwritten methods') def remove_loops(self, vertices=None): - raise NotImplementedError() + r""" + Remove loops on vertices in ``vertices``. + + .. NOTE:: + + This method overwrites the + :meth:`~sage.graphs.generic_graph.GenericGraph.remove_loops` method + in order to return without any alteration as matching covered + graphs are free of looped edges. + + INPUT: + + - ``vertices`` -- (default: ``None``) iterator container of vertex + labels correponding to which the looped edges are to be removed. If + ``vertices`` is ``None``, remove all loops. + + OUTPUT: + + - Nothing is returned, as a matching covered graph is already devoid of + any loops. + + EXAMPLES: + + A matching covered graph, for instance the Wheel graph of order six, is + always free of loops:: + + sage: W = graphs.WheelGraph(6) + sage: G = MatchingCoveredGraph(W) + sage: G + Matching covered wheel graph: graph on 6 vertices + sage: G.has_loops() + False + sage: G.allows_loops() + False + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + sage: G.remove_loops() + sage: G.edges(sort=True) + [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None), + (0, 5, None), (1, 2, None), (1, 5, None), (2, 3, None), + (3, 4, None), (4, 5, None)] + + A matching covered graph may support multiple edges, still no + loops are allowed:: + + sage: K = graphs.CompleteGraph(2) + sage: G = MatchingCoveredGraph(K) + sage: G.allow_multiple_edges(True) + sage: G + Matching covered complete graph: multi-graph on 2 vertices + sage: G.add_edge(0, 1, 'label') + sage: G.add_edge(0, 0) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label')] + sage: G.allows_loops() + False + sage: G.has_loops() + False + sage: G.loops() + [] + sage: G.loop_edges() + [] + sage: G.loop_vertices() + [] + sage: G.number_of_loops() + 0 + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops` + """ + return @doc_index('Miscellaneous methods') def update_matching(self, matching): From 369eeba7cf4ccf43e34c175202c1c8fa35b20f35 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:29:39 +0530 Subject: [PATCH 08/19] updated allow_loops() --- src/sage/graphs/matching_covered_graph.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 7d035d2de81..5f5cfbe8a26 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1622,6 +1622,16 @@ def allow_loops(self, new, check=True): Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allows_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` """ if new: raise ValueError('loops are not allowed in ' From cca3d4553aaf43561cfc88474bcdb26be42a9ea6 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 18:30:11 +0530 Subject: [PATCH 09/19] updated allows_loops() --- src/sage/graphs/matching_covered_graph.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 5f5cfbe8a26..66dfd8bc072 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1663,6 +1663,16 @@ def allows_loops(self): sage: G = MatchingCoveredGraph(P) sage: G.allows_loops() False + + .. SEEALSO:: + + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.has_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_edges`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loop_vertices`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, + :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` """ return False From 0a88de6e80e1533dbd8b93fc5cc4c5cecedf058d Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:02:49 +0530 Subject: [PATCH 10/19] updated remove_loops() --- src/sage/graphs/matching_covered_graph.py | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 66dfd8bc072..8b615310e4b 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2455,6 +2455,28 @@ def remove_loops(self, vertices=None): [] sage: G.number_of_loops() 0 + sage: G.remove_loops(vertices=[0, 1]) + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label')] + sage: G.remove_loops(vertices=[0..100]) + + Note that the parameter ``vertices`` must be either ``None`` or an + iterable:: + + sage: G.remove_loops(vertices='') + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label')] + sage: G.remove_loops(vertices=None) + sage: G.edges(sort=False) + [(0, 1, None), (0, 1, 'label')] + sage: G.remove_loops(vertices=0) + Traceback (most recent call last): + ... + TypeError: 'Integer' object is not iterable + sage: G.remove_loops(vertices=False) + Traceback (most recent call last): + ... + TypeError: 'bool' object is not iterable .. SEEALSO:: @@ -2466,6 +2488,12 @@ def remove_loops(self, vertices=None): :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops` """ + from collections.abc import Iterable + + if vertices is not None and not isinstance(vertices, Iterable): + raise TypeError(f'\'{vertices.__class__.__name__}\' ' + 'object is not iterable') + return @doc_index('Miscellaneous methods') From d78f6043e78bfbf056cdd2af524d8cb67eb02dd9 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:03:28 +0530 Subject: [PATCH 11/19] corrected a typo --- src/sage/graphs/matching_covered_graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 8b615310e4b..e646667d4c7 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1936,7 +1936,7 @@ def get_matching(self): @doc_index('Overwritten methods') def has_loops(self): r""" - Check whether thare are loops in the (matching covered) graph. + Check whether there are loops in the (matching covered) graph. .. NOTE:: From cc07061dbda58513dfeae89e7c40c7e4ae961824 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:06:47 +0530 Subject: [PATCH 12/19] corrected the indentation --- src/sage/graphs/matching_covered_graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index e646667d4c7..77c461df37e 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2116,8 +2116,8 @@ def loop_edges(self, labels=True): INPUT: - - ``labels`` -- boolean (default: ``True``); whether returned edges have - labels (``(u,v,l)``) or not (``(u,v)``) + - ``labels`` -- boolean (default: ``True``); whether returned edges + have labels (``(u,v,l)``) or not (``(u,v)``). OUTPUT: From e98aae7f87e900328300dbbd819f4cb44f4b6a97 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:14:57 +0530 Subject: [PATCH 13/19] updated the indentation --- src/sage/graphs/matching_covered_graph.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 77c461df37e..0d482cf23b6 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2013,7 +2013,6 @@ def has_loops(self): :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` - """ return False @@ -2200,7 +2199,7 @@ def loop_edges(self, labels=True): @doc_index('Overwritten methods') def loop_vertices(self): - """ + r""" Return a list of vertices with loops. .. NOTE:: @@ -2282,7 +2281,6 @@ def loop_vertices(self): :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.loops`, :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.number_of_loops`, :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.remove_loops` - """ return [] From 327222716590b5c4120d7808ad458058820f8c7b Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:17:06 +0530 Subject: [PATCH 14/19] updated the doctest of loop_edges() --- src/sage/graphs/matching_covered_graph.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 0d482cf23b6..7550455ae7c 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2133,10 +2133,6 @@ def loop_edges(self, labels=True): sage: G = MatchingCoveredGraph(H) sage: G Matching covered heawood graph: graph on 14 vertices - sage: G.has_loops() - False - sage: G.allows_loops() - False sage: G.add_edge(0, 0) Traceback (most recent call last): ... @@ -2145,10 +2141,6 @@ def loop_edges(self, labels=True): [] sage: G.loop_edges() [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 A matching covered graph may support multiple edges, still no loops are allowed:: @@ -2165,18 +2157,10 @@ def loop_edges(self, labels=True): ValueError: loops are not allowed in matching covered graphs sage: G.edges(sort=False) [(0, 1, None), (0, 1, 'label'), (0, 3, None), (1, 2, None), (2, 3, None)] - sage: G.allows_loops() - False - sage: G.has_loops() - False sage: G.loops() [] sage: G.loop_edges() [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 One may set the ``label`` to either ``True`` or ``False``:: From 023b05a43ae12b566b4f6df4a3672a311a817ec1 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:18:29 +0530 Subject: [PATCH 15/19] updated the doctest of loop_vertices() --- src/sage/graphs/matching_covered_graph.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 7550455ae7c..23038b1e139 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2208,22 +2208,12 @@ def loop_vertices(self): sage: G = MatchingCoveredGraph(M) sage: G Matching covered moebius ladder graph: graph on 8 vertices - sage: G.has_loops() - False - sage: G.allows_loops() - False sage: G.add_edge(0, 0) Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs - sage: G.loops() - [] - sage: G.loop_edges() - [] sage: G.loop_vertices() [] - sage: G.number_of_loops() - 0 A matching covered graph may support multiple edges, still no loops are allowed:: @@ -2243,18 +2233,8 @@ def loop_vertices(self): (1, 2, None), (1, 4, None), (2, 5, None), (2, 7, None), (3, 4, None), (3, 6, None), (4, 5, None), (5, 7, None), (6, 7, None)] - sage: G.allows_loops() - False - sage: G.has_loops() - False - sage: G.loops() - [] - sage: G.loop_edges() - [] sage: G.loop_vertices() [] - sage: G.number_of_loops() - 0 .. SEEALSO:: From a2b4a9df9bef88b01d1a8aee4f246c96584176e4 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:19:24 +0530 Subject: [PATCH 16/19] updated the doctest of number_of_loops() --- src/sage/graphs/matching_covered_graph.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 23038b1e139..03cb4915d4f 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2276,18 +2276,10 @@ def number_of_loops(self): sage: G = MatchingCoveredGraph(T) sage: G Matching covered truncated biwheel graph: graph on 10 vertices - sage: G.has_loops() - False - sage: G.allows_loops() - False sage: G.add_edge(0, 0) Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs - sage: G.loops() - [] - sage: G.loop_edges() - [] sage: G.loop_vertices() [] sage: G.number_of_loops() @@ -2311,14 +2303,6 @@ def number_of_loops(self): (1, 2, None), (1, 6, None), (2, 3, None), (2, 7, None), (3, 4, None), (3, 6, None), (4, 5, None), (4, 7, None), (5, 6, None)] - sage: G.allows_loops() - False - sage: G.has_loops() - False - sage: G.loops() - [] - sage: G.loop_edges() - [] sage: G.loop_vertices() [] sage: G.number_of_loops() From ca0f5cc9979691ac78a36dac3c037e0fca822f1e Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:20:14 +0530 Subject: [PATCH 17/19] updated the doctest of remove_loops() --- src/sage/graphs/matching_covered_graph.py | 24 ----------------------- 1 file changed, 24 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 03cb4915d4f..6d4bb1ff439 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -2352,22 +2352,10 @@ def remove_loops(self, vertices=None): sage: G = MatchingCoveredGraph(W) sage: G Matching covered wheel graph: graph on 6 vertices - sage: G.has_loops() - False - sage: G.allows_loops() - False sage: G.add_edge(0, 0) Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs - sage: G.loops() - [] - sage: G.loop_edges() - [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 sage: G.remove_loops() sage: G.edges(sort=True) [(0, 1, None), (0, 2, None), (0, 3, None), (0, 4, None), @@ -2389,18 +2377,6 @@ def remove_loops(self, vertices=None): ValueError: loops are not allowed in matching covered graphs sage: G.edges(sort=False) [(0, 1, None), (0, 1, 'label')] - sage: G.allows_loops() - False - sage: G.has_loops() - False - sage: G.loops() - [] - sage: G.loop_edges() - [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 sage: G.remove_loops(vertices=[0, 1]) sage: G.edges(sort=False) [(0, 1, None), (0, 1, 'label')] From 6fe61f8382e355e93c9e38832e21c07c44d4496e Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 19:21:51 +0530 Subject: [PATCH 18/19] updated the doctest of has_loops() --- src/sage/graphs/matching_covered_graph.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 6d4bb1ff439..86bb5148378 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1967,14 +1967,6 @@ def has_loops(self): Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs - sage: G.loops() - [] - sage: G.loop_edges() - [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 A matching covered graph may support multiple edges, still no loops are allowed:: @@ -1995,15 +1987,11 @@ def has_loops(self): False sage: G.has_loops() False - sage: G.loops() - [] - sage: G.loop_edges() - [] - sage: G.loop_vertices() - [] - sage: G.number_of_loops() - 0 - + sage: G.allow_loops(True) + Traceback (most recent call last): + ... + ValueError: loops are not allowed in matching covered graphs + .. SEEALSO:: :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`, From d8beed1bb7aa8860c2e9e009e31c0d428f5fd350 Mon Sep 17 00:00:00 2001 From: janmenjayap Date: Sun, 10 Nov 2024 20:52:49 +0530 Subject: [PATCH 19/19] removed whitespaces from a blankline --- src/sage/graphs/matching_covered_graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sage/graphs/matching_covered_graph.py b/src/sage/graphs/matching_covered_graph.py index 86bb5148378..2732e0b46a5 100644 --- a/src/sage/graphs/matching_covered_graph.py +++ b/src/sage/graphs/matching_covered_graph.py @@ -1991,7 +1991,7 @@ def has_loops(self): Traceback (most recent call last): ... ValueError: loops are not allowed in matching covered graphs - + .. SEEALSO:: :meth:`~sage.graphs.matching_covered_graph.MatchingCoveredGraph.allow_loops`,