@@ -42,10 +42,13 @@ convert(::Type{AbstractQ{T}}, adjQ::AdjointQ) where {T} = convert(AbstractQ{T},
4242
4343# ... to matrix
4444Matrix {T} (Q:: AbstractQ ) where {T} = convert (Matrix{T}, Q* I) # generic fallback, yields square matrix
45- Matrix {T} (adjQ:: AdjointQ{S} ) where {T,S} = convert (Matrix{T}, lmul! (adjQ, Matrix {S} (I, size (adjQ))))
4645Matrix (Q:: AbstractQ{T} ) where {T} = Matrix {T} (Q)
4746Array {T} (Q:: AbstractQ ) where {T} = Matrix {T} (Q)
4847Array (Q:: AbstractQ ) = Matrix (Q)
48+ AbstractMatrix (Q:: AbstractQ ) = Q* I
49+ AbstractArray (Q:: AbstractQ ) = AbstractMatrix (Q)
50+ AbstractMatrix {T} (Q:: AbstractQ ) where {T} = Matrix {T} (Q)
51+ AbstractArray {T} (Q:: AbstractQ ) where {T} = AbstractMatrix {T} (Q)
4952convert (:: Type{T} , Q:: AbstractQ ) where {T<: AbstractArray } = T (Q)
5053# legacy
5154@deprecate (convert (:: Type{AbstractMatrix{T}} , Q:: AbstractQ ) where {T},
@@ -172,10 +175,10 @@ qsize_check(Q::AbstractQ, P::AbstractQ) =
172175# mimic the AbstractArray fallback
173176* (Q:: AbstractQ{<:Number} ) = Q
174177
175- (* )(Q:: AbstractQ , J :: UniformScaling ) = Q* J . λ
176- function (* )(Q:: AbstractQ , b :: Number )
177- T = promote_type (eltype (Q), typeof (b ))
178- lmul! (convert (AbstractQ{T}, Q), Matrix {T} (b * I , size (Q)))
178+ (* )(Q:: AbstractQ , b :: Number ) = Q* (b * I)
179+ function (* )(Q:: AbstractQ , J :: UniformScaling )
180+ T = promote_type (eltype (Q), eltype (J ))
181+ lmul! (convert (AbstractQ{T}, Q), Matrix {T} (J , size (Q)))
179182end
180183function (* )(Q:: AbstractQ , B:: AbstractVector )
181184 T = promote_type (eltype (Q), eltype (B))
@@ -188,10 +191,10 @@ function (*)(Q::AbstractQ, B::AbstractMatrix)
188191 mul! (similar (B, T, (size (Q, 1 ), size (B, 2 ))), convert (AbstractQ{T}, Q), B)
189192end
190193
191- (* )(J :: UniformScaling , Q:: AbstractQ ) = J . λ * Q
192- function (* )(a :: Number , Q:: AbstractQ )
193- T = promote_type (typeof (a ), eltype (Q))
194- rmul! (Matrix {T} (a * I , size (Q)), convert (AbstractQ{T}, Q))
194+ (* )(a :: Number , Q:: AbstractQ ) = (a * I) * Q
195+ function (* )(J :: UniformScaling , Q:: AbstractQ )
196+ T = promote_type (eltype (J ), eltype (Q))
197+ rmul! (Matrix {T} (J , size (Q)), convert (AbstractQ{T}, Q))
195198end
196199function (* )(A:: AbstractVector , Q:: AbstractQ )
197200 T = promote_type (eltype (A), eltype (Q))
0 commit comments