File tree Expand file tree Collapse file tree 1 file changed +18
-1
lines changed
src/structural_transformation Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -184,6 +184,23 @@ function dummy_derivative_graph!(
184184 diff_to_eq = invview (eq_to_diff)
185185 diff_to_var = invview (var_to_diff)
186186 invgraph = invview (graph)
187+ extended_sp = let state_priority = state_priority, var_to_diff = var_to_diff,
188+ diff_to_var = diff_to_var
189+
190+ var -> begin
191+ min_p = max_p = 0.0
192+ while var_to_diff[var] != = nothing
193+ var = var_to_diff[var]
194+ end
195+ while true
196+ p = state_priority (var)
197+ max_p = max (max_p, p)
198+ min_p = min (min_p, p)
199+ (var = diff_to_var[var]) === nothing && break
200+ end
201+ min_p < 0 ? min_p : max_p
202+ end
203+ end
187204
188205 var_sccs = find_var_sccs (graph, var_eq_matching)
189206 eqcolor = falses (nsrcs (graph))
@@ -225,7 +242,7 @@ function dummy_derivative_graph!(
225242 iszero (nrows) && break
226243
227244 if state_priority != = nothing && isfirst
228- sort! (vars, by = state_priority )
245+ sort! (vars, by = extended_sp )
229246 end
230247 # TODO : making the algorithm more robust
231248 # 1. If the Jacobian is a integer matrix, use Bareiss to check
You can’t perform that action at this time.
0 commit comments