Skip to content

Commit 8f8ccb8

Browse files
author
Matthias Koeppe
committed
Merge branch 'networkx-3.1' into networkx-python-igraph
2 parents 5b2ca01 + e599562 commit 8f8ccb8

File tree

1 file changed

+47
-7
lines changed

1 file changed

+47
-7
lines changed

src/sage/graphs/graph.py

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6799,13 +6799,26 @@ def cliques_number_of(self, vertices=None, cliques=None):
67996799
{(0, 0): 2, (0, 1): 3, (0, 2): 2, (1, 0): 2, (1, 1): 3, (1, 2): 2}
68006800
sage: F.cliques_number_of(vertices=[(0, 1), (1, 2)])
68016801
{(0, 1): 3, (1, 2): 2}
6802+
sage: F.cliques_number_of(vertices=(0, 1))
6803+
3
68026804
sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
68036805
sage: G.show(figsize=[2,2])
68046806
sage: G.cliques_number_of()
68056807
{0: 2, 1: 2, 2: 1, 3: 1}
68066808
"""
6807-
import networkx
6808-
return networkx.number_of_cliques(self.networkx_graph(), vertices, cliques)
6809+
if cliques is None:
6810+
cliques = self.cliques_maximal()
6811+
6812+
if vertices in self: # single vertex
6813+
return sum(1 for c in cliques if vertices in c)
6814+
6815+
from collections import Counter
6816+
count = Counter()
6817+
6818+
for c in cliques:
6819+
count.update(c)
6820+
6821+
return {v : count[v] for v in vertices or self}
68096822

68106823
@doc_index("Clique-related methods")
68116824
def cliques_get_max_clique_graph(self):
@@ -7506,17 +7519,32 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
75067519
75077520
sage: C = Graph('DJ{')
75087521
sage: C.cliques_containing_vertex()
7509-
{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]]}
7522+
{0: [[0, 4]],
7523+
1: [[1, 2, 3, 4]],
7524+
2: [[1, 2, 3, 4]],
7525+
3: [[1, 2, 3, 4]],
7526+
4: [[0, 4], [1, 2, 3, 4]]}
7527+
sage: C.cliques_containing_vertex(4)
7528+
[[0, 4], [1, 2, 3, 4]]
7529+
sage: C.cliques_containing_vertex([0, 1])
7530+
{0: [[0, 4]], 1: [[1, 2, 3, 4]]}
75107531
sage: E = C.cliques_maximal()
75117532
sage: E
75127533
[[0, 4], [1, 2, 3, 4]]
75137534
sage: C.cliques_containing_vertex(cliques=E)
7514-
{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]]}
7535+
{0: [[0, 4]],
7536+
1: [[1, 2, 3, 4]],
7537+
2: [[1, 2, 3, 4]],
7538+
3: [[1, 2, 3, 4]],
7539+
4: [[0, 4], [1, 2, 3, 4]]}
75157540
75167541
sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
75177542
sage: G.show(figsize=[2,2])
75187543
sage: G.cliques_containing_vertex()
7519-
{0: [[0, 1, 2], [0, 1, 3]], 1: [[0, 1, 2], [0, 1, 3]], 2: [[0, 1, 2]], 3: [[0, 1, 3]]}
7544+
{0: [[0, 1, 2], [0, 1, 3]],
7545+
1: [[0, 1, 2], [0, 1, 3]],
7546+
2: [[0, 1, 2]],
7547+
3: [[0, 1, 3]]}
75207548
75217549
Since each clique of a 2 dimensional grid corresponds to an edge, the
75227550
number of cliques in which a vertex is involved equals its degree::
@@ -7531,8 +7559,20 @@ def cliques_containing_vertex(self, vertices=None, cliques=None):
75317559
sage: sorted(sorted(x for x in L) for L in d[(0, 1)])
75327560
[[(0, 0), (0, 1)], [(0, 1), (0, 2)], [(0, 1), (1, 1)]]
75337561
"""
7534-
import networkx
7535-
return networkx.cliques_containing_node(self.networkx_graph(), vertices, cliques)
7562+
if cliques is None:
7563+
cliques = self.cliques_maximal()
7564+
7565+
if vertices in self: # single vertex
7566+
return [c for c in cliques if vertices in c]
7567+
7568+
from collections import defaultdict
7569+
d = defaultdict(list)
7570+
7571+
for c in cliques:
7572+
for v in c:
7573+
d[v].append(c)
7574+
7575+
return {v : d[v] for v in vertices or self}
75367576

75377577
@doc_index("Clique-related methods")
75387578
def clique_complex(self):

0 commit comments

Comments
 (0)