@@ -108,6 +108,7 @@ function alias_elimination!(state::TearingState)
108
108
109
109
lineqs = BitSet (old_to_new[e] for e in mm. nzrows)
110
110
for (ieq, eq) in enumerate (eqs)
111
+ # TODO : fix this
111
112
ieq in lineqs && continue
112
113
eqs[ieq] = substitute (eq, subs)
113
114
end
428
429
function aag_bareiss! (graph, var_to_diff, mm_orig:: SparseMatrixCLIL , irreducibles = ())
429
430
mm = copy (mm_orig)
430
431
linear_equations = mm_orig. nzrows
432
+ is_linear_equations = falses (size (AsSubMatrix (mm_orig), 1 ))
433
+ for e in mm_orig. nzrows
434
+ is_linear_equations[e] = true
435
+ end
431
436
432
437
# If linear highest differentiated variables cannot be assigned to a pivot,
433
438
# then we can set it to zero. We use `rank1` to track this.
@@ -439,11 +444,14 @@ function aag_bareiss!(graph, var_to_diff, mm_orig::SparseMatrixCLIL, irreducible
439
444
# Bareiss'ed coefficients as Gaussian elimination is nullspace perserving
440
445
# and we are only working on linear homogeneous subsystem.
441
446
is_reducible = trues (length (var_to_diff))
442
- for v in irreducibles
443
- is_reducible[v] = false
447
+ # TODO : what's the correct criterion here?
448
+ is_linear_variables = isnothing .(var_to_diff) .& isnothing .(invview (var_to_diff))
449
+ for i in 𝑠vertices (graph)
450
+ is_linear_equations[i] && continue
451
+ for j in 𝑠neighbors (graph, i)
452
+ is_linear_variables[j] = false
453
+ end
444
454
end
445
- is_linear_variables = find_linear_variables (graph, linear_equations, var_to_diff,
446
- irreducibles)
447
455
solvable_variables = findall (is_linear_variables)
448
456
449
457
function do_bareiss! (M, Mold = nothing )
0 commit comments