use crate::graph::GraphDataBuilder;
use crate::leiden::{Leiden, LeidenConfig};
#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn leiden_from_edgelist(edges: &[f64], num_nodes: usize, seed: Option<u64>) -> Vec<usize> {
let mut builder = GraphDataBuilder::new(num_nodes);
for chunk in edges.chunks_exact(3) {
let u = chunk[0] as usize;
let v = chunk[1] as usize;
let w = chunk[2];
if builder.add_edge(u, v, w).is_err() {
return (0..num_nodes).collect();
}
}
let graph_data = match builder.build() {
Ok(g) => g,
Err(_) => return (0..num_nodes).collect(),
};
let config = LeidenConfig {
seed,
..Default::default()
};
match Leiden::new(config).run(&graph_data) {
Ok(result) => {
let membership: Vec<usize> = (0..num_nodes)
.map(|i| result.partition.community_of(i))
.collect();
membership
}
Err(_) => (0..num_nodes).collect(),
}
}