@@ -958,9 +958,10 @@ function invalid_variables(sys, expr)
958958 filter (x -> ! any (isequal (x), all_symbols (sys)), reduce (vcat, vars (expr); init = []))
959959end
960960function 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 = [])
962963 return filter (
963- x -> ! any (isequal (x), assignable_syms), reduce (vcat, vars (expr); init = []) )
964+ x -> ! any (isequal (x), assignable_syms), written )
964965end
965966
966967function compile_user_affect (affect:: MutatingFunctionalAffect , cb, sys, dvs, ps; kwargs... )
@@ -1000,7 +1001,10 @@ function compile_user_affect(affect::MutatingFunctionalAffect, cb, sys, dvs, ps;
10001001
10011002 mod_exprs = modified (affect)
10021003 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
10041008 @warn (" Expression $mexpr cannot be assigned to; currently only unknowns and parameters may be updated by an affect." )
10051009 end
10061010 invalid_vars = unassignable_variables (sys, mexpr)
@@ -1036,7 +1040,7 @@ function compile_user_affect(affect::MutatingFunctionalAffect, cb, sys, dvs, ps;
10361040 mod_param_pairs = filter (v -> is_parameter (sys, v[1 ]), mod_pairs)
10371041 mod_unk_pairs = filter (v -> ! is_parameter (sys, v[1 ]), mod_pairs)
10381042 _, 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 = []);
10401044 return_inplace = true )
10411045 upd_params_fun = setu (
10421046 sys, reduce (vcat, Symbolics. scalarize .(first .(mod_param_pairs)); init = []))
0 commit comments