119
119
size (A:: LQPackedQ ) = size (A. factors)
120
120
121
121
# # Multiplication by LQ
122
- A_mul_B! {T<:BlasFloat} (A:: LQ{T} , B:: StridedVecOrMat{T} ) = A[:L ]* LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,B)
123
- A_mul_B! {T<:BlasFloat} (A:: LQ{T} , B:: QR{T} ) = A[:L ]* LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,full (B))
124
- A_mul_B! {T<:BlasFloat} (A:: QR{T} , B:: LQ{T} ) = A_mul_B! (zeros (full (A)), full (A), full (B))
122
+ A_mul_B! (A:: LQ{T} , B:: StridedVecOrMat{T} ) where {T <: BlasFloat } = A[:L ]* LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,B)
123
+ A_mul_B! (A:: LQ{T} , B:: QR{T} ) where {T <: BlasFloat } = A[:L ]* LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,full (B))
124
+ A_mul_B! (A:: QR{T} , B:: LQ{T} ) where {T <: BlasFloat } = A_mul_B! (zeros (full (A)), full (A), full (B))
125
125
function * (A:: LQ{TA} ,B:: StridedVecOrMat{TB} ) where {TA,TB}
126
126
TAB = promote_type (TA, TB)
127
127
A_mul_B! (convert (Factorization{TAB},A), copy_oftype (B, TAB))
@@ -137,15 +137,15 @@ end
137
137
138
138
# # Multiplication by Q
139
139
# ## QB
140
- A_mul_B! {T<:BlasFloat} (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) = LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,B)
140
+ A_mul_B! (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) where {T <: BlasFloat } = LAPACK. ormlq! (' L' ,' N' ,A. factors,A. τ,B)
141
141
function (* )(A:: LQPackedQ ,B:: StridedVecOrMat )
142
142
TAB = promote_type (eltype (A), eltype (B))
143
143
A_mul_B! (convert (AbstractMatrix{TAB}, A), copy_oftype (B, TAB))
144
144
end
145
145
146
146
# ## QcB
147
- Ac_mul_B! {T<:BlasReal} (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) = LAPACK. ormlq! (' L' ,' T' ,A. factors,A. τ,B)
148
- Ac_mul_B! {T<:BlasComplex} (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) = LAPACK. ormlq! (' L' ,' C' ,A. factors,A. τ,B)
147
+ Ac_mul_B! (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) where {T <: BlasReal } = LAPACK. ormlq! (' L' ,' T' ,A. factors,A. τ,B)
148
+ Ac_mul_B! (A:: LQPackedQ{T} , B:: StridedVecOrMat{T} ) where {T <: BlasComplex } = LAPACK. ormlq! (' L' ,' C' ,A. factors,A. τ,B)
149
149
function Ac_mul_B (A:: LQPackedQ , B:: StridedVecOrMat )
150
150
TAB = promote_type (eltype (A), eltype (B))
151
151
if size (B,1 ) == size (A. factors,2 )
@@ -171,7 +171,7 @@ for (f1, f2) in ((:A_mul_Bc, :A_mul_B!),
171
171
end
172
172
173
173
# ## AQ
174
- A_mul_B! {T<:BlasFloat} (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) = LAPACK. ormlq! (' R' , ' N' , B. factors, B. τ, A)
174
+ A_mul_B! (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) where {T <: BlasFloat } = LAPACK. ormlq! (' R' , ' N' , B. factors, B. τ, A)
175
175
function * (A:: StridedMatrix{TA} ,B:: LQPackedQ{TB} ) where {TA,TB}
176
176
TAB = promote_type (TA,TB)
177
177
if size (B. factors,2 ) == size (A,2 )
@@ -184,9 +184,9 @@ function *(A::StridedMatrix{TA},B::LQPackedQ{TB}) where {TA,TB}
184
184
end
185
185
186
186
# ## AQc
187
- A_mul_Bc! {T<:BlasReal} (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) = LAPACK. ormlq! (' R' ,' T' ,B. factors,B. τ,A)
188
- A_mul_Bc! {T<:BlasComplex} (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) = LAPACK. ormlq! (' R' ,' C' ,B. factors,B. τ,A)
189
- function A_mul_Bc {TA<:Number,TB<:Number} ( A:: StridedVecOrMat{TA} , B:: LQPackedQ{TB} )
187
+ A_mul_Bc! (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) where {T <: BlasReal } = LAPACK. ormlq! (' R' ,' T' ,B. factors,B. τ,A)
188
+ A_mul_Bc! (A:: StridedMatrix{T} , B:: LQPackedQ{T} ) where {T <: BlasComplex } = LAPACK. ormlq! (' R' ,' C' ,B. factors,B. τ,A)
189
+ function A_mul_Bc ( A:: StridedVecOrMat{TA} , B:: LQPackedQ{TB} ) where {TA <: Number ,TB <: Number }
190
190
TAB = promote_type (TA,TB)
191
191
A_mul_Bc! (copy_oftype (A, TAB), convert (AbstractMatrix{TAB},(B)))
192
192
end
0 commit comments