@@ -819,22 +819,24 @@ namespace_controls(sys::AbstractSystem) = controls(sys, controls(sys))
819
819
820
820
function namespace_defaults (sys)
821
821
defs = defaults (sys)
822
- Dict ((isparameter (k) ? parameters (sys, k) : unknowns (sys, k)) => namespace_expr (v, sys)
822
+ Dict ((isparameter (k) ? parameters (sys, k) : unknowns (sys, k)) => namespace_expr (
823
+ v, sys; check = true )
823
824
for (k, v) in pairs (defs))
824
825
end
825
826
826
827
function namespace_equations (sys:: AbstractSystem , ivs = independent_variables (sys))
827
828
eqs = equations (sys)
828
829
isempty (eqs) && return Equation[]
829
- map (eq -> namespace_equation (eq, sys; ivs), eqs)
830
+ map (eq -> namespace_equation (eq, sys; ivs, check = true ), eqs)
830
831
end
831
832
832
833
function namespace_equation (eq:: Equation ,
833
834
sys,
834
835
n = nameof (sys);
835
- ivs = independent_variables (sys))
836
- _lhs = namespace_expr (eq. lhs, sys, n; ivs)
837
- _rhs = namespace_expr (eq. rhs, sys, n; ivs)
836
+ ivs = independent_variables (sys),
837
+ check = false )
838
+ _lhs = namespace_expr (eq. lhs, sys, n; ivs, check)
839
+ _rhs = namespace_expr (eq. rhs, sys, n; ivs, check)
838
840
_lhs ~ _rhs
839
841
end
840
842
@@ -844,32 +846,36 @@ function namespace_assignment(eq::Assignment, sys)
844
846
Assignment (_lhs, _rhs)
845
847
end
846
848
847
- function namespace_expr (O, sys, n = nameof (sys); ivs = independent_variables (sys))
849
+ function namespace_expr (
850
+ O, sys, n = nameof (sys); ivs = independent_variables (sys), check = false )
848
851
O = unwrap (O)
849
852
if any (isequal (O), ivs)
850
853
return O
851
854
elseif istree (O)
852
855
T = typeof (O)
853
856
renamed = let sys = sys, n = n, T = T
854
- map (a -> namespace_expr (a, sys, n; ivs):: Any , arguments (O))
857
+ map (a -> namespace_expr (a, sys, n; ivs, check ):: Any , arguments (O))
855
858
end
856
859
if isvariable (O)
860
+ check && ! is_variable (sys, O) && ! is_parameter (sys, O) && return O
857
861
# Use renamespace so the scope is correct, and make sure to use the
858
862
# metadata from the rescoped variable
859
863
rescoped = renamespace (n, O)
860
864
similarterm (O, operation (rescoped), renamed,
861
865
metadata = metadata (rescoped))
862
866
elseif Symbolics. isarraysymbolic (O)
867
+ check && ! is_variable (sys, O) && ! is_parameter (sys, O) && return O
863
868
# promote_symtype doesn't work for array symbolics
864
869
similarterm (O, operation (O), renamed, symtype (O), metadata = metadata (O))
865
870
else
866
871
similarterm (O, operation (O), renamed, metadata = metadata (O))
867
872
end
868
873
elseif isvariable (O)
874
+ check && ! is_variable (sys, O) && ! is_parameter (sys, O) && return O
869
875
renamespace (n, O)
870
876
elseif O isa Array
871
877
let sys = sys, n = n
872
- map (o -> namespace_expr (o, sys, n; ivs), O)
878
+ map (o -> namespace_expr (o, sys, n; ivs, check ), O)
873
879
end
874
880
else
875
881
O
0 commit comments