def reduce_paths(G): """ Make graph into a directed acyclic graph (DAG). """ from jcvi.algorithms.lpsolve import min_feedback_arc_set while not nx.is_directed_acyclic_graph(G): edges = [] for a, b, w in G.edges_iter(data=True): w = w['weight'] edges.append((a, b, w)) mf, mf_score = min_feedback_arc_set(edges) for a, b, w in mf: G.remove_edge(a, b) assert nx.is_directed_acyclic_graph(G) G = transitive_reduction(G) return G