ModelingToolkit.jl icon indicating copy to clipboard operation
ModelingToolkit.jl copied to clipboard

Identity matrix multiplied by z[3:4] gives z[1:2]

Open fernando-duarte opened this issue 3 years ago • 2 comments

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

fernando-duarte avatar Jul 05 '21 01:07 fernando-duarte

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

fernando-duarte avatar Jul 05 '21 01:07 fernando-duarte

Thanks for the bug report. @shashi do you mind to take a look?

YingboMa avatar Jul 05 '21 02:07 YingboMa

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]

AayushSabharwal avatar Apr 04 '24 12:04 AayushSabharwal