Skip to content

Commit a477689

Browse files
committed
preinitialize polar output
1 parent d08a022 commit a477689

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

src/tensors/factorizations.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -331,37 +331,40 @@ function leftorth!(t::TensorMap{<:RealOrComplexFloat};
331331
InnerProductStyle(t) === EuclideanInnerProduct() ||
332332
throw_invalid_innerproduct(:leftorth!)
333333

334+
VC = MatrixAlgebraKit.initialize_output(left_orth!, t)
335+
334336
if alg isa QR
335-
return left_orth!(t; kind=:qr, atol, rtol)
337+
return left_orth!(t, VC; kind=:qr, atol, rtol)
336338
elseif alg isa QRpos
337-
return left_orth!(t; kind=:qrpos, atol, rtol)
339+
return left_orth!(t, VC; kind=:qrpos, atol, rtol)
338340
elseif alg isa SDD
339-
return left_orth!(t; kind=:svd, atol, rtol)
341+
return left_orth!(t, VC; kind=:svd, atol, rtol)
340342
elseif alg isa Polar
341-
return left_orth!(t; kind=:polar, atol, rtol)
343+
return left_orth!(t, VC; kind=:polar, atol, rtol)
342344
elseif alg isa SVD
343345
kind = :svd
344346
if iszero(atol) && iszero(rtol)
345347
alg′ = LAPACK_QRIteration()
346-
return left_orth!(t; kind, alg=BlockAlgorithm(alg′, default_blockscheduler(t)),
348+
return left_orth!(t, VC; kind,
349+
alg=BlockAlgorithm(alg′, default_blockscheduler(t)),
347350
atol, rtol)
348351
else
349352
trunc = MatrixAlgebraKit.TruncationKeepAbove(atol, rtol)
350353
svd_alg = LAPACK_QRIteration()
351354
scheduler = default_blockscheduler(t)
352355
alg′ = MatrixAlgebraKit.TruncatedAlgorithm(BlockAlgorithm(svd_alg, scheduler),
353356
trunc)
354-
return left_orth!(t; kind, alg=alg′, atol, rtol)
357+
return left_orth!(t, VC; kind, alg=alg′, atol, rtol)
355358
end
356359
elseif alg isa QL
357360
_reverse!(t; dims=2)
358-
Q, R = left_orth!(t; kind=:qr, atol, rtol)
361+
Q, R = left_orth!(t, VC; kind=:qr, atol, rtol)
359362
_reverse!(Q; dims=2)
360363
_reverse!(R)
361364
return Q, R
362365
elseif alg isa QLpos
363366
_reverse!(t; dims=2)
364-
Q, R = left_orth!(t; kind=:qrpos, atol, rtol)
367+
Q, R = left_orth!(t, VC; kind=:qrpos, atol, rtol)
365368
_reverse!(Q; dims=2)
366369
_reverse!(R)
367370
return Q, R

0 commit comments

Comments
 (0)