Skip to content

Commit 7106c1a

Browse files
committed
Disambiguate mul!(::Matrix, ::Diagonal, ::Adjoint)
and mul!(::Matrix, ::Diagonal, ::Transpose) as well.
1 parent d062571 commit 7106c1a

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ mul!(out::AbstractMatrix, A::Diagonal, in::AbstractMatrix) = out .= A.diag .* in
272272
mul!(out::AbstractMatrix, A::Adjoint{<:Any,<:Diagonal}, in::AbstractMatrix) = out .= adjoint.(A.parent.diag) .* in
273273
mul!(out::AbstractMatrix, A::Transpose{<:Any,<:Diagonal}, in::AbstractMatrix) = out .= transpose.(A.parent.diag) .* in
274274

275+
mul!(out::AbstractMatrix, A::Diagonal, in::Adjoint{<:Any,<:AbstractMatrix}) = out .= A.diag .* in
276+
mul!(out::AbstractMatrix, A::Diagonal, in::Transpose{<:Any,<:AbstractMatrix}) = out .= A.diag .* in
277+
275278
# ambiguities with Symmetric/Hermitian
276279
# RealHermSymComplex[Sym]/[Herm] only include Number; invariant to [c]transpose
277280
*(A::Diagonal, transB::Transpose{<:Any,<:RealHermSymComplexSym}) = A * transB.parent

stdlib/LinearAlgebra/test/diagonal.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ srand(1)
176176
@test (r = Matrix(D)' * UU ; mul!(UUU, adjoint(D), UU) r UUU)
177177
@test (r = transpose(Matrix(D)) * UU ; mul!(UUU, transpose(D), UU) r UUU)
178178

179+
# Performance specialisations / ambiguity checks for A_mul_B*!
180+
@test (r = Matrix(D) * UU' ; mul!(UUU, D, adjoint(UU)) r UUU)
181+
@test (r = Matrix(D) * transpose(UU) ; mul!(UUU, D, transpose(UU)) r UUU)
182+
179183
# make sure that mul!(A, {Adj|Trans}(B)) works with B as a Diagonal
180184
VV = Array(D)
181185
DD = copy(D)

0 commit comments

Comments
 (0)