ITensors.jl
ITensors.jl copied to clipboard
[ITensors] [BUG] Sum of MPS involving link dimension zero fails.
Description of bug
If we try to add two MPS, and one of them was created with linkdims of 0, we get a MethodError.
Minimal code demonstrating the bug or unexpected behavior
Minimal runnable code
sinds = [Index(2) for _ in 1:5]
m1 = MPS(sinds; linkdims=1)
m2 = MPS(sinds; linkdims=0)
m1 + m2 # throws a MethodError
Expected output or behavior
Should get a new MPS with bond dimension 1.
Actual output or behavior
MethodError
Output of minimal runnable code
MethodError: similar(::NDTensors.EmptyTensor{Float64, 2, Tuple{ITensors.Index{Int64}, ITensors.Index{Int64}}, NDTensors.EmptyStorage{Float64, NDTensors.Dense{Float64, Vector{Float64}}}}, ::Type{Float64}, ::Tuple{Int64, Int64}) is ambiguous. Candidates:
similar(a::AbstractArray, ::Type{T}, dims::Tuple{Vararg{Int64, N}}) where {T, N} in Base at abstractarray.jl:794
similar(a::AbstractArray, ::Type{T}, dims::Tuple{Integer, Vararg{Integer}}) where T in Base at abstractarray.jl:792
similar(a::AbstractArray, ::Type{T}, dims::Tuple{Union{Integer, Base.OneTo}, Vararg{Union{Integer, Base.OneTo}}}) where T in Base at abstractarray.jl:791
similar(A::AbstractArray, ::Type{T}, shape::Tuple{Union{Integer, AbstractUnitRange}, Vararg{Union{Integer, AbstractUnitRange}}}) where T in OffsetArrays at /Users/ammilste/.julia/packages/OffsetArrays/qPBwO/src/OffsetArrays.jl:320
similar(T::NDTensors.Tensor, args...) in NDTensors at /Users/ammilste/.julia/packages/NDTensors/lbVmG/src/tensor.jl:132
Possible fix, define
similar(::NDTensors.Tensor, ::Type{T}, ::Tuple{Int64, Vararg{Int64, N}}) where {T, N}
Stacktrace:
[1] qr(::NDTensors.EmptyTensor{Float64, 2, Tuple{ITensors.Index{Int64}, ITensors.Index{Int64}}, NDTensors.EmptyStorage{Float64, NDTensors.Dense{Float64, Vector{Float64}}}}, ::Tuple{Int64}, ::Vararg{Tuple{Int64}}; kwargs::Base.Pairs{Symbol, ITensors.TagSet, Tuple{Symbol}, NamedTuple{(:tags,), Tuple{ITensors.TagSet}}})
@ LinearAlgebra /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/qr.jl:418
[2] qr(A::ITensors.ITensor, Linds::Vector{ITensors.Index{Int64}}; kwargs::Base.Pairs{Symbol, ITensors.TagSet, Tuple{Symbol}, NamedTuple{(:tags,), Tuple{ITensors.TagSet}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/decomp.jl:355
[3] factorize_qr(A::ITensors.ITensor, Linds::Vector{ITensors.Index{Int64}}; kwargs::Base.Pairs{Symbol, ITensors.TagSet, Tuple{Symbol}, NamedTuple{(:tags,), Tuple{ITensors.TagSet}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/decomp.jl:389
[4] factorize(A::ITensors.ITensor, Linds::Vector{ITensors.Index{Int64}}; kwargs::Base.Pairs{Symbol, ITensors.TagSet, Tuple{Symbol}, NamedTuple{(:tags,), Tuple{ITensors.TagSet}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/decomp.jl:533
[5] orthogonalize!(M::ITensors.MPS, j::Int64; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1551
[6] orthogonalize!
@ ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1536 [inlined]
[7] #orthogonalize#701
@ ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1586 [inlined]
[8] orthogonalize
@ ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1585 [inlined]
[9] _broadcast_getindex_evalf
@ ./broadcast.jl:670 [inlined]
[10] _broadcast_getindex
@ ./broadcast.jl:643 [inlined]
[11] #29
@ ./broadcast.jl:1075 [inlined]
[12] ntuple
@ ./ntuple.jl:49 [inlined]
[13] copy
@ ./broadcast.jl:1075 [inlined]
[14] materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.Style{Tuple}, Nothing, typeof(ITensors.orthogonalize), Tuple{Tuple{ITensors.MPS, ITensors.MPS}, Int64}})
@ Base.Broadcast ./broadcast.jl:860
[15] +(::ITensors.Algorithm{:densitymatrix}, ::ITensors.MPS, ::Vararg{ITensors.MPS}; cutoff::Float64, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1408
[16] +(::ITensors.Algorithm{:densitymatrix}, ::ITensors.MPS, ::ITensors.MPS)
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1384
[17] +(::ITensors.MPS, ::Vararg{ITensors.MPS}; alg::ITensors.Algorithm{:densitymatrix}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1488
[18] +(::ITensors.MPS, ::ITensors.MPS)
@ ITensors ~/.julia/packages/ITensors/5dcHw/src/mps/abstractmps.jl:1488
[19] top-level scope
@ In[425]:1
[20] eval
@ ./boot.jl:373 [inlined]
[21] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1196
Version information
- Output from
versioninfo()
:
julia> versioninfo()
Julia Version 1.7.3
Commit 742b9abb4d (2022-05-06 12:58 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin21.4.0)
CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-12.0.1 (ORCJIT, skylake)
- Output from
using Pkg; Pkg.status("ITensors")
:
julia> using Pkg; Pkg.status("ITensors")
[9136182c] ITensors v0.3.16