@@ -746,38 +746,64 @@ end
746
746
abstract type SymScope end
747
747
748
748
struct LocalScope <: SymScope end
749
- function LocalScope (sym:: Union{Num, Symbolic} )
749
+ function LocalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
750
750
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
752
758
end
753
759
end
754
760
755
761
struct ParentScope <: SymScope
756
762
parent:: SymScope
757
763
end
758
- function ParentScope (sym:: Union{Num, Symbolic} )
764
+ function ParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
759
765
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
762
775
end
763
776
end
764
777
765
778
struct DelayParentScope <: SymScope
766
779
parent:: SymScope
767
780
N:: Int
768
781
end
769
- function DelayParentScope (sym:: Union{Num, Symbolic} , N)
782
+ function DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } , N)
770
783
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
773
793
end
774
794
end
775
- DelayParentScope (sym:: Union{Num, Symbolic} ) = DelayParentScope (sym, 1 )
795
+ DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } ) = DelayParentScope (sym, 1 )
776
796
777
797
struct GlobalScope <: SymScope end
778
- function GlobalScope (sym:: Union{Num, Symbolic} )
798
+ function GlobalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
779
799
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
781
807
end
782
808
end
783
809
@@ -1500,8 +1526,7 @@ function default_to_parentscope(v)
1500
1526
uv isa Symbolic || return v
1501
1527
apply_to_variables (v) do sym
1502
1528
if ! hasmetadata (uv, SymScope)
1503
- setmetadata (sym, SymScope,
1504
- ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
1529
+ ParentScope (sym)
1505
1530
else
1506
1531
sym
1507
1532
end
0 commit comments