Skip to content

Commit af277cf

Browse files
YingboMashashi
andcommitted
More serious Symbol and makesym
x(t) becomes x⦗t⦘ @Derivative D~t D(x)(t) becomes x_t⦗t⦘ Co-authored-by: "Shashi Gowda" <[email protected]>
1 parent 70d876b commit af277cf

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,30 @@ function generate_jacobian(sys::AbstractODESystem, dvs = states(sys), ps = param
6464
conv = ODEToExpr(sys), kwargs...)
6565
end
6666

67-
function makesym(t::Term{T}) where {T}
68-
t.op isa Sym && return makesym(t.op)
69-
t.op isa Differential && return Sym{T}(Symbol(nameof(makesym(t.args[1])), , nameof(makesym(t.op.x))))
67+
Base.Symbol(t::Num) = Symbol(value(t))
68+
function Base.Symbol(t::Term)
69+
if t.op isa Sym
70+
op = nameof(t.op)
71+
args = t.args
72+
elseif t.op isa Differential
73+
if !(t.args[1].op isa Sym)
74+
@goto err
75+
end
76+
op = Symbol(nameof(t.args[1].op),
77+
,
78+
Symbol(t.op.x))
79+
args = t.args[1].args
80+
else
81+
@goto err
82+
end
83+
84+
return Symbol(op, "", join(args, ", "), "")
85+
@label err
7086
error("Cannot convert $t to a symbol")
7187
end
72-
makesym(t::Sym{T}) where {T} = t
73-
makesym(t::Sym{FnType{T, S}}) where {T,S} = Sym{S}(nameof(t))
88+
89+
makesym(t::Symbolic) = Sym{symtype(t)}(Symbol(t))
90+
makesym(t::Num) = makesym(value(t))
7491

7592
function generate_function(sys::AbstractODESystem, dvs = states(sys), ps = parameters(sys); kwargs...)
7693
# optimization

0 commit comments

Comments
 (0)