@@ -519,70 +519,19 @@ end
519
519
# handles ensuring that affect! functions work with integrator arguments
520
520
function add_integrator_header (
521
521
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)
560
527
end
561
528
562
529
function 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)
586
535
end
587
536
588
537
function callback_save_header (sys:: AbstractSystem , cb)
@@ -628,11 +577,10 @@ function compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps;
628
577
cmap = map (x -> x => getdefault (x), cs)
629
578
condit = substitute (condit, cmap)
630
579
end
631
- expr = build_function (
580
+ expr = build_function_wrapper (sys,
632
581
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),
636
584
kwargs... )
637
585
if expression == Val{true }
638
586
return expr
@@ -715,14 +663,12 @@ function compile_affect(eqs::Vector{Equation}, cb, sys, dvs, ps; outputidxs = no
715
663
end
716
664
t = get_iv (sys)
717
665
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 },
720
668
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),
724
670
outputidxs = update_inds,
725
- postprocess_fbody = pre ,
671
+ create_bindings = false ,
726
672
kwargs... )
727
673
# applied user-provided function to the generated expression
728
674
if postprocess_affect_expr! != = nothing
0 commit comments