@@ -958,9 +958,10 @@ function invalid_variables(sys, expr)
958
958
filter (x -> ! any (isequal (x), all_symbols (sys)), reduce (vcat, vars (expr); init = []))
959
959
end
960
960
function unassignable_variables (sys, expr)
961
- assignable_syms = vcat (unknowns (sys), parameters (sys))
961
+ assignable_syms = reduce (vcat, Symbolics. scalarize .(vcat (unknowns (sys), parameters (sys))); init= [])
962
+ written = reduce (vcat, Symbolics. scalarize .(vars (expr)); init = [])
962
963
return filter (
963
- x -> ! any (isequal (x), assignable_syms), reduce (vcat, vars (expr); init = []) )
964
+ x -> ! any (isequal (x), assignable_syms), written )
964
965
end
965
966
966
967
function compile_user_affect (affect:: MutatingFunctionalAffect , cb, sys, dvs, ps; kwargs... )
@@ -1000,7 +1001,10 @@ function compile_user_affect(affect::MutatingFunctionalAffect, cb, sys, dvs, ps;
1000
1001
1001
1002
mod_exprs = modified (affect)
1002
1003
for mexpr in mod_exprs
1003
- if ! is_observed (sys, mexpr) && parameter_index (sys, mexpr) === nothing && ! affect. skip_checks
1004
+ if affect. skip_checks
1005
+ continue
1006
+ end
1007
+ if ! is_variable (sys, mexpr) && parameter_index (sys, mexpr) === nothing && ! affect. skip_checks
1004
1008
@warn (" Expression $mexpr cannot be assigned to; currently only unknowns and parameters may be updated by an affect." )
1005
1009
end
1006
1010
invalid_vars = unassignable_variables (sys, mexpr)
@@ -1036,7 +1040,7 @@ function compile_user_affect(affect::MutatingFunctionalAffect, cb, sys, dvs, ps;
1036
1040
mod_param_pairs = filter (v -> is_parameter (sys, v[1 ]), mod_pairs)
1037
1041
mod_unk_pairs = filter (v -> ! is_parameter (sys, v[1 ]), mod_pairs)
1038
1042
_, mod_og_val_fun = build_explicit_observed_function (
1039
- sys, reduce (vcat, [first .(mod_param_pairs); first .(mod_unk_pairs)]; init = []);
1043
+ sys, reduce (vcat, Symbolics . scalarize .( [first .(mod_param_pairs); first .(mod_unk_pairs)]) ; init = []);
1040
1044
return_inplace = true )
1041
1045
upd_params_fun = setu (
1042
1046
sys, reduce (vcat, Symbolics. scalarize .(first .(mod_param_pairs)); init = []))
0 commit comments