ModelingToolkit.jl
ModelingToolkit.jl copied to clipboard
Identity matrix multiplied by z[3:4] gives z[1:2]
using ModelingToolkit
A = [[1,0] [0,1]] # identity matrix
@variables z[1:4]
Symbolics.scalarize(A*z[3:4]) # gives [z_1,z_2] but I was expecting [z_3,z_4]?
with
Pkg.status()
Status `~/SageMaker/networks_hub/SAN/code/network_simulations/mwe/Project.toml`
[961ee093] ModelingToolkit v5.21.0
Maybe related:
Symbolics.scalarize( (z[3:4]') * A) # error
KeyError: key 1 not found
Stacktrace:
[1] getindex(h::Dict{Sym, Any}, key::Int64)
@ Base ./dict.jl:482
[2] (::Symbolics.var"#93#96"{Dict{Sym, Any}})(::Tuple{Int64, Int64})
@ Symbolics ./none:0
[3] iterate
@ ./generator.jl:47 [inlined]
[4] _all(f::Base.var"#282#284", itr::Base.Generator{Base.Iterators.Zip{Tuple{Tuple{Int64, Sym{Int64, Nothing}}, Tuple{Int64, Int64}}}, Symbolics.var"#93#96"{Dict{Sym, Any}}}, #unused#::Colon)
@ Base ./reduce.jl:922
[5] all(f::Function, itr::Base.Generator{Base.Iterators.Zip{Tuple{Tuple{Int64, Sym{Int64, Nothing}}, Tuple{Int64, Int64}}}, Symbolics.var"#93#96"{Dict{Sym, Any}}})
@ Base ./reduce.jl:918
[6] Dict(kv::Base.Generator{Base.Iterators.Zip{Tuple{Tuple{Int64, Sym{Int64, Nothing}}, Tuple{Int64, Int64}}}, Symbolics.var"#93#96"{Dict{Sym, Any}}})
@ Base ./dict.jl:131
[7] scalarize(arr::Symbolics.ArrayOp{Matrix{Real}}, idx::Tuple{Int64, Int64})
@ Symbolics ~/.julia/packages/Symbolics/1SjgW/src/arrays.jl:596
[8] scalarize(arr::Symbolics.Arr{Num, 2}, idx::Tuple{Int64, Int64})
@ Symbolics ~/.julia/packages/Symbolics/1SjgW/src/arrays.jl:610
[9] #99
@ ~/.julia/packages/Symbolics/1SjgW/src/arrays.jl:616 [inlined]
[10] iterate
@ ./generator.jl:47 [inlined]
[11] collect(itr::Base.Generator{Base.Iterators.ProductIterator{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}, Symbolics.var"#99#100"{Symbolics.Arr{Num, 2}}})
@ Base ./array.jl:678
[12] map(f::Function, A::Base.Iterators.ProductIterator{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}})
@ Base ./abstractarray.jl:2323
[13] scalarize(arr::Symbolics.Arr{Num, 2})
@ Symbolics ~/.julia/packages/Symbolics/1SjgW/src/arrays.jl:615
[14] top-level scope
@ In[16]:1
[15] eval
@ ./boot.jl:360 [inlined]
[16] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1094
Thanks for the bug report. @shashi do you mind to take a look?
This is fixed
julia> A = [[1,0] [0,1]] # identity matrix
julia> @variables z[1:4]
julia> A * z[3:4]
([1 0; 0 1]*z[3:4])[Base.OneTo(2)]
julia> Symbolics.scalarize(A * z[3:4]) # or collect
2-element Vector{Num}:
z[3]
z[4]