Skip to content

Commit fcaeef7

Browse files
committed
revert index cache
1 parent 86f05e6 commit fcaeef7

File tree

6 files changed

+37
-42
lines changed

6 files changed

+37
-42
lines changed

src/systems/callbacks.jl

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ const Affect = Union{AffectSystem, FunctionalAffect, ImperativeAffect}
160160

161161
"""
162162
SymbolicContinuousCallback(eqs::Vector{Equation}, affect = nothing, iv = nothing;
163-
affect_neg = affect, initialize = nothing, finalize = nothing, rootfind = SciMLBase.LeftRootFind, algeeqs = Equation[])
163+
affect_neg = affect, initialize = nothing, finalize = nothing, rootfind = SciMLBase.LeftRootFind, alg_eqs = Equation[])
164164
165165
A [`ContinuousCallback`](@ref SciMLBase.ContinuousCallback) specified symbolically. Takes a vector of equations `eq`
166166
as well as the positive-edge `affect` and negative-edge `affect_neg` that apply when *any* of `eq` are satisfied.
@@ -226,7 +226,7 @@ struct SymbolicContinuousCallback <: AbstractCallback
226226
rootfind = SciMLBase.LeftRootFind,
227227
reinitializealg = nothing,
228228
iv = nothing,
229-
algeeqs = Equation[])
229+
alg_eqs = Equation[])
230230
conditions = (conditions isa AbstractVector) ? conditions : [conditions]
231231

232232
if isnothing(reinitializealg)
@@ -236,29 +236,30 @@ struct SymbolicContinuousCallback <: AbstractCallback
236236
reinitializealg = SciMLBase.NoInit()
237237
end
238238

239-
new(conditions, make_affect(affect; iv, algeeqs, discrete_parameters),
240-
make_affect(affect_neg; iv, algeeqs, discrete_parameters),
241-
make_affect(initialize; iv, algeeqs, discrete_parameters), make_affect(
242-
finalize; iv, algeeqs, discrete_parameters),
239+
new(conditions, make_affect(affect; iv, alg_eqs, discrete_parameters),
240+
make_affect(affect_neg; iv, alg_eqs, discrete_parameters),
241+
make_affect(initialize; iv, alg_eqs, discrete_parameters), make_affect(
242+
finalize; iv, alg_eqs, discrete_parameters),
243243
rootfind, reinitializealg)
244244
end # Default affect to nothing
245245
end
246246

247-
function SymbolicContinuousCallback(p::Pair, args...; kwargs...)
248-
SymbolicContinuousCallback(p[1], p[2], args...; kwargs...)
247+
SymbolicContinuousCallback(p::Pair, args...; kwargs...) = SymbolicContinuousCallback(p[1], p[2], args...; kwargs...)
248+
249+
function SymbolicContinuousCallback(cb::SymbolicContinuousCallback, args...; iv = nothing, alg_eqs = Equation[], kwargs...)
250+
cb
249251
end
250-
SymbolicContinuousCallback(cb::SymbolicContinuousCallback, args...; kwargs...) = cb
251252

252253
make_affect(affect::Nothing; kwargs...) = nothing
253254
make_affect(affect::Tuple; kwargs...) = FunctionalAffect(affect...)
254255
make_affect(affect::NamedTuple; kwargs...) = FunctionalAffect(; affect...)
255256
make_affect(affect::Affect; kwargs...) = affect
256257

257258
function make_affect(affect::Vector{Equation}; discrete_parameters::AbstractVector = Any[],
258-
iv = nothing, algeeqs::Vector{Equation} = Equation[])
259+
iv = nothing, alg_eqs::Vector{Equation} = Equation[])
259260
isempty(affect) && return nothing
260-
isempty(algeeqs) &&
261-
@warn "No algebraic equations were found for the callback defined by $(join(affect, ", ")). If the system has no algebraic equations, this can be disregarded. Otherwise pass in `algeeqs` to the SymbolicContinuousCallback constructor."
261+
isempty(alg_eqs) &&
262+
@warn "No algebraic equations were found for the callback defined by $(join(affect, ", ")). If the system has no algebraic equations, this can be disregarded. Otherwise pass in `alg_eqs` to the SymbolicContinuousCallback constructor."
262263
if isnothing(iv)
263264
iv = t_nounits
264265
@warn "No independent variable specified. Defaulting to t_nounits."
@@ -280,7 +281,7 @@ function make_affect(affect::Vector{Equation}; discrete_parameters::AbstractVect
280281
diffvs = collect_applied_operators(eq, Differential)
281282
union!(dvs, diffvs)
282283
end
283-
for eq in algeeqs
284+
for eq in alg_eqs
284285
collect_vars!(dvs, params, eq, iv)
285286
end
286287

@@ -294,10 +295,10 @@ function make_affect(affect::Vector{Equation}; discrete_parameters::AbstractVect
294295
rev_map = Dict(zip(discrete_parameters, discretes))
295296
subs = merge(rev_map, Dict(zip(dvs, _dvs)))
296297
affect = Symbolics.fast_substitute(affect, subs)
297-
algeeqs = Symbolics.fast_substitute(algeeqs, subs)
298+
alg_eqs = Symbolics.fast_substitute(alg_eqs, subs)
298299

299300
@named affectsys = ImplicitDiscreteSystem(
300-
vcat(affect, algeeqs), iv, collect(union(_dvs, discretes)),
301+
vcat(affect, alg_eqs), iv, collect(union(_dvs, discretes)),
301302
collect(union(pre_params, sys_params)))
302303
affectsys = structural_simplify(affectsys; fully_determined = false)
303304
# get accessed parameters p from Pre(p) in the callback parameters
@@ -322,7 +323,7 @@ end
322323
Generate continuous callbacks.
323324
"""
324325
function SymbolicContinuousCallbacks(events; discrete_parameters = Any[],
325-
algeeqs::Vector{Equation} = Equation[], iv = nothing)
326+
alg_eqs::Vector{Equation} = Equation[], iv = nothing)
326327
callbacks = SymbolicContinuousCallback[]
327328
isnothing(events) && return callbacks
328329

