Skip to content

Commit 86e3e5f

Browse files
committed
feat: Add cliques and independent vertices functions
1 parent ce6a921 commit 86e3e5f

9 files changed

Lines changed: 543 additions & 0 deletions

File tree

NAMESPACE

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ export(average_path_length)
3636
export(betweenness)
3737
export(bridges)
3838
export(canonical_permutation)
39+
export(clique_number)
40+
export(clique_size_hist)
41+
export(cliques)
3942
export(closeness)
4043
export(connected_components)
4144
export(constraint)
@@ -97,21 +100,28 @@ export(igraph_rng_seed)
97100
export(igraph_to)
98101
export(igraph_version)
99102
export(incident)
103+
export(independence_number)
104+
export(independent_vertex_sets)
100105
export(induced_subgraph)
101106
export(induced_subgraph_edges)
102107
export(is_acyclic)
103108
export(is_biconnected)
109+
export(is_clique)
110+
export(is_complete)
104111
export(is_connected)
105112
export(is_dag)
106113
export(is_directed)
107114
export(is_eulerian)
108115
export(is_igraph)
116+
export(is_independent_vertex_set)
109117
export(is_same_graph)
110118
export(is_simple)
111119
export(is_sink)
112120
export(is_source)
113121
export(isomorphic)
114122
export(k_regular_game)
123+
export(largest_cliques)
124+
export(largest_independent_vertex_sets)
115125
export(layout_circle)
116126
export(layout_drl)
117127
export(layout_fruchterman_reingold)
@@ -124,6 +134,10 @@ export(layout_reingold_tilford_circular)
124134
export(layout_star)
125135
export(local_efficiency)
126136
export(maxdegree)
137+
export(maximal_cliques)
138+
export(maximal_cliques_count)
139+
export(maximal_cliques_hist)
140+
export(maximal_independent_vertex_sets)
127141
export(neighborhood)
128142
export(neighborhood_size)
129143
export(neighbors)

R/cliques.R

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#' Cliques
2+
#'
3+
#' A graph is considered complete if all pairs of different vertices are adjacent.
4+
#' Cliques are fully connected subgraphs of a graph.
5+
#' @source <https://igraph.org/c/doc/igraph-Cliques.html#cliques>
6+
#' @inheritParams common_params
7+
#' @returns `is_complete()` and `is_clique()` return a logical value.
8+
#' @name cliques
9+
#' @rdname cliques
10+
#' @export
11+
is_complete = function(graph) {
12+
.Call(`_igraphlite_is_complete_`, graph)
13+
}
14+
15+
#' @param candidate The vertex set to test for being a clique.
16+
#' @rdname cliques
17+
#' @export
18+
is_clique = function(graph, candidate = integer(0L), directed = is_directed(graph)) {
19+
.Call(`_igraphlite_is_clique_`, graph, candidate, directed)
20+
}
21+
22+
#' @param min_size,max_size An integer specifying the minimum/maximum size of the
23+
#' sets to be returned. If negative or zero, no lower bound will be used.
24+
#' @param max_results At most this many sets will be recorded.
25+
#' If negative, no limit is applied.
26+
#' @rdname cliques
27+
#' @export
28+
cliques = function(graph, min_size = 0L, max_size = -1L, max_results = -1L) {
29+
.Call(`_igraphlite_cliques_`, graph, min_size, max_size, max_results)
30+
}
31+
32+
#' @rdname cliques
33+
#' @export
34+
clique_size_hist = function(graph, min_size = 0L, max_size = -1L) {
35+
.Call(`_igraphlite_clique_size_hist_`, graph, min_size, max_size) |> as.integer()
36+
}
37+
38+
#' @rdname cliques
39+
#' @export
40+
largest_cliques = function(graph) {
41+
.Call(`_igraphlite_largest_cliques_`, graph)
42+
}
43+
44+
#' @rdname cliques
45+
#' @export
46+
maximal_cliques = function(graph, min_size = 0L, max_size = -1L, max_results = -1L) {
47+
.Call(`_igraphlite_maximal_cliques_`, graph, min_size, max_size, max_results)
48+
}
49+
50+
#' @rdname cliques
51+
#' @export
52+
maximal_cliques_count = function(graph, min_size = 0L, max_size = -1L) {
53+
.Call(`_igraphlite_maximal_cliques_count_`, graph, min_size, max_size)
54+
}
55+
56+
#' @rdname cliques
57+
#' @export
58+
maximal_cliques_hist = function(graph, min_size = 0L, max_size = -1L) {
59+
.Call(`_igraphlite_maximal_cliques_hist_`, graph, min_size, max_size) |> as.integer()
60+
}
61+
62+
#' @rdname cliques
63+
#' @export
64+
clique_number = function(graph) {
65+
.Call(`_igraphlite_clique_number_`, graph)
66+
}
67+
68+
69+
#' Independent vertex sets
70+
#'
71+
#' A vertex set is considered independent if there are no edges between them.
72+
#' @source <https://igraph.org/c/doc/igraph-Cliques.html#independent-vertex-sets>
73+
#' @inheritParams common_params
74+
#' @inheritParams cliques
75+
#' @name independent
76+
#' @rdname independent
77+
#' @export
78+
is_independent_vertex_set = function(graph, candidate = integer(0L)) {
79+
.Call(`_igraphlite_is_independent_vertex_set_`, graph, candidate)
80+
}
81+
82+
#' @rdname independent
83+
#' @export
84+
independent_vertex_sets = function(graph, min_size = 0L, max_size = -1L, max_results = -1L) {
85+
.Call(`_igraphlite_independent_vertex_sets_`, graph, min_size, max_size, max_results)
86+
}
87+
88+
#' @rdname independent
89+
#' @export
90+
largest_independent_vertex_sets = function(graph) {
91+
.Call(`_igraphlite_largest_independent_vertex_sets_`, graph)
92+
}
93+
94+
#' @rdname independent
95+
#' @export
96+
maximal_independent_vertex_sets = function(graph, min_size = 0L, max_size = -1L, max_results = -1L) {
97+
.Call(`_igraphlite_maximal_independent_vertex_sets_`, graph, min_size, max_size, max_results)
98+
}
99+
100+
#' @rdname independent
101+
#' @export
102+
independence_number = function(graph) {
103+
.Call(`_igraphlite_independence_number_`, graph)
104+
}

