Skip to content

Commit 3b87fff

Browse files
author
dd
committed
formatting
1 parent af15bcb commit 3b87fff

File tree

4 files changed

+110
-83
lines changed

4 files changed

+110
-83
lines changed

src/parameters.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ function isparameter(x)
88
if x isa Symbolic && Symbolics.getparent(x, false) !== false
99
p = Symbolics.getparent(x)
1010
isparameter(p) ||
11-
(hasmetadata(p, Symbolics.VariableSource) &&
12-
getmetadata(p, Symbolics.VariableSource)[1] == :parameters)
11+
(hasmetadata(p, Symbolics.VariableSource) &&
12+
getmetadata(p, Symbolics.VariableSource)[1] == :parameters)
1313
elseif istree(x) && operation(x) isa Symbolic
1414
getmetadata(x, MTKParameterCtx, false) ||
1515
isparameter(operation(x))

src/systems/callbacks.jl

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ get_continuous_events(sys::AbstractSystem) = Equation[]
33
get_continuous_events(sys::AbstractODESystem) = getfield(sys, :continuous_events)
44
has_continuous_events(sys::AbstractSystem) = isdefined(sys, :continuous_events)
55

6-
has_discrete_events(sys::AbstractSystem) = isdefined(sys, :discrete_events) && length(sys.discrete_events) > 0
6+
function has_discrete_events(sys::AbstractSystem)
7+
isdefined(sys, :discrete_events) && length(sys.discrete_events) > 0
8+
end
79
function get_discrete_events(sys::AbstractSystem)
810
has_discrete_events(sys) || return SymbolicDiscreteCallback[]
911
getfield(sys, :discrete_events)
@@ -15,8 +17,10 @@ struct FunctionalAffect
1517
sts_syms::Vector{Symbol}
1618
pars::Vector
1719
pars_syms::Vector{Symbol}
18-
ctx
19-
FunctionalAffect(f, sts, sts_syms, pars, pars_syms, ctx = nothing) = new(f,sts, sts_syms, pars, pars_syms, ctx)
20+
ctx::Any
21+
function FunctionalAffect(f, sts, sts_syms, pars, pars_syms, ctx = nothing)
22+
new(f, sts, sts_syms, pars, pars_syms, ctx)
23+
end
2024
end
2125

2226
function FunctionalAffect(f, sts, pars, ctx = nothing)
@@ -32,7 +36,7 @@ function FunctionalAffect(f, sts, pars, ctx = nothing)
3236
FunctionalAffect(f, vs, vs_syms, ps, ps_syms, ctx)
3337
end
3438

35-
FunctionalAffect(;f, sts, pars, ctx = nothing) = FunctionalAffect(f, sts, pars, ctx)
39+
FunctionalAffect(; f, sts, pars, ctx = nothing) = FunctionalAffect(f, sts, pars, ctx)
3640

3741
func(f::FunctionalAffect) = f.f
3842
context(a::FunctionalAffect) = a.ctx
@@ -42,9 +46,9 @@ states(a::FunctionalAffect) = a.sts
4246
states_syms(a::FunctionalAffect) = a.sts_syms
4347

4448
function Base.:(==)(a1::FunctionalAffect, a2::FunctionalAffect)
45-
isequal(a1.f, a2.f) && isequal(a1.sts, a2.sts) && isequal(a1.pars, a2.pars) &&
46-
isequal(a1.sts_syms, a2.sts_syms) && isequal(a1.pars_syms, a2.pars_syms) &&
47-
isequal(a1.ctx, a2.ctx)
49+
isequal(a1.f, a2.f) && isequal(a1.sts, a2.sts) && isequal(a1.pars, a2.pars) &&
50+
isequal(a1.sts_syms, a2.sts_syms) && isequal(a1.pars_syms, a2.pars_syms) &&
51+
isequal(a1.ctx, a2.ctx)
4852
end
4953

5054
function Base.hash(a::FunctionalAffect, s::UInt)
@@ -60,12 +64,12 @@ has_functional_affect(cb) = affects(cb) isa FunctionalAffect
6064

6165
namespace_affect(affect, s) = namespace_equation(affect, s)
6266
function namespace_affect(affect::FunctionalAffect, s)
63-
FunctionalAffect(func(affect),
64-
renamespace.((s,), states(affect)),
65-
states_syms(affect),
66-
renamespace.((s,), parameters(affect)),
67-
parameters_syms(affect),
68-
context(affect))
67+
FunctionalAffect(func(affect),
68+
renamespace.((s,), states(affect)),
69+
states_syms(affect),
70+
renamespace.((s,), parameters(affect)),
71+
parameters_syms(affect),
72+
context(affect))
6973
end
7074

7175
#################################### continuous events #####################################
@@ -80,7 +84,7 @@ struct SymbolicContinuousCallback
8084
end
8185
make_affect(affect) = affect
8286
make_affect(affect::Tuple) = FunctionalAffect(affect...)
83-
make_affect(affect::NamedTuple) = FunctionalAffect(;affect...)
87+
make_affect(affect::NamedTuple) = FunctionalAffect(; affect...)
8488

8589
function Base.:(==)(e1::SymbolicContinuousCallback, e2::SymbolicContinuousCallback)
8690
isequal(e1.eqs, e2.eqs) && isequal(e1.affect, e2.affect)
@@ -154,28 +158,32 @@ struct SymbolicDiscreteCallback
154158
# Δts::Vector{Real} - events trigger in this times (Preset)
155159
# condition::Vector{Equation} - event triggered when condition is true
156160
# TODO: Iterative
157-
condition
158-
affects
161+
condition::Any
162+
affects::Any
159163

