@@ -741,38 +741,64 @@ end
741
741
abstract type SymScope end
742
742
743
743
struct LocalScope <: SymScope end
744
- function LocalScope (sym:: Union{Num, Symbolic} )
744
+ function LocalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
745
745
apply_to_variables (sym) do sym
746
- setmetadata (sym, SymScope, LocalScope ())
746
+ if istree (sym) && operation (sym) === getindex
747
+ args = arguments (sym)
748
+ a1 = setmetadata (args[1 ], SymScope, LocalScope ())
749
+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
750
+ else
751
+ setmetadata (sym, SymScope, LocalScope ())
752
+ end
747
753
end
748
754
end
749
755
750
756
struct ParentScope <: SymScope
751
757
parent:: SymScope
752
758
end
753
- function ParentScope (sym:: Union{Num, Symbolic} )
759
+ function ParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
754
760
apply_to_variables (sym) do sym
755
- setmetadata (sym, SymScope,
756
- ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
761
+ if istree (sym) && operation (sym) == getindex
762
+ args = arguments (sym)
763
+ a1 = setmetadata (args[1 ], SymScope,
764
+ ParentScope (getmetadata (value (args[1 ]), SymScope, LocalScope ())))
765
+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
766
+ else
767
+ setmetadata (sym, SymScope,
768
+ ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
769
+ end
757
770
end
758
771
end
759
772
760
773
struct DelayParentScope <: SymScope
761
774
parent:: SymScope
762
775
N:: Int
763
776
end
764
- function DelayParentScope (sym:: Union{Num, Symbolic} , N)
777
+ function DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } , N)
765
778
apply_to_variables (sym) do sym
766
- setmetadata (sym, SymScope,
767
- DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
779
+ if istree (sym) && operation (sym) == getindex
780
+ args = arguments (sym)
781
+ a1 = setmetadata (args[1 ], SymScope,
782
+ DelayParentScope (getmetadata (value (args[1 ]), SymScope, LocalScope ()), N))
783
+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
784
+ else
785
+ setmetadata (sym, SymScope,
786
+ DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
787
+ end
768
788
end
769
789
end
770
- DelayParentScope (sym:: Union{Num, Symbolic} ) = DelayParentScope (sym, 1 )
790
+ DelayParentScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } ) = DelayParentScope (sym, 1 )
771
791
772
792
struct GlobalScope <: SymScope end
773
- function GlobalScope (sym:: Union{Num, Symbolic} )
793
+ function GlobalScope (sym:: Union{Num, Symbolic, Symbolics.Arr{Num} } )
774
794
apply_to_variables (sym) do sym
775
- setmetadata (sym, SymScope, GlobalScope ())
795
+ if istree (sym) && operation (sym) == getindex
796
+ args = arguments (sym)
797
+ a1 = setmetadata (args[1 ], SymScope, GlobalScope ())
798
+ similarterm (sym, operation (sym), [a1, args[2 : end ]. .. ])
799
+ else
800
+ setmetadata (sym, SymScope, GlobalScope ())
801
+ end
776
802
end
777
803
end
778
804
@@ -1495,8 +1521,7 @@ function default_to_parentscope(v)
1495
1521
uv isa Symbolic || return v
1496
1522
apply_to_variables (v) do sym
1497
1523
if ! hasmetadata (uv, SymScope)
1498
- setmetadata (sym, SymScope,
1499
- ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
1524
+ ParentScope (sym)
1500
1525
else
1501
1526
sym
1502
1527
end
0 commit comments