Currently, the evolve! function of an MPS with an MPO normalizes the final state by default unless we specify normalize=false on the evolve call. I belive this can be counter intuitive in some cases, for example:
julia> mps = rand(MPS; n=6)
MPS (inputs=0, outputs=6)
julia> size.(tensors(mps))
6-element Vector{Tuple{Int64, Int64, Vararg{Int64}}}:
(2, 2)
(2, 2, 4)
(4, 2, 8)
(8, 2, 4)
(4, 2, 2)
(2, 2)
julia> mpo = rand(MPO; n=6)
MPO (inputs=6, outputs=6)
julia> evolve!(mps, mpo; maxdim=nothing, threshold=nothing)
MPS (inputs=0, outputs=6)
julia> size.(tensors(mps))
6-element Vector{Tuple{Int64, Int64, Vararg{Int64}}}:
(2, 2)
(4, 2, 2)
(8, 2, 4)
(4, 2, 8)
(2, 2, 4)
(2, 2)
julia> form(mps)
MixedCanonical(1)
julia> Tenet.check_form(mps)
true
I would expect instead to an increase of bond dimension, but since normalize for MixedCanonical form calls mixed_canonize!, instead we get this.
For me this is strange, but the problem is that if we default to normalize=false, then after the evolution we will not have the form conserved, since the norm will not be preserved.
Currently, the
evolve!function of anMPSwith anMPOnormalizes the final state by default unless we specifynormalize=falseon theevolvecall. I belive this can be counter intuitive in some cases, for example:I would expect instead to an increase of bond dimension, but since
normalizeforMixedCanonicalform callsmixed_canonize!, instead we get this.For me this is strange, but the problem is that if we default to
normalize=false, then after the evolution we will not have the form conserved, since the norm will not be preserved.