Skip to content

Commit c1f0b6c

Browse files
committed
Support networkx 3.1
The functions `number_of_cliques()` and `cliques_containing_node()` are deprecated in networkx 3.1. This commit reimplements both functions based on method `cliques_maximal()`.
1 parent f3acd42 commit c1f0b6c

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

src/sage/graphs/graph.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6786,13 +6786,21 @@ def cliques_number_of(self, vertices=None, cliques=None):
67866786
{(0, 0): 2, (0, 1): 3, (0, 2): 2, (1, 0): 2, (1, 1): 3, (1, 2): 2}
67876787
sage: F.cliques_number_of(vertices=[(0, 1), (1, 2)])
67886788
{(0, 1): 3, (1, 2): 2}
6789+
sage: F.cliques_number_of(vertices=(0, 1))
6790+
3
67896791
sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
67906792
sage: G.show(figsize=[2,2])
67916793
sage: G.cliques_number_of()
67926794
{0: 2, 1: 2, 2: 1, 3: 1}
67936795
"""
6794-
import networkx
6795-
return networkx.number_of_cliques(self.networkx_graph(), vertices, cliques)
6796+
if cliques is None:
6797+
cliques = self.cliques_maximal()
6798+
6799+
if vertices in self: # single vertex
6800+
return sum(1 for c in cliques if vertices in c)
6801+
else:
6802+
return { v : sum(1 for c in cliques if v in c)
6803+
for v in vertices or self }
67966804

67976805
@doc_index("Clique-related methods")
67986806
def cliques_get_max_clique_graph(self):
@@ -7493,17 +7501,32 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
74937501
74947502
sage: C = Graph('DJ{')
74957503
sage: C.cliques_containing_vertex()
7496-
{0: [[4, 0]], 1: [[4, 1, 2, 3]], 2: [[4, 1, 2, 3]], 3: [[4, 1, 2, 3]], 4: [[4, 0], [4, 1, 2, 3]]}
7504+
{0: [[0, 4]],
7505+
1: [[1, 2, 3, 4]],
7506+
2: [[1, 2, 3, 4]],
7507+
3: [[1, 2, 3, 4]],
7508+
4: [[0, 4], [1, 2, 3, 4]]}
7509+
sage: C.cliques_containing_vertex(4)
7510+
[[0, 4], [1, 2, 3, 4]]
7511+
sage: C.cliques_containing_vertex([0, 1])
7512+
{0: [[0, 4]], 1: [[1, 2, 3, 4]]}
74977513
sage: E = C.cliques_maximal()
74987514
sage: E
74997515
[[0, 4], [1, 2, 3, 4]]
75007516
sage: C.cliques_containing_vertex(cliques=E)
7501-
{0: [[0, 4]], 1: [[1, 2, 3, 4]], 2: [[1, 2, 3, 4]], 3: [[1, 2, 3, 4]], 4: [[0, 4], [1, 2, 3, 4]]}
7517+
{0: [[0, 4]],
7518+
1: [[1, 2, 3, 4]],
7519+
2: [[1, 2, 3, 4]],
7520+
3: [[1, 2, 3, 4]],
7521+
4: [[0, 4], [1, 2, 3, 4]]}
75027522
75037523
sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
75047524
sage: G.show(figsize=[2,2])
75057525
sage: G.cliques_containing_vertex()
7506-
{0: [[0, 1, 2], [0, 1, 3]], 1: [[0, 1, 2], [0, 1, 3]], 2: [[0, 1, 2]], 3: [[0, 1, 3]]}
7526+
{0: [[0, 1, 2], [0, 1, 3]],
7527+
1: [[0, 1, 2], [0, 1, 3]],
7528+
2: [[0, 1, 2]],
7529+
3: [[0, 1, 3]]}
75077530
75087531
Since each clique of a 2 dimensional grid corresponds to an edge, the
75097532
number of cliques in which a vertex is involved equals its degree::
@@ -7518,8 +7541,14 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
75187541
sage: sorted(sorted(x for x in L) for L in d[(0, 1)])
75197542
[[(0, 0), (0, 1)], [(0, 1), (0, 2)], [(0, 1), (1, 1)]]
75207543
"""
7521-
import networkx
7522-
return networkx.cliques_containing_node(self.networkx_graph(), vertices, cliques)
7544+
if cliques is None:
7545+
cliques = self.cliques_maximal()
7546+
7547+
if vertices in self: # single vertex
7548+
return [c for c in cliques if vertices in c]
7549+
else:
7550+
return { v : [c for c in cliques if v in c]
7551+
for v in vertices or self }
75237552

75247553
@doc_index("Clique-related methods")
75257554
def clique_complex(self):

0 commit comments

Comments
 (0)