From 92a692d0572e28a848791c475bb3223568e887b7 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Wed, 17 Dec 2025 13:52:25 +0100 Subject: [PATCH] In-place multiplication of `Diagonal` with OffsetMatrix should throw (#1526) --- src/diagonal.jl | 4 ++++ test/diagonal.jl | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/diagonal.jl b/src/diagonal.jl index ddee8981b..94e7cacd2 100644 --- a/src/diagonal.jl +++ b/src/diagonal.jl @@ -349,6 +349,8 @@ end function rmul!(A::AbstractMatrix, D::Diagonal) matmul_size_check(size(A), size(D)) + axes(A, 2) == axes(D.diag, 1) || + throw(ArgumentError(lazy"second axis of A, $(axes(A,2)), does not match first axis of D, $(axes(D, 1))")) for I in CartesianIndices(A) row, col = Tuple(I) @inbounds A[row, col] *= D.diag[col] @@ -370,6 +372,8 @@ end function lmul!(D::Diagonal, B::AbstractVecOrMat) matmul_size_check(size(D), size(B)) + axes(D.diag, 1) == axes(B, 1) || + throw(ArgumentError(lazy"second axis of D, $(axes(D, 2)), does not match first axis of B, $(axes(B, 1))")) for I in CartesianIndices(B) row = I[1] @inbounds B[I] = D.diag[row] * B[I] diff --git a/test/diagonal.jl b/test/diagonal.jl index f83ad3925..ee78bad5c 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -955,7 +955,9 @@ end D = Diagonal(1:4) A = OffsetArray(rand(4,4), 2, 2) @test_throws ArgumentError D * A + @test_throws ArgumentError lmul!(D, A) @test_throws ArgumentError A * D + @test_throws ArgumentError rmul!(A, D) @test_throws ArgumentError mul!(similar(A, size(A)), A, D) @test_throws ArgumentError mul!(similar(A, size(A)), D, A) end