File tree Expand file tree Collapse file tree 2 files changed +19
-4
lines changed Expand file tree Collapse file tree 2 files changed +19
-4
lines changed Original file line number Diff line number Diff line change @@ -319,8 +319,8 @@ const AdjointAbsVec{T} = Adjoint{T,<:AbstractVector}
319319const AdjointAbsMat{T} = Adjoint{T,<: AbstractMatrix }
320320const TransposeAbsVec{T} = Transpose{T,<: AbstractVector }
321321const TransposeAbsMat{T} = Transpose{T,<: AbstractMatrix }
322- const AdjOrTransAbsVec{T} = AdjOrTrans{T,<: AbstractVector }
323- const AdjOrTransAbsMat{T} = AdjOrTrans{T,<: AbstractMatrix }
322+ const AdjOrTransAbsVec{T,V <: AbstractVector } = AdjOrTrans{T,V }
323+ const AdjOrTransAbsMat{T,M <: AbstractMatrix } = AdjOrTrans{T,M }
324324
325325# for internal use below
326326wrapperop (_) = identity
Original file line number Diff line number Diff line change @@ -332,14 +332,29 @@ function (*)(D::Diagonal, V::AbstractVector)
332332 return D. diag .* V
333333end
334334
335- function ( * ) (A:: AdjOrTransAbsMat , D:: Diagonal )
335+ function _diag_adj_mul (A:: AdjOrTransAbsMat , D:: Diagonal )
336336 adj = wrapperop (A)
337337 copy (adj (adj (D) * adj (A)))
338338end
339- function (* )(D:: Diagonal , A:: AdjOrTransAbsMat )
339+ function _diag_adj_mul (A:: AdjOrTransAbsMat{<:Any, <:StridedMatrix} , D:: Diagonal )
340+ Ac = copy_similar (A, promote_op (* , eltype (A), eltype (D)))
341+ rmul! (Ac, D)
342+ end
343+ function _diag_adj_mul (D:: Diagonal , A:: AdjOrTransAbsMat )
340344 adj = wrapperop (A)
341345 copy (adj (adj (A) * adj (D)))
342346end
347+ function _diag_adj_mul (D:: Diagonal , A:: AdjOrTransAbsMat{<:Any, <:StridedMatrix} )
348+ Ac = copy_similar (A, promote_op (* , eltype (A), eltype (D)))
349+ lmul! (D, Ac)
350+ end
351+
352+ function (* )(A:: AdjOrTransAbsMat , D:: Diagonal )
353+ _diag_adj_mul (A, D)
354+ end
355+ function (* )(D:: Diagonal , A:: AdjOrTransAbsMat )
356+ _diag_adj_mul (D, A)
357+ end
343358
344359function rmul! (A:: AbstractMatrix , D:: Diagonal )
345360 matmul_size_check (size (A), size (D))
You can’t perform that action at this time.
0 commit comments