use crate::quality::GraphData;
use crate::{run_multiplex, MultiplexConfig, QualityType};
#[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 edge_tuples: Vec<(usize, usize, f64)> = edges
.chunks_exact(3)
.map(|c| (c[0] as usize, c[1] as usize, c[2]))
.collect();
let graph_data = match GraphData::from_edgelist(&edge_tuples, num_nodes) {
Ok(g) => g,
Err(_) => return (0..num_nodes).collect(),
};
let config = MultiplexConfig {
seed,
max_iterations: 100,
resolution: 1.0,
quality: QualityType::Modularity,
epsilon: 1e-10,
max_comm_size: 0,
layer_weights: vec![1.0],
};
match run_multiplex(&[graph_data], &config) {
Ok(result) => {
let membership: Vec<usize> = (0..num_nodes)
.map(|i| result.partition.community_of(i))
.collect();
membership
}
Err(_) => (0..num_nodes).collect(),
}
}