Skip to content

Commit fa763b1

Browse files
committed
fix: fix model parsing error
1 parent 451becb commit fa763b1

File tree

4 files changed

+21
-22
lines changed

4 files changed

+21
-22
lines changed

src/systems/callbacks.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ function make_affect(affect::Vector{Equation}; discrete_parameters = Any[],
263263
@warn "No independent variable specified. Defaulting to t_nounits."
264264
end
265265

266+
discrete_parameters isa AbstractVector || (discrete_parameters = [discrete_parameters])
266267
for p in discrete_parameters
267268
occursin(unwrap(iv), unwrap(p)) ||
268269
error("Non-time dependent parameter $p passed in as a discrete. Must be declared as @parameters $p(t).")

src/systems/diffeqs/odesystem.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,6 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
313313

314314
alg_eqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
315315
deqs)
316-
@show continuous_events
317-
@show discrete_events
318316
cont_callbacks = to_cb_vector(SymbolicContinuousCallback.(
319317
continuous_events; alg_eqs, iv))
320318
disc_callbacks = to_cb_vector(SymbolicDiscreteCallback.(discrete_events; alg_eqs, iv))

src/systems/jumps/jumpsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ function JumpSystem(eqs, iv, unknowns, ps;
216216
JumpSystem{typeof(ap)}(Threads.atomic_add!(SYSTEM_COUNT, UInt(1)),
217217
ap, iv′, us′, ps′, var_to_name, observed, name, description, systems,
218218
defaults, guesses, initializesystem, initialization_eqs, connector_type,
219-
cont_callbacks, disc_callbacks,
219+
disc_callbacks,
220220
parameter_dependencies, metadata, gui_metadata, checks = checks)
221221
end
222222

src/systems/model_parsing.jl

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -127,24 +127,24 @@ function _model_macro(mod, name, expr, isconnector)
127127
isconnector && push!(exprs.args,
128128
:($Setfield.@set!(var"#___sys___".connector_type=$connector_type(var"#___sys___"))))
129129

130-
push!(exprs.args, :(alg_eqs = $(alg_equations)(var"#___sys___")))
131-
d_evt_exs = map(d_evts) do evt
132-
length(evt.args) == 2 ?
133-
:($SymbolicDiscreteCallback($(evt.args[1]); iv = $iv, alg_eqs, $(evt.args[2]...))) :
134-
:($SymbolicDiscreteCallback($(evt.args[1]); iv = $iv, alg_eqs))
135-
end
136-
137-
!isempty(d_evts) && push!(exprs.args,
138-
:($Setfield.@set!(var"#___sys___".discrete_events=[$(d_evt_exs...)])))
130+
if !isempty(d_evts) || !isempty(c_evts)
131+
push!(exprs.args, :(alg_eqs = $(alg_equations)(var"#___sys___")))
132+
!isempty(d_evts) && begin
133+
d_exprs = [:($(SymbolicDiscreteCallback)(
134+
$(evt.args[1]); iv = $iv, alg_eqs, $(evt.args[2])...))
135+
for evt in d_evts]
136+
push!(exprs.args,
137+
:($Setfield.@set!(var"#___sys___".discrete_events=[$(d_exprs...)])))
138+
end
139139

140-
c_evt_exs = map(c_evts) do evt
141-
length(evt.args) == 2 ?
142-
:($SymbolicContinuousCallback(
143-
$(evt.args[1]); iv = $iv, alg_eqs, $(evt.args[2]...))) :
144-
:($SymbolicContinuousCallback($(evt.args[1]); iv = $iv, alg_eqs))
140+
!isempty(c_evts) && begin
141+
c_exprs = [:($(SymbolicContinuousCallback)(
142+
$(evt.args[1]); iv = $iv, alg_eqs, $(evt.args[2])...))
143+
for evt in c_evts]
144+
push!(exprs.args,
145+
:($Setfield.@set!(var"#___sys___".continuous_events=[$(c_exprs...)])))
146+
end
145147
end
146-
!isempty(c_evts) && push!(exprs.args,
147-
:($Setfield.@set!(var"#___sys___".continuous_events=[$(c_evt_exs...)])))
148148

149149
f = if length(where_types) == 0
150150
:($(Symbol(:__, name, :__))(; name, $(kwargs...)) = $exprs)
@@ -1135,7 +1135,7 @@ function parse_continuous_events!(c_evts, dict, body)
11351135
Base.remove_linenums!(body)
11361136
for line in body.args
11371137
if length(line.args) == 3 && line.args[1] == :(=>)
1138-
push!(c_evts, :(($line,)))
1138+
push!(c_evts, :(($line, ())))
11391139
elseif length(line.args) == 2
11401140
event = line.args[1]
11411141
kwargs = parse_event_kwargs(line.args[2])
@@ -1152,7 +1152,7 @@ function parse_discrete_events!(d_evts, dict, body)
11521152
Base.remove_linenums!(body)
11531153
for line in body.args
11541154
if length(line.args) == 3 && line.args[1] == :(=>)
1155-
push!(d_evts, :(($line,)))
1155+
push!(d_evts, :(($line, ())))
11561156
elseif length(line.args) == 2
11571157
event = line.args[1]
11581158
kwargs = parse_event_kwargs(line.args[2])
@@ -1169,7 +1169,7 @@ function parse_event_kwargs(disc_expr)
11691169
for arg in disc_expr.args
11701170
(arg.head != :(=)) && error("Malformed event kwarg $arg.")
11711171
(arg.args[1] isa Symbol) || error("Invalid keyword argument name $(arg.args[1]).")
1172-
push!(kwargs.args, arg)
1172+
push!(kwargs.args, :($(QuoteNode(arg.args[1])) => $(arg.args[2])))
11731173
end
11741174
kwargs
11751175
end

0 commit comments

Comments
 (0)