Skip to content

Commit 94a8bd8

Browse files
fredrikekrevtjnash
authored andcommitted
fix matrix multiplication interaction with HermOrSym and Diagonal (#22474)
(cherry picked from commit 0990d9b)
1 parent dc35b97 commit 94a8bd8

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

base/linalg/diagonal.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,9 @@ end
150150
(*)(D::Diagonal, B::AbstractTriangular) = A_mul_B!(D, copy(B))
151151

152152
(*)(A::AbstractMatrix, D::Diagonal) =
153-
scale!(similar(A, promote_op(*, eltype(A), eltype(D.diag))), A, D.diag)
153+
scale!(similar(A, promote_op(*, eltype(A), eltype(D.diag)), size(A)), A, D.diag)
154154
(*)(D::Diagonal, A::AbstractMatrix) =
155-
scale!(similar(A, promote_op(*, eltype(A), eltype(D.diag))), D.diag, A)
155+
scale!(similar(A, promote_op(*, eltype(A), eltype(D.diag)), size(A)), D.diag, A)
156156

157157
A_mul_B!(A::Union{LowerTriangular,UpperTriangular}, D::Diagonal) =
158158
typeof(A)(A_mul_B!(A.data, D))

test/linalg/diagonal.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,3 +346,18 @@ end
346346
@test logm(D) == Diagonal([logm([1 2; 3 4]), logm([1 2; 3 4])])
347347
@test sqrtm(D) == Diagonal([sqrtm([1 2; 3 4]), sqrtm([1 2; 3 4])])
348348
end
349+
350+
@testset "multiplication with Symmetric/Hermitian" begin
351+
for T in (Float64, Complex128)
352+
D = Diagonal(randn(T, n))
353+
A = randn(T, n, n); A = A'A
354+
S = Symmetric(A)
355+
H = Hermitian(A)
356+
for f in (*, Ac_mul_B, A_mul_Bc, Ac_mul_Bc, At_mul_B, A_mul_Bt, At_mul_Bt)
357+
@test f(D, S) f(Matrix(D), Matrix(S))
358+
@test f(D, H) f(Matrix(D), Matrix(H))
359+
@test f(S, D) f(Matrix(S), Matrix(D))
360+
@test f(S, H) f(Matrix(S), Matrix(H))
361+
end
362+
end
363+
end

0 commit comments

Comments
 (0)