R/cpp11.R

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,62 @@ convergence_degree_ <- function(graph) {
168168
.Call(`_igraphlite_convergence_degree_`, graph)
169169
}
170170

171+
is_complete_ <- function(graph) {
172+
.Call(`_igraphlite_is_complete_`, graph)
173+
}
174+
175+
is_clique_ <- function(graph, candidate, directed) {
176+
.Call(`_igraphlite_is_clique_`, graph, candidate, directed)
177+
}
178+
179+
cliques_ <- function(graph, min_size, max_size, max_results) {
180+
.Call(`_igraphlite_cliques_`, graph, min_size, max_size, max_results)
181+
}
182+
183+
clique_size_hist_ <- function(graph, min_size, max_size) {
184+
.Call(`_igraphlite_clique_size_hist_`, graph, min_size, max_size)
185+
}
186+
187+
largest_cliques_ <- function(graph) {
188+
.Call(`_igraphlite_largest_cliques_`, graph)
189+
}
190+
191+
maximal_cliques_ <- function(graph, min_size, max_size, max_results) {
192+
.Call(`_igraphlite_maximal_cliques_`, graph, min_size, max_size, max_results)
193+
}
194+
195+
maximal_cliques_count_ <- function(graph, min_size, max_size) {
196+
.Call(`_igraphlite_maximal_cliques_count_`, graph, min_size, max_size)
197+
}
198+
199+
maximal_cliques_hist_ <- function(graph, min_size, max_size) {
200+
.Call(`_igraphlite_maximal_cliques_hist_`, graph, min_size, max_size)
201+
}
202+
203+
clique_number_ <- function(graph) {
204+
.Call(`_igraphlite_clique_number_`, graph)
205+
}
206+
207+
is_independent_vertex_set_ <- function(graph, candidate) {
208+
.Call(`_igraphlite_is_independent_vertex_set_`, graph, candidate)
209+
}
210+
211+
independent_vertex_sets_ <- function(graph, min_size, max_size, max_results) {
212+
.Call(`_igraphlite_independent_vertex_sets_`, graph, min_size, max_size, max_results)
213+
}
214+
215+
largest_independent_vertex_sets_ <- function(graph) {
216+
.Call(`_igraphlite_largest_independent_vertex_sets_`, graph)
217+
}
218+
219+
maximal_independent_vertex_sets_ <- function(graph, min_size, max_size, max_results) {
220+
.Call(`_igraphlite_maximal_independent_vertex_sets_`, graph, min_size, max_size, max_results)
221+
}
222+
223+
independence_number_ <- function(graph) {
224+
.Call(`_igraphlite_independence_number_`, graph)
225+
}
226+
171227
connected_components_ <- function(graph, mode) {
172228
.Call(`_igraphlite_connected_components_`, graph, mode)
173229
}

_pkgdown.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ reference:
6464
- contents:
6565
- is_acyclic
6666
- is_eulerian
67+
- title: Cliques and independent vertex sets
68+
desc: https://igraph.org/c/doc/igraph-Cliques.html
69+
- contents:
70+
- cliques
71+
- independent
6772
- title: Graph isomorphism
6873
desc: https://igraph.org/c/doc/igraph-Isomorphism.html
6974
- contents:

man/cliques.Rd

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/independent.Rd

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)