Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/diagonal.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 15 additions & 4 deletions test/diagonal.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down