pub fn dependency_edges(edges: &[EdgeInfo]) -> Vec<(&str, &str)>
Directed dependency edges as (from, to) pairs, with self-loops removed. Borrows from edges to avoid allocating new strings.
(from, to)
edges