Skip to content

Commit 49da181

Browse files
committed
Ignore self-cycles in the condensation graph
1 parent 606acc3 commit 49da181

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/bipartite_graph.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,10 +589,10 @@ end
589589

590590

591591
Graphs.outneighbors(mcg::MatchedCondensationGraph, cc::Integer) =
592-
Iterators.flatten((mcg.scc_assignment[v′] for v′ in outneighbors(mcg.graph, v)) for v in mcg.sccs[cc])
592+
Iterators.flatten((mcg.scc_assignment[v′] for v′ in outneighbors(mcg.graph, v) if mcg.scc_assignment[v′] != cc) for v in mcg.sccs[cc])
593593

594594
Graphs.inneighbors(mcg::MatchedCondensationGraph, cc::Integer) =
595-
Iterators.flatten((mcg.scc_assignment[v′] for v′ in inneighbors(mcg.graph, v)) for v in mcg.sccs[cc])
595+
Iterators.flatten((mcg.scc_assignment[v′] for v′ in inneighbors(mcg.graph, v) if mcg.scc_assignment[v′] != cc) for v in mcg.sccs[cc])
596596

597597
"""
598598
struct InducedCondensationGraph

src/structural_transformation/codegen.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ function build_torn_function(
174174
state = TearingState(sys)
175175
fullvars = state.fullvars
176176
var_eq_matching, var_sccs = algebraic_variables_scc(state)
177-
toporder = reverse(topological_sort_by_dfs(MatchedCondensationGraph(
178-
DiCMOBiGraph{true}(complete(state.structure.graph), complete(var_eq_matching)), var_sccs)))
177+
condensed_graph = MatchedCondensationGraph(
178+
DiCMOBiGraph{true}(complete(state.structure.graph), complete(var_eq_matching)), var_sccs)
179+
toporder = topological_sort_by_dfs(condensed_graph)
179180
var_sccs = var_sccs[toporder]
180181

181182
states = map(i->fullvars[i], diffvars_range(state.structure))

0 commit comments

Comments
 (0)