Encountered the folowing inconsistent/inconvenient behaviour for fusing vector spaces: fuse(a, b...) automatically results in a non-dual vectorspace, while fuse(a) simply returns a. I think it might be more convenient to ensure that fuse either always returns a non-dual space, or has a keyword to switch between the outputs.
julia> using TensorKit
julia> a = U1Space(1 => 1)
Rep[U₁](1=>1)
julia> fuse(a * a)
Rep[U₁](2=>1)
julia> fuse(a)
Rep[U₁](1=>1)
julia> fuse(a')
Rep[U₁](1=>1)'
julia> fuse(a' * a)
Rep[U₁](0=>1)
In my particular case, I am iteratively fusing more and more spaces together to determine the maximal virtual spaces of an MPS, and now have to insert a weird special case to catch when a single dual space is being entered.
replacing
fuse(V::ElementarySpace) = V
on line 155 in vectorspaces.jl with
fuse(V::ElementarySpace) = isdual(V) ? flip(V) : V
will fix this, I believe. Should I add this?
Encountered the folowing inconsistent/inconvenient behaviour for fusing vector spaces:
fuse(a, b...)
automatically results in a non-dual vectorspace, whilefuse(a)
simply returnsa
. I think it might be more convenient to ensure thatfuse
either always returns a non-dual space, or has a keyword to switch between the outputs.In my particular case, I am iteratively fusing more and more spaces together to determine the maximal virtual spaces of an MPS, and now have to insert a weird special case to catch when a single dual space is being entered.