@@ -137,6 +137,11 @@ struct ODESystem <: AbstractODESystem
137
137
"""
138
138
parameter_dependencies:: Vector{Equation}
139
139
"""
140
+ Mapping of conditions which should be true throughout the solve to corresponding error
141
+ messages. These will be added to the equations when calling `debug_system`.
142
+ """
143
+ assertions:: Dict{BasicSymbolic, String}
144
+ """
140
145
Metadata for the system, to be used by downstream packages.
141
146
"""
142
147
metadata:: Any
@@ -190,7 +195,7 @@ struct ODESystem <: AbstractODESystem
190
195
jac, ctrl_jac, Wfact, Wfact_t, name, description, systems, defaults, guesses,
191
196
torn_matching, initializesystem, initialization_eqs, schedule,
192
197
connector_type, preface, cevents,
193
- devents, parameter_dependencies,
198
+ devents, parameter_dependencies, assertions = Dict {BasicSymbolic, String} (),
194
199
metadata = nothing , gui_metadata = nothing , is_dde = false ,
195
200
tstops = [], tearing_state = nothing ,
196
201
substitutions = nothing , complete = false , index_cache = nothing ,
@@ -210,7 +215,7 @@ struct ODESystem <: AbstractODESystem
210
215
new (tag, deqs, iv, dvs, ps, tspan, var_to_name, ctrls, observed, tgrad, jac,
211
216
ctrl_jac, Wfact, Wfact_t, name, description, systems, defaults, guesses, torn_matching,
212
217
initializesystem, initialization_eqs, schedule, connector_type, preface,
213
- cevents, devents, parameter_dependencies, metadata,
218
+ cevents, devents, parameter_dependencies, assertions, metadata,
214
219
gui_metadata, is_dde, tstops, tearing_state, substitutions, complete, index_cache,
215
220
discrete_subsystems, solved_unknowns, split_idxs, parent)
216
221
end
@@ -235,6 +240,7 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
235
240
continuous_events = nothing ,
236
241
discrete_events = nothing ,
237
242
parameter_dependencies = Equation[],
243
+ assertions = Dict (),
238
244
checks = true ,
239
245
metadata = nothing ,
240
246
gui_metadata = nothing ,
@@ -286,12 +292,13 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
286
292
if is_dde === nothing
287
293
is_dde = _check_if_dde (deqs, iv′, systems)
288
294
end
295
+ assertions = Dict {BasicSymbolic, Any} (unwrap (k) => v for (k, v) in assertions)
289
296
ODESystem (Threads. atomic_add! (SYSTEM_COUNT, UInt (1 )),
290
297
deqs, iv′, dvs′, ps′, tspan, var_to_name, ctrl′, observed, tgrad, jac,
291
298
ctrl_jac, Wfact, Wfact_t, name, description, systems,
292
299
defaults, guesses, nothing , initializesystem,
293
300
initialization_eqs, schedule, connector_type, preface, cont_callbacks,
294
- disc_callbacks, parameter_dependencies,
301
+ disc_callbacks, parameter_dependencies, assertions,
295
302
metadata, gui_metadata, is_dde, tstops, checks = checks)
296
303
end
297
304
@@ -364,6 +371,7 @@ function flatten(sys::ODESystem, noeqs = false)
364
371
name = nameof (sys),
365
372
description = description (sys),
366
373
initialization_eqs = initialization_equations (sys),
374
+ assertions = assertions (sys),
367
375
is_dde = is_dde (sys),
368
376
tstops = symbolic_tstops (sys),
369
377
metadata = get_metadata (sys),
0 commit comments