@@ -332,7 +333,7 @@ function SymbolicContinuousCallbacks(events; discrete_parameters = Any[],
332333
for event in events
333334
cond, affs = event isa Pair ? (event[1], event[2]) : (event, nothing)
334335
push!(callbacks,
335-
SymbolicContinuousCallback(cond, affs; iv, algeeqs, discrete_parameters))
336+
SymbolicContinuousCallback(cond, affs; iv, alg_eqs, discrete_parameters))
336337
end
337338
callbacks
338339
end
@@ -421,7 +422,7 @@ end
421422
# TODO: Iterative callbacks
422423
"""
423424
SymbolicDiscreteCallback(conditions::Vector{Equation}, affect = nothing, iv = nothing;
424-
initialize = nothing, finalize = nothing, algeeqs = Equation[])
425+
initialize = nothing, finalize = nothing, alg_eqs = Equation[])
425426
426427
A callback that triggers at the first timestep that the conditions are satisfied.
427428
@@ -432,7 +433,7 @@ The condition can be one of:
432433
433434
Arguments:
434435
- iv: The independent variable of the system. This must be specified if the independent variable appaers in one of the equations explicitly, as in x ~ t + 1.
435-
- algeeqs: Algebraic equations of the system that must be satisfied after the callback occurs.
436+
- alg_eqs: Algebraic equations of the system that must be satisfied after the callback occurs.
436437
"""
437438
struct SymbolicDiscreteCallback <: AbstractCallback
438439
conditions::Any
@@ -444,7 +445,7 @@ struct SymbolicDiscreteCallback <: AbstractCallback
444445
function SymbolicDiscreteCallback(
445446
condition, affect = nothing;
446447
initialize = nothing, finalize = nothing, iv = nothing,
447-
algeeqs = Equation[], discrete_parameters = Any[], reinitializealg = nothing)
448+
alg_eqs = Equation[], discrete_parameters = Any[], reinitializealg = nothing)
448449
c = is_timed_condition(condition) ? condition : value(scalarize(condition))
449450

450451
if isnothing(reinitializealg)
@@ -453,9 +454,9 @@ struct SymbolicDiscreteCallback <: AbstractCallback
453454
reinitializealg = SciMLBase.CheckInit() :
454455
reinitializealg = SciMLBase.NoInit()
455456
end
456-
new(c, make_affect(affect; iv, algeeqs, discrete_parameters),
457-
make_affect(initialize; iv, algeeqs, discrete_parameters),
458-
make_affect(finalize; iv, algeeqs, discrete_parameters), reinitializealg)
457+
new(c, make_affect(affect; iv, alg_eqs, discrete_parameters),
458+
make_affect(initialize; iv, alg_eqs, discrete_parameters),
459+
make_affect(finalize; iv, alg_eqs, discrete_parameters), reinitializealg)
459460
end # Default affect to nothing
460461
end
461462

