Skip to content

Commit 2b6317c

Browse files
committed
updates for Add Mul Pow
1 parent c35cea8 commit 2b6317c

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

src/ModelingToolkit.jl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ RuntimeGeneratedFunctions.init(@__MODULE__)
2323
using RecursiveArrayTools
2424

2525
import SymbolicUtils
26-
import SymbolicUtils: Term, Sym, to_symbolic, FnType, @rule, Rewriters, substitute, similarterm
26+
import SymbolicUtils: Term, Add, Mul, Pow, Sym, to_symbolic, FnType, @rule, Rewriters, substitute, similarterm
2727

2828
using LinearAlgebra: LU, BlasInt
2929

@@ -72,7 +72,17 @@ Base.show(io::IO, n::Num) = show_numwrap[] ? print(io, :(Num($(value(n))))) : Ba
7272

7373
Base.promote_rule(::Type{<:Number}, ::Type{<:Num}) = Num
7474
Base.promote_rule(::Type{<:Symbolic{<:Number}}, ::Type{<:Num}) = Num
75-
Base.getproperty(t::Term, f::Symbol) = f === :op ? operation(t) : f === :args ? arguments(t) : getfield(t, f)
75+
function Base.getproperty(t::Union{Add, Mul, Pow, Term}, f::Symbol)
76+
if f === :op
77+
Base.depwarn("`x.op` is deprecated, use `operation(x)` instead", :getproperty, force=true)
78+
operation(t)
79+
elseif f === :args
80+
Base.depwarn("`x.args` is deprecated, use `arguments(x)` instead", :getproperty, force=true)
81+
arguments(t)
82+
else
83+
getfield(t, f)
84+
end
85+
end
7686
<(s::Num, x) = value(s) <value(x)
7787
<(s, x::Num) = value(s) <value(x)
7888
<(s::Num, x::Num) = value(s) <value(x)

src/context_dsl.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import SymbolicUtils: symtype
1+
import SymbolicUtils: symtype, term
22
struct Parameter{T} end
33

44
isparameter(x) = false
55
isparameter(::Sym{<:Parameter}) = true
66
isparameter(::Sym{<:FnType{<:Any, <:Parameter}}) = true
77

8+
SymbolicUtils.@number_methods(Sym{Parameter{Real}},
9+
term(f, a),
10+
term(f, a, b), skipbasics)
11+
812
SymbolicUtils.symtype(s::Symbolic{Parameter{T}}) where T = T
913
SymbolicUtils.similarterm(t::Term{T}, f, args) where {T<:Parameter} = Term{T}(f, args)
1014

src/differentials.jl

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ $(SIGNATURES)
6161
6262
TODO
6363
"""
64-
function expand_derivatives(O::Term, simplify=true; occurances=nothing)
65-
if isa(O.op, Differential)
66-
@assert length(O.args) == 1
64+
function expand_derivatives(O::Symbolic, simplify=true; occurances=nothing)
65+
if istree(O) && isa(operation(O), Differential)
66+
@assert length(arguments(O)) == 1
6767
arg = expand_derivatives(O.args[1], false)
6868

6969
if occurances == nothing
@@ -75,21 +75,21 @@ function expand_derivatives(O::Term, simplify=true; occurances=nothing)
7575

7676
(D, o) = (O.op, arg)
7777

78-
if !isa(o, Term)
78+
if !istree(o)
7979
return O # Cannot expand
80-
elseif isa(o.op, Sym)
80+
elseif isa(operation(o), Sym)
8181
return O # Cannot expand
82-
elseif isa(o.op, Differential)
82+
elseif isa(operation(o), Differential)
8383
# The recursive expand_derivatives was not able to remove
8484
# a nested Differential. We can attempt to differentiate the
8585
# inner expression wrt to the outer iv. And leave the
8686
# unexpandable Differential outside.
8787
if isequal(o.op.x, D.x)
8888
return O
8989
else
90-
inner = expand_derivatives(D(o.args[1]), false)
90+
inner = expand_derivatives(D(arguments(o)[1]), false)
9191
# if the inner expression is not expandable either, return
92-
if inner isa Term && operation(inner) isa Differential
92+
if istree(inner) && operation(inner) isa Differential
9393
return O
9494
else
9595
return expand_derivatives(o.op(inner), simplify)
@@ -187,7 +187,9 @@ sin(x())
187187
```
188188
"""
189189
derivative_idx(O::Any, ::Any) = 0
190-
derivative_idx(O::Term, idx) = derivative(O.op, (O.args...,), Val(idx))
190+
function derivative_idx(O::Symbolic, idx)
191+
istree(O) ? derivative(operation(O), (arguments(O)...,), Val(idx)) : 0
192+
end
191193

192194
# Indicate that no derivative is defined.
193195
struct NoDeriv

0 commit comments

Comments
 (0)