@@ -380,10 +380,10 @@ function build_explicit_observed_function(sys, ts;
380
380
ps = full_parameters (sys),
381
381
op = Operator,
382
382
throw = true )
383
- if (isscalar = ! (ts isa AbstractVector ))
383
+ if (isscalar = symbolic_type (ts) != = NotSymbolic ( ))
384
384
ts = [ts]
385
385
end
386
- ts = unwrap .(Symbolics . scalarize (ts) )
386
+ ts = unwrap .(ts )
387
387
388
388
vars = Set ()
389
389
foreach (v -> vars! (vars, v; op), ts)
@@ -399,9 +399,17 @@ function build_explicit_observed_function(sys, ts;
399
399
end
400
400
401
401
sts = Set (unknowns (sys))
402
+ sts = union (sts,
403
+ Set (arguments (st)[1 ] for st in sts if istree (st) && operation (st) === getindex))
404
+
402
405
observed_idx = Dict (x. lhs => i for (i, x) in enumerate (obs))
403
406
param_set = Set (parameters (sys))
407
+ param_set = union (param_set,
408
+ Set (arguments (p)[1 ] for p in param_set if istree (p) && operation (p) === getindex))
404
409
param_set_ns = Set (unknowns (sys, p) for p in parameters (sys))
410
+ param_set_ns = union (param_set_ns,
411
+ Set (arguments (p)[1 ]
412
+ for p in param_set_ns if istree (p) && operation (p) === getindex))
405
413
namespaced_to_obs = Dict (unknowns (sys, x. lhs) => x. lhs for x in obs)
406
414
namespaced_to_sts = Dict (unknowns (sys, x) => x for x in unknowns (sys))
407
415
@@ -473,9 +481,9 @@ function build_explicit_observed_function(sys, ts;
473
481
pre = get_postprocess_fbody (sys)
474
482
475
483
ex = Func (args, [],
476
- pre (Let (obsexprs,
477
- isscalar ? ts[1 ] : MakeArray (ts, output_type),
478
- false ))) |> toexpr
484
+ pre (Let (obsexprs,
485
+ isscalar ? ts[1 ] : MakeArray (ts, output_type),
486
+ false ))) |> wrap_array_vars (sys, ts)[ 1 ] |> toexpr
479
487
expression ? ex : drop_expr (@RuntimeGeneratedFunction (ex))
480
488
end
481
489
0 commit comments