@@ -468,7 +469,7 @@ SymbolicDiscreteCallback(cb::SymbolicDiscreteCallback, args...; kwargs...) = cb
468469
Generate discrete callbacks.
469470
"""
470471
function SymbolicDiscreteCallbacks(events; discrete_parameters::Vector = Any[],
471-
algeeqs::Vector{Equation} = Equation[], iv = nothing)
472+
alg_eqs::Vector{Equation} = Equation[], iv = nothing)
472473
callbacks = SymbolicDiscreteCallback[]
473474

474475
isnothing(events) && return callbacks
@@ -478,7 +479,7 @@ function SymbolicDiscreteCallbacks(events; discrete_parameters::Vector = Any[],
478479
for event in events
479480
cond, affs = event isa Pair ? (event[1], event[2]) : (event, nothing)
480481
push!(callbacks,
481-
SymbolicDiscreteCallback(cond, affs; iv, algeeqs, discrete_parameters))
482+
SymbolicDiscreteCallback(cond, affs; iv, alg_eqs, discrete_parameters))
482483
end
483484
callbacks
484485
end

src/systems/diffeqs/odesystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,10 +311,10 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
311311
throw(ArgumentError("System names must be unique."))
312312
end
313313

314-
algeeqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
314+
alg_eqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
315315
deqs)
316-
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; algeeqs, iv)
317-
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; algeeqs, iv)
316+
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; alg_eqs, iv)
317+
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; alg_eqs, iv)
318318

319319
if is_dde === nothing
320320
is_dde = _check_if_dde(deqs, iv′, systems)

src/systems/diffeqs/sdesystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,10 @@ function SDESystem(deqs::AbstractVector{<:Equation}, neqs::AbstractArray, iv, dv
268268
Wfact = RefValue(EMPTY_JAC)
269269
Wfact_t = RefValue(EMPTY_JAC)
270270

271-
algeeqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
271+
alg_eqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
272272
deqs)
273-
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; algeeqs, iv)
274-
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; algeeqs, iv)
273+
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; alg_eqs, iv)
274+
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; alg_eqs, iv)
275275
if is_dde === nothing
276276
is_dde = _check_if_dde(deqs, iv′, systems)
277277
end

src/systems/index_cache.jl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -345,13 +345,8 @@ function IndexCache(sys::AbstractSystem)
345345
vs = vars(eq.rhs; op = Nothing)
346346
timeseries = TimeseriesSetType()
347347
if is_time_dependent(sys)
348-
unknown_set = Set(unknowns(sys))
349348
for v in vs
350-
if in(v, unknown_set)
351-
empty!(timeseries)
352-
push!(timeseries, ContinuousTimeseries())
353-
break
354-
elseif (idx = get(disc_idxs, v, nothing)) !== nothing
349+
if (idx = get(disc_idxs, v, nothing)) !== nothing
355350
push!(timeseries, idx.clock_idx)
356351
elseif iscall(v) && operation(v) === getindex &&
357352
(idx = get(disc_idxs, arguments(v)[1], nothing)) !== nothing

test/accessor_functions.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,9 @@ let
152152
# as I stored the same single event in all systems). Don't check for non-toplevel cases as
153153
# technically not needed for these tests and name spacing the events is a mess.
154154
bot_cev = ModelingToolkit.SymbolicContinuousCallback(
155-
cevs[1], algeeqs = [O ~ (d + p_bot) * X_bot + Y])
155+
cevs[1], alg_eqs = [O ~ (d + p_bot) * X_bot + Y])
156156
mid_dev = ModelingToolkit.SymbolicDiscreteCallback(
157-
devs[1], algeeqs = [O ~ (d + p_mid1) * X_mid1 + Y])
157+
devs[1], alg_eqs = [O ~ (d + p_mid1) * X_mid1 + Y])
158158
@test all_sets_equal(
159159
continuous_events_toplevel.([sys_bot, sys_bot_comp, sys_bot_ss])...,
160160
[bot_cev])

test/symbolic_events.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,15 +1321,15 @@ end
13211321
@test (sol(5.0000001, idxs = x) - sol(4.999999, idxs = x), 0.1, rtol = 1e-4)
13221322

13231323
# Proper re-initialization after parameter change
1324-
eqs = [y ~ g^2 - x, D(x) ~ x]
1324+
eqs = [y ~ g^2, D(x) ~ x]
13251325
c_evt = SymbolicContinuousCallback(
13261326
[t ~ 5.0], [x ~ Pre(x) + 1, g ~ Pre(g) + 1], discrete_parameters = [g], iv = t)
13271327
@mtkbuild sys = ODESystem(eqs, t, continuous_events = c_evt)
13281328
prob = ODEProblem(sys, [x => 1.0], (0.0, 10.0), [g => 2])
13291329
sol = solve(prob, FBDF())
13301330
@test sol.ps[g] [2.0, 3.0]
13311331
@test (sol(5.00000001, idxs = x) - sol(4.9999999, idxs = x), 1; rtol = 1e-4)
1332-
@test (sol(5.00000001, idxs = y), 9 - sol(5.00000001, idxs = x), rtol = 1e-4)
1332+
@test (sol(5.00000001, idxs = y), 9, rtol = 1e-4)
13331333

13341334
# Parameters that don't appear in affects should not be mutated.
13351335
c_evt = [t ~ 5.0] => [x ~ Pre(x) + 1]
@@ -1338,4 +1338,3 @@ end
13381338
sol = solve(prob, FBDF())
13391339
@test prob.ps[g] == sol.ps[g]
13401340
end
1341-
# - explicit equation of t in a functional affect

0 commit comments

Comments
 (0)