From 063ee3dc334ed44a5c8e2235919a678fffb15c2f Mon Sep 17 00:00:00 2001 From: Tamme Claus Date: Fri, 27 Jun 2025 11:51:40 +0200 Subject: [PATCH 1/4] specialize kron!(::Diagonal, ::Diagonal, ::Diagonal) --- src/diagonal.jl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/diagonal.jl b/src/diagonal.jl index b6e26249..7a304738 100644 --- a/src/diagonal.jl +++ b/src/diagonal.jl @@ -806,6 +806,11 @@ end kron(A::Diagonal, B::Diagonal) = Diagonal(kron(A.diag, B.diag)) +function kron!(C::Diagonal, A::Diagonal, B::Diagonal) + kron!(C.diag, A.diag, B.diag) + return C +end + function kron(A::Diagonal, B::SymTridiagonal) kdv = kron(A.diag, B.dv) # We don't need to drop the last element From 5c2d962afbaef47128b417838e54abaebc87cea1 Mon Sep 17 00:00:00 2001 From: Tamme Claus Date: Fri, 27 Jun 2025 17:03:24 +0200 Subject: [PATCH 2/4] extend "kron! for Diagonal" testset --- test/diagonal.jl | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/test/diagonal.jl b/test/diagonal.jl index 55d493e5..70ae4444 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -1396,14 +1396,25 @@ end end @testset "kron! for Diagonal" begin - a = Diagonal([2,2]) - b = Diagonal([1,1]) + a = Diagonal([1,2]) + b = Diagonal([3,4]) + # Diagonal out c = Diagonal([0,0,0,0]) kron!(c,b,a) - @test c == Diagonal([2,2,2,2]) + @test c == Diagonal([3, 6, 4, 8]) + @test c == kron!(fill(0, 4, 4), Matrix(b), Matrix(a)) # against dense kron! c=Diagonal(Vector{Float64}(undef, 4)) kron!(c,a,b) - @test c == Diagonal([2,2,2,2]) + @test c == Diagonal([3.0, 4.0, 6.0, 8.0]) + + # AbstractArray out + c = fill(0, 4, 4) + kron!(c, b, a) + @test c == diagm([3, 6, 4, 8]) + @test c == kron!(fill(0, 4, 4), Matrix(b), Matrix(a)) # against dense kron! + c = Matrix{Float64}(undef, 4, 4) + kron!(c, a, b) + @test c == diagm([3.0, 4.0, 6.0, 8.0]) end @testset "uppertriangular/lowertriangular" begin From 57ebfb4cd098c0c2e3a6a7618cb4a0d0835200ad Mon Sep 17 00:00:00 2001 From: Tamme Claus Date: Mon, 30 Jun 2025 10:20:59 +0200 Subject: [PATCH 3/4] add whitespaces --- test/diagonal.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/diagonal.jl b/test/diagonal.jl index 70ae4444..0c4be6c0 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -1396,15 +1396,15 @@ end end @testset "kron! for Diagonal" begin - a = Diagonal([1,2]) - b = Diagonal([3,4]) + a = Diagonal([1, 2]) + b = Diagonal([3, 4]) # Diagonal out - c = Diagonal([0,0,0,0]) - kron!(c,b,a) + c = Diagonal([0, 0, 0, 0]) + kron!(c, b, a) @test c == Diagonal([3, 6, 4, 8]) @test c == kron!(fill(0, 4, 4), Matrix(b), Matrix(a)) # against dense kron! - c=Diagonal(Vector{Float64}(undef, 4)) - kron!(c,a,b) + c = Diagonal(Vector{Float64}(undef, 4)) + kron!(c, a, b) @test c == Diagonal([3.0, 4.0, 6.0, 8.0]) # AbstractArray out From 63339e9d6301435ad06d9d5da8364135f609784e Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Mon, 30 Jun 2025 16:20:00 +0200 Subject: [PATCH 4/4] Update test/diagonal.jl --- test/diagonal.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/diagonal.jl b/test/diagonal.jl index 0c4be6c0..712f426c 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -1415,6 +1415,7 @@ end c = Matrix{Float64}(undef, 4, 4) kron!(c, a, b) @test c == diagm([3.0, 4.0, 6.0, 8.0]) + @test_throws DimensionMismatch kron!(Diagonal(zeros(5)), Diagonal(zeros(2)), Diagonal(zeros(2))) end @testset "uppertriangular/lowertriangular" begin