@@ -3,7 +3,7 @@ module MatrixAlgebraKitGenericLinearAlgebraExt
33using MatrixAlgebraKit
44using MatrixAlgebraKit: sign_safe, check_input, diagview, gaugefix!, one!, zero!, default_fixgauge
55using MatrixAlgebraKit: GLA, Driver
6- import MatrixAlgebraKit: gesvd!, heev!
6+ import MatrixAlgebraKit: qr_householder!, qr_null_householder!, gesvd!, heev!
77using GenericLinearAlgebra: svd!, svdvals!, eigen!, eigvals!, Hermitian, qr!
88using LinearAlgebra: I, Diagonal, lmul!
99
@@ -53,7 +53,7 @@ function heev!(::GLA, A::AbstractMatrix, Dd::AbstractVector, V::AbstractMatrix;
5353 return Dd, V
5454end
5555
56- function MatrixAlgebraKit . qr_householder! (
56+ function qr_householder! (
5757 driver:: MatrixAlgebraKit.GLA , A:: AbstractMatrix , Q:: AbstractMatrix , R:: AbstractMatrix ;
5858 positive:: Bool = true , pivoted:: Bool = false , blocksize:: Int = 0
5959 )
@@ -68,36 +68,20 @@ function MatrixAlgebraKit.qr_householder!(
6868
6969 # compute QR
7070 Q̃, R̃ = qr! (A)
71- lmul! (Q̃, MatrixAlgebraKit. one! (Q))
72-
73- if positive
74- @inbounds for j in 1 : minmn
75- s = sign_safe (R̃[j, j])
76- @simd for i in 1 : m
77- Q[i, j] *= s
78- end
79- end
80- end
71+ lmul! (Q̃, one! (Q))
8172
8273 if computeR
83- if positive
84- @inbounds for j in n: - 1 : 1
85- @simd for i in 1 : min (minmn, j)
86- R[i, j] = R̃[i, j] * conj (sign_safe (R̃[i, i]))
87- end
88- @simd for i in (min (minmn, j) + 1 ): size (R, 1 )
89- R[i, j] = zero (eltype (R))
90- end
91- end
92- else
93- R[1 : minmn, :] .= R̃
94- MatrixAlgebraKit. zero! (@view (R[(minmn + 1 ): end , :]))
95- end
74+ copyto! (view (R, 1 : minmn, :), R̃)
75+ zero! (view (R, (minmn + 1 ): size (R, 1 ), :))
76+ positive && gaugefix! (qr_householder!, Q, R, diagview (R̃))
77+ elseif positive
78+ gaugefix! (qr_householder!, Q, nothing , diagview (R̃))
9679 end
80+
9781 return Q, R
9882end
9983
100- function MatrixAlgebraKit . qr_null_householder! (
84+ function qr_null_householder! (
10185 driver:: MatrixAlgebraKit.GLA , A:: AbstractMatrix , N:: AbstractMatrix ;
10286 positive:: Bool = true , pivoted:: Bool = false , blocksize:: Int = 0
10387 )
0 commit comments