Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions lib/ModelingToolkitTearing/src/stateselection_interface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ end
function maybe_zeros_descend(ex::SymbolicT)
@match ex begin
BSImpl.AddMul(; variant) => return variant === SU.AddMulVariant.MUL
BSImpl.Term(; f) => return f === (^) || f === sin || f === adjoint || f === LinearAlgebra.dot || f === getindex
BSImpl.Term(; f) => return f === (^) || f === sin || f === adjoint || f === LinearAlgebra.dot || f === getindex || f === ifelse || f === max || f === min
_ => return false
end
end
Expand Down Expand Up @@ -140,17 +140,20 @@ function (qf::MaybeZeroQueryFn)(ex::SymbolicT)
MTKBase.split_indexed_var(ex)[1] in maybe_zeros && return true
pred = in(maybe_zeros) ∘ first ∘ MTKBase.split_indexed_var
@match ex begin
BSImpl.Const(; val) => SU._iszero(val)
BSImpl.AddMul(; dict, variant) && if variant === SU.AddMulVariant.MUL end => begin
return any(pred, keys(dict))
end
BSImpl.AddMul(; coeff, dict, variant) && if variant === SU.AddMulVariant.ADD end => begin
return SU._iszero(coeff) && all(Base.Fix1(query_maybe_zeros, qf), keys(dict))
end
BSImpl.Term(; f, args) => begin
if f === (^) || f === sin || f === adjoint || f === LinearAlgebra.dot
if f === (^) || f === sin || f === adjoint || f === LinearAlgebra.dot || f === max || f === min
return any(pred, args)
elseif f === getindex
return args[1] in maybe_zeros
elseif f === ifelse
return pred(args[2]) || pred(args[3])
end
return false
end
Expand Down
Loading