@@ -411,6 +411,9 @@ function build_explicit_observed_function(sys, ts;
411411 ts = [ts]
412412 end
413413 ts = unwrap .(ts)
414+ if is_dde (sys)
415+ ts = map (x -> delay_to_function (sys, x), ts)
416+ end
414417
415418 vars = Set ()
416419 foreach (v -> vars! (vars, v; op), ts)
@@ -483,8 +486,12 @@ function build_explicit_observed_function(sys, ts;
483486 end
484487 ts = map (t -> substitute (t, subs), ts)
485488 obsexprs = []
489+
486490 for i in 1 : maxidx
487491 eq = obs[i]
492+ if is_dde (sys)
493+ eq = delay_to_function (sys, eq)
494+ end
488495 lhs = eq. lhs
489496 rhs = eq. rhs
490497 push! (obsexprs, lhs ← rhs)
@@ -505,12 +512,17 @@ function build_explicit_observed_function(sys, ts;
505512 ps = (DestructuredArgs (unwrap .(ps), inbounds = ! checkbounds),)
506513 end
507514 dvs = DestructuredArgs (unknowns (sys), inbounds = ! checkbounds)
515+ if is_dde (sys)
516+ dvs = (dvs, DDE_HISTORY_FUN)
517+ else
518+ dvs = (dvs,)
519+ end
508520 if inputs === nothing
509- args = param_only ? [ps... , ivs... ] : [dvs, ps... , ivs... ]
521+ args = param_only ? [ps... , ivs... ] : [dvs... , ps... , ivs... ]
510522 else
511523 inputs = unwrap .(inputs)
512524 ipts = DestructuredArgs (inputs, inbounds = ! checkbounds)
513- args = param_only ? [ipts, ps... , ivs... ] : [dvs, ipts, ps... , ivs... ]
525+ args = param_only ? [ipts, ps... , ivs... ] : [dvs... , ipts, ps... , ivs... ]
514526 end
515527 pre = get_postprocess_fbody (sys)
516528
@@ -546,6 +558,20 @@ function build_explicit_observed_function(sys, ts;
546558 end
547559end
548560
561+ function populate_delays (delays:: Set , obsexprs, histfn, sys, sym)
562+ _vars_util = vars (sym)
563+ for v in _vars_util
564+ v in delays && continue
565+ iscall (v) && issym (operation (v)) && (args = arguments (v); length (args) == 1 ) &&
566+ iscall (only (args)) || continue
567+
568+ idx = variable_index (sys, operation (v)(get_iv (sys)))
569+ idx === nothing && error (" Delay term $v is not an unknown in the system" )
570+ push! (delays, v)
571+ push! (obsexprs, v ← histfn (only (args))[idx])
572+ end
573+ end
574+
549575function _eq_unordered (a, b)
550576 length (a) === length (b) || return false
551577 n = length (a)
0 commit comments