You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
materialize!(M::Lmul{<:QRPackedQLayout{<:AbstractColumnMajor,<:AbstractColumnMajor},<:AbstractColumnMajor,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasFloat=
129
+
LAPACK.ormqr!('L','N',M.A.factors,M.A.τ,M.B)
130
+
131
+
materialize!(M::Lmul{<:QRCompactWYQLayout{<:AbstractColumnMajor,<:AbstractColumnMajor},<:AbstractColumnMajor,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasFloat=
132
+
LAPACK.gemqrt!('L','N',M.A.factors,M.A.T,M.B)
133
+
134
+
functionmaterialize!(M::Lmul{<:QRCompactWYQLayout{<:AbstractColumnMajor,<:AbstractColumnMajor},<:AbstractRowMajor,<:AbstractMatrix{T},<:AbstractMatrix{T}}) where T<:BlasReal
functionmaterialize!(M::Lmul{<:QRCompactWYQLayout{<:AbstractColumnMajor,<:AbstractColumnMajor},<:ConjLayout{<:AbstractRowMajor},<:AbstractMatrix{T},<:AbstractMatrix{T}}) where T<:BlasComplex
throw(DimensionMismatch("matrix A has dimensions ($mA,$nA) but B has dimensions ($mB, $nB)"))
151
+
end
152
+
Afactors = A.factors
153
+
@inboundsbegin
154
+
for k =min(mA,nA):-1:1
155
+
for j =1:nB
156
+
vBj = B[k,j]
157
+
for i = k+1:mB
158
+
vBj +=conj(Afactors[i,k])*B[i,j]
159
+
end
160
+
vBj = A.τ[k]*vBj
161
+
B[k,j] -= vBj
162
+
for i = k+1:mB
163
+
B[i,j] -= Afactors[i,k]*vBj
164
+
end
165
+
end
166
+
end
167
+
end
168
+
B
169
+
end
170
+
171
+
172
+
### QcB
173
+
materialize!(M::Lmul{<:AdjQRPackedQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractStridedLayout,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasFloat=
174
+
(A = M.A.parent; LAPACK.ormqr!('L','T',A.factors,A.τ,M.B))
175
+
materialize!(M::Lmul{<:AdjQRPackedQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractStridedLayout,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasComplex=
176
+
(A = M.A.parent; LAPACK.ormqr!('L','C',A.factors,A.τ,M.B))
177
+
materialize!(M::Lmul{<:AdjQRCompactWYQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractStridedLayout,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasFloat=
178
+
(A = M.A.parent; LAPACK.gemqrt!('L','T',A.factors,A.T,M.B))
179
+
materialize!(M::Lmul{<:AdjQRCompactWYQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractStridedLayout,<:AbstractMatrix{T},<:AbstractVecOrMat{T}}) where T<:BlasComplex=
180
+
(A = M.A.parent; LAPACK.gemqrt!('L','C',A.factors,A.T,M.B))
throw(DimensionMismatch("matrix A has dimensions ($mA,$nA) but B has dimensions ($mB, $nB)"))
189
+
end
190
+
Afactors = A.factors
191
+
@inboundsbegin
192
+
for k =1:min(mA,nA)
193
+
for j =1:nB
194
+
vBj = B[k,j]
195
+
for i = k+1:mB
196
+
vBj +=conj(Afactors[i,k])*B[i,j]
197
+
end
198
+
vBj =conj(A.τ[k])*vBj
199
+
B[k,j] -= vBj
200
+
for i = k+1:mB
201
+
B[i,j] -= Afactors[i,k]*vBj
202
+
end
203
+
end
204
+
end
205
+
end
206
+
B
207
+
end
208
+
209
+
## AQ
210
+
materialize!(M::Rmul{<:AbstractStridedLayout,<:QRPackedQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasFloat=
211
+
LAPACK.ormqr!('R', 'N', M.B.factors, M.B.τ, M.A)
212
+
materialize!(M::Rmul{<:AbstractStridedLayout,<:QRCompactWYQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasFloat=
throw(DimensionMismatch("matrix A has dimensions ($mA,$nA) but matrix Q has dimensions ($mQ, $nQ)"))
220
+
end
221
+
Qfactors = Q.factors
222
+
@inboundsbegin
223
+
for k =1:min(mQ,nQ)
224
+
for i =1:mA
225
+
vAi = A[i,k]
226
+
for j = k+1:mQ
227
+
vAi += A[i,j]*Qfactors[j,k]
228
+
end
229
+
vAi = vAi*Q.τ[k]
230
+
A[i,k] -= vAi
231
+
for j = k+1:nA
232
+
A[i,j] -= vAi*conj(Qfactors[j,k])
233
+
end
234
+
end
235
+
end
236
+
end
237
+
A
238
+
end
239
+
240
+
### AQc
241
+
materialize!(M::Rmul{<:AbstractStridedLayout,<:AdjQRPackedQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasReal=
materialize!(M::Rmul{<:AbstractStridedLayout,<:AdjQRPackedQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasComplex=
materialize!(M::Rmul{<:AbstractStridedLayout,<:AdjQRCompactWYQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasReal=
materialize!(M::Rmul{<:AbstractStridedLayout,<:AdjQRCompactWYQLayout{<:AbstractStridedLayout,<:AbstractStridedLayout},<:AbstractVecOrMat{T},<:AbstractMatrix{T}}) where T<:BlasComplex=
0 commit comments