File tree Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -42,3 +42,21 @@ function debug_sub(ex, funcs; kw...)
4242 f in funcs ? logged_fun (f, args... ; kw... ) :
4343 maketerm (typeof (ex), f, args, metadata (ex))
4444end
45+
46+ function _debug_assertion (expr:: Bool , message:: String , log:: Bool )
47+ expr && return 0.0
48+ log && @error message
49+ return NaN
50+ end
51+
52+ @register_symbolic _debug_assertion (expr:: Bool , message:: String , log:: Bool )
53+
54+ const ASSERTION_LOG_VARIABLE = only (@parameters __log_assertions_ₘₜₖ:: Bool = false )
55+
56+ function get_assertions_expr (assertions:: Dict{BasicSymbolic, String} )
57+ term = 0
58+ for (k, v) in assertions
59+ term += _debug_assertion (k, " Assertion $k failed:\n $v " , ASSERTION_LOG_VARIABLE)
60+ end
61+ return term
62+ end
Original file line number Diff line number Diff line change @@ -2327,7 +2327,15 @@ function debug_system(
23272327 error (" debug_system(sys) only works on systems with no sub-systems! Consider flattening it with flatten(sys) or structural_simplify(sys) first." )
23282328 end
23292329 if has_eqs (sys)
2330- @set! sys. eqs = debug_sub .(equations (sys), Ref (functions); kw... )
2330+ eqs = debug_sub .(equations (sys), Ref (functions); kw... )
2331+ expr = get_assertions_expr (assertions (sys))
2332+ eqs[end ] = eqs[end ]. lhs ~ eqs[end ]. rhs + expr
2333+ @set! sys. eqs = eqs
2334+ @set! sys. ps = unique! ([get_ps (sys); ASSERTION_LOG_VARIABLE])
2335+ @set! sys. defaults = merge (get_defaults (sys), Dict (ASSERTION_LOG_VARIABLE => true ))
2336+ if iscomplete (sys)
2337+ sys = complete (sys; split = is_split (sys))
2338+ end
23312339 end
23322340 if has_observed (sys)
23332341 @set! sys. observed = debug_sub .(observed (sys), Ref (functions); kw... )
You can’t perform that action at this time.
0 commit comments