@@ -519,70 +519,19 @@ end
519519# handles ensuring that affect! functions work with integrator arguments
520520function add_integrator_header (
521521 sys:: AbstractSystem , integrator = gensym (:MTKIntegrator ), out = :u )
522- if has_index_cache (sys) && get_index_cache (sys) != = nothing
523- function (expr)
524- p = gensym (:p )
525- Func (
526- [
527- DestructuredArgs ([expr. args[1 ], p, expr. args[end ]],
528- integrator, inds = [:u , :p , :t ])
529- ],
530- [],
531- Let (
532- [DestructuredArgs ([arg. name for arg in expr. args[2 : (end - 1 )]], p),
533- expr. args[2 : (end - 1 )]. .. ],
534- expr. body,
535- false )
536- )
537- end ,
538- function (expr)
539- p = gensym (:p )
540- Func (
541- [
542- DestructuredArgs ([expr. args[1 ], expr. args[2 ], p, expr. args[end ]],
543- integrator, inds = [out, :u , :p , :t ])
544- ],
545- [],
546- Let (
547- [DestructuredArgs ([arg. name for arg in expr. args[3 : (end - 1 )]], p),
548- expr. args[3 : (end - 1 )]. .. ],
549- expr. body,
550- false )
551- )
552- end
553- else
554- expr -> Func ([DestructuredArgs (expr. args, integrator, inds = [:u , :p , :t ])], [],
555- expr. body),
556- expr -> Func (
557- [DestructuredArgs (expr. args, integrator, inds = [out, :u , :p , :t ])], [],
558- expr. body)
559- end
522+ expr -> Func ([DestructuredArgs (expr. args, integrator, inds = [:u , :p , :t ])], [],
523+ expr. body),
524+ expr -> Func (
525+ [DestructuredArgs (expr. args, integrator, inds = [out, :u , :p , :t ])], [],
526+ expr. body)
560527end
561528
562529function condition_header (sys:: AbstractSystem , integrator = gensym (:MTKIntegrator ))
563- if has_index_cache (sys) && get_index_cache (sys) != = nothing
564- function (expr)
565- p = gensym (:p )
566- res = Func (
567- [expr. args[1 ], expr. args[2 ],
568- DestructuredArgs ([p], integrator, inds = [:p ])],
569- [],
570- Let (
571- [
572- DestructuredArgs ([arg. name for arg in expr. args[3 : end ]], p),
573- expr. args[3 : end ]. ..
574- ], expr. body, false
575- )
576- )
577- return res
578- end
579- else
580- expr -> Func (
581- [expr. args[1 ], expr. args[2 ],
582- DestructuredArgs (expr. args[3 : end ], integrator, inds = [:p ])],
583- [],
584- expr. body)
585- end
530+ expr -> Func (
531+ [expr. args[1 ], expr. args[2 ],
532+ DestructuredArgs (expr. args[3 : end ], integrator, inds = [:p ])],
533+ [],
534+ expr. body)
586535end
587536
588537function callback_save_header (sys:: AbstractSystem , cb)
@@ -628,11 +577,10 @@ function compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps;
628577 cmap = map (x -> x => getdefault (x), cs)
629578 condit = substitute (condit, cmap)
630579 end
631- expr = build_function (
580+ expr = build_function_wrapper (sys,
632581 condit, u, t, p... ; expression = Val{true },
633- wrap_code = condition_header (sys) .∘
634- wrap_array_vars (sys, condit; dvs, ps, inputs = true ) .∘
635- wrap_parameter_dependencies (sys, ! (condit isa AbstractArray)),
582+ p_start = 3 , p_end = length (p) + 2 ,
583+ wrap_code = condition_header (sys),
636584 kwargs... )
637585 if expression == Val{true }
638586 return expr
@@ -715,14 +663,12 @@ function compile_affect(eqs::Vector{Equation}, cb, sys, dvs, ps; outputidxs = no
715663 end
716664 t = get_iv (sys)
717665 integ = gensym (:MTKIntegrator )
718- pre = get_preprocess_constants (rhss)
719- rf_oop, rf_ip = build_function ( rhss, u, p... , t; expression = Val{true },
666+ rf_oop, rf_ip = build_function_wrapper (
667+ sys, rhss, u, p... , t; expression = Val{true },
720668 wrap_code = callback_save_header (sys, cb) .∘
721- add_integrator_header (sys, integ, outvar) .∘
722- wrap_array_vars (sys, rhss; dvs, ps = _ps) .∘
723- wrap_parameter_dependencies (sys, false ),
669+ add_integrator_header (sys, integ, outvar),
724670 outputidxs = update_inds,
725- postprocess_fbody = pre ,
671+ create_bindings = false ,
726672 kwargs... )
727673 # applied user-provided function to the generated expression
728674 if postprocess_affect_expr! != = nothing
0 commit comments