Skip to content

Commit 8dde54d

Browse files
Specialize Diagonal * Matrix * Diagonal (JuliaLang#46400)
1 parent c876894 commit 8dde54d

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,12 @@ end
368368
return out
369369
end
370370

371+
function (*)(Da::Diagonal, A::AbstractMatrix, Db::Diagonal)
372+
_muldiag_size_check(Da, A)
373+
_muldiag_size_check(A, Db)
374+
return broadcast(*, Da.diag, A, permutedims(Db.diag))
375+
end
376+
371377
# Get ambiguous method if try to unify AbstractVector/AbstractMatrix here using AbstractVecOrMat
372378
@inline mul!(out::AbstractVector, D::Diagonal, V::AbstractVector, alpha::Number, beta::Number) =
373379
_muldiag!(out, D, V, alpha, beta)

stdlib/LinearAlgebra/test/diagonal.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,16 @@ end
653653
@test D2 == D * D
654654
end
655655

656+
@testset "multiplication of 2 Diagonal and a Matix (#46400)" begin
657+
A = randn(10, 10)
658+
D = Diagonal(randn(10))
659+
D2 = Diagonal(randn(10))
660+
@test D * A * D2 D * (A * D2)
661+
@test D * A * D2 (D * A) * D2
662+
@test_throws DimensionMismatch Diagonal(ones(9)) * A * D2
663+
@test_throws DimensionMismatch D * A * Diagonal(ones(9))
664+
end
665+
656666
@testset "multiplication of QR Q-factor and Diagonal (#16615 spot test)" begin
657667
D = Diagonal(randn(5))
658668
Q = qr(randn(5, 5)).Q

0 commit comments

Comments
 (0)