@@ -563,7 +563,7 @@ struct CacheWriter{F}
563
563
end
564
564
565
565
function (cw:: CacheWriter )(p, sols)
566
- cw. fn (p. caches, sols, p... )
566
+ cw. fn (p. caches, sols, p)
567
567
end
568
568
569
569
function CacheWriter (sys:: AbstractSystem , buffer_types:: Vector{TypeT} ,
@@ -572,22 +572,15 @@ function CacheWriter(sys::AbstractSystem, buffer_types::Vector{TypeT},
572
572
ps = parameters (sys)
573
573
rps = reorder_parameters (sys, ps)
574
574
obs_assigns = [eq. lhs ← eq. rhs for eq in obseqs]
575
- cmap, cs = get_cmap (sys)
576
- cmap_assigns = [eq. lhs ← eq. rhs for eq in cmap]
577
-
578
- outsyms = [Symbol (:out , i) for i in eachindex (buffer_types)]
579
575
body = map (eachindex (buffer_types), buffer_types) do i, T
580
576
Symbol (:tmp , i) ← SetArray (true , :(out[$ i]), get (exprs, T, []))
581
577
end
582
- fn = Func (
583
- [:out , DestructuredArgs (DestructuredArgs .(solsyms)),
584
- DestructuredArgs .(rps)... ],
585
- [],
586
- Let (body, :())
587
- ) |> wrap_assignments (false , obs_assigns)[2 ] |>
588
- wrap_parameter_dependencies (sys, false )[2 ] |>
589
- wrap_array_vars (sys, []; dvs = nothing , inputs = [])[2 ] |>
590
- wrap_assignments (false , cmap_assigns)[2 ] |> toexpr
578
+
579
+ fn = build_function_wrapper (
580
+ sys, nothing , :out , DestructuredArgs (DestructuredArgs .(solsyms)),
581
+ DestructuredArgs .(rps)... ; p_start = 3 , p_end = length (rps) + 2 ,
582
+ expression = Val{true }, add_observed = false ,
583
+ extra_assignments = [obs_assigns; body])
591
584
return CacheWriter (eval_or_rgf (fn; eval_expression, eval_module))
592
585
end
593
586
@@ -601,21 +594,15 @@ function SCCNonlinearFunction{iip}(
601
594
602
595
obs_assignments = [eq. lhs ← eq. rhs for eq in _obs]
603
596
604
- cmap, cs = get_cmap (sys)
605
- cmap_assignments = [eq. lhs ← eq. rhs for eq in cmap]
606
597
rhss = [eq. rhs - eq. lhs for eq in _eqs]
607
- wrap_code = wrap_assignments (false , cmap_assignments) .∘
608
- (wrap_array_vars (sys, rhss; dvs = _dvs, cachesyms)) .∘
609
- wrap_parameter_dependencies (sys, false ) .∘
610
- wrap_assignments (false , obs_assignments)
611
- f_gen = build_function (
612
- rhss, _dvs, rps... , cachesyms... ; wrap_code, expression = Val{true })
598
+ f_gen = build_function_wrapper (sys,
599
+ rhss, _dvs, rps... , cachesyms... ; p_start = 2 ,
600
+ p_end = length (rps) + length (cachesyms) + 1 , add_observed = false ,
601
+ extra_assignments = obs_assignments, expression = Val{true })
613
602
f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
614
603
615
604
f (u, p) = f_oop (u, p)
616
- f (u, p:: MTKParameters ) = f_oop (u, p... )
617
605
f (resid, u, p) = f_iip (resid, u, p)
618
- f (resid, u, p:: MTKParameters ) = f_iip (resid, u, p... )
619
606
620
607
subsys = NonlinearSystem (_eqs, _dvs, ps; observed = _obs,
621
608
parameter_dependencies = parameter_dependencies (sys), name = nameof (sys))
0 commit comments