pub fn to_aprender_graph(graph: &DependencyGraph, is_directed: bool) -> AprenderGraph {
let mut edges = Vec::new();
for edge in graph.edge_references() {
let source = edge.source().0 as usize;
let target = edge.target().0 as usize;
edges.push((source, target));
}
AprenderGraph::from_edges(&edges, is_directed)
}
pub fn to_aprender_graph_undirected(graph: &UndirectedGraph) -> AprenderGraph {
let mut edges = Vec::new();
for edge in graph.edge_references() {
let source = edge.source().0 as usize;
let target = edge.target().0 as usize;
edges.push((source, target));
}
AprenderGraph::from_edges(&edges, false)
}
pub fn extract_edge_weight(edge_data: &EdgeData) -> f64 {
match edge_data {
EdgeData::Import { weight, .. } => *weight,
EdgeData::FunctionCall { count, .. } => *count as f64,
EdgeData::TypeDependency { strength, .. } => *strength,
EdgeData::DataFlow { confidence, .. } => *confidence,
EdgeData::Inheritance { depth } => {
if *depth == 0 {
1.0
} else {
1.0 / (*depth as f64)
}
}
}
}
pub fn create_node_mapping(graph: &DependencyGraph) -> Vec<usize> {
graph
.node_references()
.map(|(idx, _)| idx.0 as usize)
.collect()
}