160164
function SymbolicDiscreteCallback(condition, affects = NULL_AFFECT)
161165
c = scalarize_condition(condition)
162166
a = scalarize_affects(affects)
163-
new(c,a)
167+
new(c, a)
164168
end # Default affect to nothing
165169
end
166170

167171
is_timed_condition(cb) = false
168-
is_timed_condition(::R) where {R<:Real} = true
169-
is_timed_condition(::V) where {V<:AbstractVector} = eltype(V) <: Real
172+
is_timed_condition(::R) where {R <: Real} = true
173+
is_timed_condition(::V) where {V <: AbstractVector} = eltype(V) <: Real
170174
is_timed_condition(::Num) = false
171175
is_timed_condition(cb::SymbolicDiscreteCallback) = is_timed_condition(condition(cb))
172176

173-
scalarize_condition(condition) = is_timed_condition(condition) ? condition : value(scalarize(condition))
174-
namespace_condition(condition, s) = is_timed_condition(condition) ? condition : namespace_expr(condition, s)
177+
function scalarize_condition(condition)
178+
is_timed_condition(condition) ? condition : value(scalarize(condition))
179+
end
180+
function namespace_condition(condition, s)
181+
is_timed_condition(condition) ? condition : namespace_expr(condition, s)
182+
end
175183

176184
scalarize_affects(affects) = scalarize(affects)
177185
scalarize_affects(affects::Tuple) = FunctionalAffect(affects...)
178-
scalarize_affects(affects::NamedTuple) = FunctionalAffect(;affects...)
186+
scalarize_affects(affects::NamedTuple) = FunctionalAffect(; affects...)
179187
scalarize_affects(affects::FunctionalAffect) = affects
180188

181189
SymbolicDiscreteCallback(p::Pair) = SymbolicDiscreteCallback(p[1], p[2])
@@ -238,7 +246,7 @@ end
238246
################################# compilation functions ####################################
239247

240248
# handles ensuring that affect! functions work with integrator arguments
241-
function add_integrator_header(out=:u)
249+
function add_integrator_header(out = :u)
242250
integrator = gensym(:MTKIntegrator)
243251

244252
expr -> Func([DestructuredArgs(expr.args, integrator, inds = [:u, :p, :t])], [],
@@ -250,7 +258,7 @@ end
250258
function condition_header()
251259
integrator = gensym(:MTKIntegrator)
252260
expr -> Func([expr.args[1], expr.args[2],
253-
DestructuredArgs(expr.args[3:end], integrator, inds = [:p])], [], expr.body)
261+
DestructuredArgs(expr.args[3:end], integrator, inds = [:p])], [], expr.body)
254262
end
255263

256264
"""
@@ -265,7 +273,6 @@ Notes
265273
"""
266274
function compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps;
267275
expression = Val{true}, kwargs...)
268-
269276
u = map(x -> time_varying_as_func(value(x), sys), dvs)
270277
p = map(x -> time_varying_as_func(value(x), sys), ps)
271278
t = get_iv(sys)
@@ -416,10 +423,12 @@ function compile_user_affect(affect::FunctionalAffect, sys, dvs, ps; kwargs...)
416423

417424
# HACK: filter out eliminated symbols. Not clear this is the right thing to do
418425
# (MTK should keep these symbols)
419-
u = filter(x -> !isnothing(x[2]), collect(zip(states_syms(affect), v_inds))) |> NamedTuple
420-
p = filter(x -> !isnothing(x[2]), collect(zip(parameters_syms(affect), p_inds))) |> NamedTuple
426+
u = filter(x -> !isnothing(x[2]), collect(zip(states_syms(affect), v_inds))) |>
427+
NamedTuple
428+
p = filter(x -> !isnothing(x[2]), collect(zip(parameters_syms(affect), p_inds))) |>
429+
NamedTuple
421430

422-
let u=u, p=p, user_affect=func(affect), ctx=context(affect)
431+
let u = u, p = p, user_affect = func(affect), ctx = context(affect)
423432
function (integ)
424433
user_affect(integ, u, p, ctx)
425434
end
@@ -433,7 +442,7 @@ end
433442
function generate_timed_callback(cb, sys, dvs, ps; kwargs...)
434443
cond = condition(cb)
435444
as = compile_affect(affects(cb), sys, dvs, ps; expression = Val{false},
436-
kwargs...)
445+
kwargs...)
437446
if cond isa AbstractVector
438447
# Preset Time
439448
return PresetTimeCallback(cond, as)
@@ -447,15 +456,15 @@ function generate_discrete_callback(cb, sys, dvs, ps; kwargs...)
447456
if is_timed_condition(cb)
448457
return generate_timed_callback(cb, sys, dvs, ps, kwargs...)
449458
else
450-
c = compile_condition(cb, sys, dvs, ps; expression=Val{false}, kwargs...)
459+
c = compile_condition(cb, sys, dvs, ps; expression = Val{false}, kwargs...)
451460
as = compile_affect(affects(cb), sys, dvs, ps; expression = Val{false},
452-
kwargs...)
461+
kwargs...)
453462
return DiscreteCallback(c, as)
454463
end
455464
end
456465

457466
function generate_discrete_callbacks(sys::AbstractSystem, dvs = states(sys),
458-
ps = parameters(sys); kwargs...)
467+
ps = parameters(sys); kwargs...)
459468
has_discrete_events(sys) || return nothing
460469
symcbs = discrete_events(sys)
461470
isempty(symcbs) && return nothing

0 commit comments

Comments
 (0)