Skip to content

Commit 021e860

Browse files
committed
use SectorVector as output for svd_vals(::DiagonalTensorMap)
1 parent 155aa89 commit 021e860

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/factorizations/diagonal.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# DiagonalTensorMap
22
# -----------------
33
_repack_diagonal(d::DiagonalTensorMap) = Diagonal(d.data)
4+
_repack_diagonal(d::SectorVector) = Diagonal(parent(d))
45

56
MAK.diagview(t::DiagonalTensorMap) = SectorVector(t.data, TensorKit.diagonalblockstructure(space(t)))
67

@@ -100,10 +101,12 @@ for f! in (:eig_vals!, :eigh_vals!, :svd_vals!)
100101
$f!(_repack_diagonal(d), diagview(_repack_diagonal(V)), alg)
101102
return V
102103
end
103-
@eval function MAK.initialize_output(
104-
::typeof($f!), d::DiagonalTensorMap, alg::DiagonalAlgorithm
105-
)
106-
data = MAK.initialize_output($f!, _repack_diagonal(d), alg)
107-
return DiagonalTensorMap(data, d.domain)
108-
end
104+
end
105+
106+
# For diagonal inputs we don't have to promote the scalartype since we know they are symmetric
107+
function MAK.initialize_output(::typeof(eig_vals!), t::AbstractTensorMap, alg::DiagonalAlgorithm)
108+
V_D = fuse(domain(t))
109+
Tc = scalartype(t)
110+
A = similarstoragetype(t, Tc)
111+
return SectorVector{Tc, sectortype(t), A}(undef, V_D)
109112
end

0 commit comments

Comments
 (0)