@@ -746,38 +746,64 @@ end
746746abstract type SymScope end
747747
748748struct LocalScope <: SymScope end
749- function LocalScope (sym:: Union{Num, Symbolic} )
749+ function LocalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
750750 apply_to_variables (sym) do sym
751- setmetadata (sym, SymScope, LocalScope ())
751+ if istree (sym) && operation (sym) === getindex
752+ args = arguments (sym)
753+ a1 = setmetadata (args[1 ], SymScope, LocalScope ())
754+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
755+ else
756+ setmetadata (sym, SymScope, LocalScope ())
757+ end
752758 end
753759end
754760
755761struct ParentScope <: SymScope
756762 parent:: SymScope
757763end
758- function ParentScope (sym:: Union{Num, Symbolic} )
764+ function ParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
759765 apply_to_variables (sym) do sym
760- setmetadata (sym, SymScope,
761- ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
766+ if istree (sym) && operation (sym) == getindex
767+ args = arguments (sym)
768+ a1 = setmetadata (args[1 ], SymScope,
769+ ParentScope (getmetadata (value (args[1 ]), SymScope, LocalScope ())))
770+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
771+ else
772+ setmetadata (sym, SymScope,
773+ ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
774+ end
762775 end
763776end
764777
765778struct DelayParentScope <: SymScope
766779 parent:: SymScope
767780 N:: Int
768781end
769- function DelayParentScope (sym:: Union{Num, Symbolic} , N)
782+ function DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } , N)
770783 apply_to_variables (sym) do sym
771- setmetadata (sym, SymScope,
772- DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
784+ if istree (sym) && operation (sym) == getindex
785+ args = arguments (sym)
786+ a1 = setmetadata (args[1 ], SymScope,
787+ DelayParentScope (getmetadata (value (args[1 ]), SymScope, LocalScope ()), N))
788+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
789+ else
790+ setmetadata (sym, SymScope,
791+ DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
792+ end
773793 end
774794end
775- DelayParentScope (sym:: Union{Num, Symbolic} ) = DelayParentScope (sym, 1 )
795+ DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } ) = DelayParentScope (sym, 1 )
776796
777797struct GlobalScope <: SymScope end
778- function GlobalScope (sym:: Union{Num, Symbolic} )
798+ function GlobalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
779799 apply_to_variables (sym) do sym
780- setmetadata (sym, SymScope, GlobalScope ())
800+ if istree (sym) && operation (sym) == getindex
801+ args = arguments (sym)
802+ a1 = setmetadata (args[1 ], SymScope, GlobalScope ())
803+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
804+ else
805+ setmetadata (sym, SymScope, GlobalScope ())
806+ end
781807 end
782808end
783809
@@ -1500,8 +1526,7 @@ function default_to_parentscope(v)
15001526 uv isa Symbolic || return v
15011527 apply_to_variables (v) do sym
15021528 if ! hasmetadata (uv, SymScope)
1503- setmetadata (sym, SymScope,
1504- ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
1529+ ParentScope (sym)
15051530 else
15061531 sym
15071532 end
0 commit comments