@@ -492,9 +492,16 @@ function build_explicit_observed_function(sys, ts;
492492        end 
493493    end 
494494    ts =  map (t ->  substitute (t, subs), ts)
495+     if  is_dde (sys)
496+         ts =  map (x ->  delay_to_function (sys, x), ts)
497+     end 
495498    obsexprs =  []
499+ 
496500    for  i in  1 : maxidx
497501        eq =  obs[i]
502+         if  is_dde (sys)
503+             eq =  delay_to_function (sys, eq)
504+         end 
498505        lhs =  eq. lhs
499506        rhs =  eq. rhs
500507        push! (obsexprs, lhs ←  rhs)
@@ -515,12 +522,17 @@ function build_explicit_observed_function(sys, ts;
515522        ps =  (DestructuredArgs (unwrap .(ps), inbounds =  ! checkbounds),)
516523    end 
517524    dvs =  DestructuredArgs (unknowns (sys), inbounds =  ! checkbounds)
525+     if  is_dde (sys)
526+         dvs =  (dvs, DDE_HISTORY_FUN)
527+     else 
528+         dvs =  (dvs,)
529+     end 
518530    if  inputs ===  nothing 
519-         args =  param_only ?  [ps... , ivs... ] :  [dvs, ps... , ivs... ]
531+         args =  param_only ?  [ps... , ivs... ] :  [dvs... , ps... , ivs... ]
520532    else 
521533        inputs =  unwrap .(inputs)
522534        ipts =  DestructuredArgs (inputs, inbounds =  ! checkbounds)
523-         args =  param_only ?  [ipts, ps... , ivs... ] :  [dvs, ipts, ps... , ivs... ]
535+         args =  param_only ?  [ipts, ps... , ivs... ] :  [dvs... , ipts, ps... , ivs... ]
524536    end 
525537    pre =  get_postprocess_fbody (sys)
526538
@@ -556,6 +568,20 @@ function build_explicit_observed_function(sys, ts;
556568    end 
557569end 
558570
571+ function  populate_delays (delays:: Set , obsexprs, histfn, sys, sym)
572+     _vars_util =  vars (sym)
573+     for  v in  _vars_util
574+         v in  delays &&  continue 
575+         iscall (v) &&  issym (operation (v)) &&  (args =  arguments (v); length (args) ==  1 ) && 
576+             iscall (only (args)) ||  continue 
577+ 
578+         idx =  variable_index (sys, operation (v)(get_iv (sys)))
579+         idx ===  nothing  &&  error (" Delay term $v  is not an unknown in the system" 
580+         push! (delays, v)
581+         push! (obsexprs, v ←  histfn (only (args))[idx])
582+     end 
583+ end 
584+ 
559585function  _eq_unordered (a, b)
560586    length (a) ===  length (b) ||  return  false 
561587    n =  length (a)
0 commit comments