Skip to content

Commit 9fb2ba9

Browse files
Merge pull request #77 from SciML/revert-66-sy/interp_elim_var_access
Revert "Add symbol based indexing for interpolated solutions"
2 parents 0ddde22 + 1125961 commit 9fb2ba9

File tree

6 files changed

+63
-184
lines changed

6 files changed

+63
-184
lines changed

src/interpolation.jl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,7 @@ times t (sorted), with values u and derivatives ks
248248
end
249249
end
250250

251-
@inline function interpolant(Θ,id::AbstractDiffEqInterpolation,dt,y₀,y₁,dy₀,dy₁,idxs,::Type{Val{D}}) where D
252-
error("$(string(typeof(id))) for $(D)th order not implemented")
253-
end
251+
254252
##################### Hermite Interpolants
255253

256254
"""

src/solutions/ode_solutions.jl

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -15,53 +15,9 @@ struct ODESolution{T,N,uType,uType2,DType,tType,rateType,P,A,IType,DE} <: Abstra
1515
destats::DE
1616
retcode::Symbol
1717
end
18-
(sol::ODESolution)(t,deriv::Type=Val{0};idxs=nothing,continuity=:left) = sol(t,deriv,idxs,continuity)
18+
(sol::ODESolution)(t,deriv::Type=Val{0};idxs=nothing,continuity=:left) = sol.interp(t,idxs,deriv,sol.prob.p,continuity)
1919
(sol::ODESolution)(v,t,deriv::Type=Val{0};idxs=nothing,continuity=:left) = sol.interp(v,t,idxs,deriv,sol.prob.p,continuity)
2020

21-
function (sol::ODESolution)(t::Real,deriv,idxs::Nothing,continuity)
22-
sol.interp(t,idxs,deriv,sol.prob.p,continuity)
23-
end
24-
25-
function (sol::ODESolution)(t::AbstractVector{<:Real},deriv,idxs::Nothing,continuity)
26-
augment(sol.interp(t,idxs,deriv,sol.prob.p,continuity), sol)
27-
end
28-
29-
function (sol::ODESolution)(t::Real,deriv,idxs::Integer,continuity)
30-
sol.interp(t,idxs,deriv,sol.prob.p,continuity)
31-
end
32-
function (sol::ODESolution)(t::Real,deriv,idxs::AbstractVector{<:Integer},continuity)
33-
sol.interp(t,idxs,deriv,sol.prob.p,continuity)
34-
end
35-
function (sol::ODESolution)(t::AbstractVector{<:Real},deriv,idxs::Integer,continuity)
36-
sol.interp(t,idxs,deriv,sol.prob.p,continuity)
37-
end
38-
function (sol::ODESolution)(t::AbstractVector{<:Real},deriv,idxs::AbstractVector{<:Integer},continuity)
39-
sol.interp(t,idxs,deriv,sol.prob.p,continuity)
40-
end
41-
42-
function (sol::ODESolution)(t::Real,deriv,idxs,continuity)
43-
issymbollike(idxs) || error("Incorrect specification of `idxs`")
44-
augment(sol.interp([t],nothing,deriv,sol.prob.p,continuity), sol)[idxs][1]
45-
end
46-
47-
function (sol::ODESolution)(t::Real,deriv,idxs::AbstractVector,continuity)
48-
all(issymbollike.(idxs)) || error("Incorrect specification of `idxs`")
49-
interp_sol = augment(sol.interp([t],nothing,deriv,sol.prob.p,continuity), sol)
50-
[first(interp_sol[idx]) for idx in idxs]
51-
end
52-
53-
function (sol::ODESolution)(t::AbstractVector{<:Real},deriv,idxs,continuity)
54-
issymbollike(idxs) || error("Incorrect specification of `idxs`")
55-
interp_sol = augment(sol.interp(t,nothing,deriv,sol.prob.p,continuity), sol)
56-
DiffEqArray(interp_sol[idxs], t)
57-
end
58-
59-
function (sol::ODESolution)(t::AbstractVector{<:Real},deriv,idxs::AbstractVector,continuity)
60-
all(issymbollike.(idxs)) || error("Incorrect specification of `idxs`")
61-
interp_sol = augment(sol.interp(t,nothing,deriv,sol.prob.p,continuity), sol)
62-
DiffEqArray([[interp_sol[idx][i] for idx in idxs] for i in 1:length(t)], t)
63-
end
64-
6521
function build_solution(
6622
prob::Union{AbstractODEProblem,AbstractDDEProblem},
6723
alg,t,u;timeseries_errors=length(u)>2,

src/solutions/solution_interface.jl

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@ Base.size(A::AbstractNoTimeSolution) = size(A.u)
1414

1515
Base.show(io::IO, m::MIME"text/plain", A::AbstractNoTimeSolution) = (print(io,"u: ");show(io,m,A.u))
1616

17-
# For augmenting system information to enable symbol based indexing of interpolated solutions
18-
function augment(A::DiffEqArray, sol::AbstractODESolution)
19-
observed = has_observed(sol.prob.f) ? sol.prob.f.observed : DEFAULT_OBSERVED
20-
DiffEqArray(A.u, A.t, sol.prob.f.syms,getindepsym(sol),observed,sol.prob.p)
21-
end
22-
2317
# Symbol Handling
2418

2519
# For handling ambiguities
@@ -300,15 +294,13 @@ end
300294

301295
sym_to_index(sym,sol::SciMLSolution) = sym_to_index(sym,getsyms(sol))
302296
sym_to_index(sym,syms) = findfirst(isequal(Symbol(sym)),syms)
303-
function issymbollike(x)
304-
x isa Symbol ||
297+
issymbollike(x) = x isa Symbol ||
305298
x isa AllObserved ||
306-
Symbol(parameterless_type(typeof(x))) == :Operation || Symbol(parameterless_type(typeof(x))) == Symbol("Symbolics.Operation") ||
307-
Symbol(parameterless_type(typeof(x))) == :Variable || Symbol(parameterless_type(typeof(x))) == Symbol("Symbolics.Variable") ||
308-
Symbol(parameterless_type(typeof(x))) == :Sym || Symbol(parameterless_type(typeof(x))) == Symbol("Symbolics.Sym") ||
309-
Symbol(parameterless_type(typeof(x))) == :Num || Symbol(parameterless_type(typeof(x))) == Symbol("Symbolics.Num") ||
310-
Symbol(parameterless_type(typeof(x))) == :Term || Symbol(parameterless_type(typeof(x))) == Symbol("Symbolics.Term")
311-
end
299+
Symbol(parameterless_type(typeof(x))) == :Operation ||
300+
Symbol(parameterless_type(typeof(x))) == :Variable ||
301+
Symbol(parameterless_type(typeof(x))) == :Sym ||
302+
Symbol(parameterless_type(typeof(x))) == :Num ||
303+
Symbol(parameterless_type(typeof(x))) == :Term
312304

313305
function diffeq_to_arrays(sol,plot_analytic,denseplot,plotdensity,tspan,axis_safety,vars,int_vars,tscale,strs)
314306
if tspan === nothing

test/downstream/observables.jl

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using ModelingToolkit, OrdinaryDiffEq, Test
2+
3+
@parameters t σ ρ β
4+
@variables x(t) y(t) z(t)
5+
D = Differential(t)
6+
7+
eqs = [D(x) ~ σ*(y-x),
8+
D(y) ~ x*-z)-y,
9+
D(z) ~ x*y - β*z]
10+
11+
lorenz1 = ODESystem(eqs,name=:lorenz1)
12+
lorenz2 = ODESystem(eqs,name=:lorenz2)
13+
14+
@variables a, α
15+
@parameters γ
16+
connections = [0 ~ lorenz1.x + lorenz2.y + a*γ,
17+
α ~ 2lorenz1.x + a*γ]
18+
connected = structural_simplify(ODESystem(connections,t,[a,α],[γ],systems=[lorenz1,lorenz2]))
19+
20+
u0 = [lorenz1.x => 1.0,
21+
lorenz1.y => 0.0,
22+
lorenz1.z => 0.0,
23+
lorenz2.x => 0.0,
24+
lorenz2.y => 1.0,
25+
lorenz2.z => 0.0,
26+
a => 2.0]
27+
28+
p = [lorenz1.σ => 10.0,
29+
lorenz1.ρ => 28.0,
30+
lorenz1.β => 8/3,
31+
lorenz2.σ => 10.0,
32+
lorenz2.ρ => 28.0,
33+
lorenz2.β => 8/3,
34+
γ => 2.0]
35+
36+
tspan = (0.0,100.0)
37+
prob = ODEProblem(connected,u0,tspan,p)
38+
sol = solve(prob,Rodas4())
39+
40+
@test sol[lorenz1.x] isa Vector
41+
@test sol[lorenz1.x,2] isa Float64
42+
@test sol[lorenz1.x,:] isa Vector
43+
@test length(sol[lorenz1.x,1:5]) == 5
44+
@test sol[α] isa Vector
45+
@test sol[α,3] isa Float64
46+
@test length(sol[α,5:10]) == 6
47+
48+
#=
49+
using Plots
50+
plot(sol,vars=(lorenz2.x,lorenz2.z))
51+
plot(sol,vars=(α,lorenz2.z))
52+
plot(sol,vars=(lorenz2.x,α))
53+
plot(sol,vars=α)
54+
plot(sol,vars=(t,α))
55+
=#

test/downstream/symbol_indexing.jl

Lines changed: 0 additions & 121 deletions
This file was deleted.

test/runtests.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,5 @@ end
2727
if !is_APPVEYOR && GROUP == "Downstream"
2828
activate_downstream_env()
2929
@time @safetestset "Ensembles of Zero Length Solutions" begin include("downstream/ensemble_zero_length.jl") end
30-
@time @safetestset "Symbol and integer based indexing of interpolated solutions" begin include("downstream/symbol_indexing.jl") end
3130
end
3231
end

0 commit comments

Comments
 (0)