@@ -17,10 +17,14 @@ function drop_powers(expr::Num, vars::Vector{Num}, deg::Int)
1717 Symbolics. @variables ϵ
1818 subs_expr = deepcopy (expr)
1919 rules = Dict ([var => ϵ * var for var in unique (vars)])
20- subs_expr = Symbolics. expand (substitute_all (subs_expr, rules))
20+ subs_expr = Symbolics. expand (substitute_all (subs_expr, rules; include_derivatives = false ))
2121 max_deg = max_power (subs_expr, ϵ)
2222 removal = Dict ([ϵ^ d => Num (0 ) for d in deg: max_deg])
23- res = substitute_all (substitute_all (subs_expr, removal), Dict (ϵ => Num (1 )))
23+ res = substitute_all (
24+ substitute_all (subs_expr, removal; include_derivatives= false ),
25+ Dict (ϵ => Num (1 ));
26+ include_derivatives= false ,
27+ )
2428 return Symbolics. expand (res)
2529end
2630
3034
3135# calls the above for various types of the first argument
3236function drop_powers (eq:: Equation , var:: Vector{Num} , deg:: Int )
33- return drop_powers (eq. lhs, var, deg) .~ drop_powers (eq. lhs , var, deg)
37+ return drop_powers (eq. lhs, var, deg) .~ drop_powers (eq. rhs , var, deg)
3438end
3539function drop_powers (eqs:: Vector{Equation} , var:: Vector{Num} , deg:: Int )
3640 return [
@@ -45,9 +49,12 @@ drop_powers(x, vars, deg::Int) = drop_powers(wrap(x), vars, deg)
4549function max_power (x:: Num , y:: Num )
4650 terms = get_all_terms (x)
4751 powers = power_of .(terms, y)
48- literal_powers = Int[
49- Int (SymbolicUtils. unwrap_const (p)) for p in powers if SymbolicUtils. is_literal_number (p)
50- ]
52+ literal_powers = Int[]
53+ for p in powers
54+ pv = SymbolicUtils. unwrap_const (p)
55+ pv isa Number || continue
56+ push! (literal_powers, Int (pv))
57+ end
5158 isempty (literal_powers) && return 0
5259 return maximum (literal_powers)
5360end
0 commit comments