Skip to content

Commit 55dd2f4

Browse files
authored
Overload permutedims for Diagonal (#39447)
Optimization for performance
1 parent 3a6b2a1 commit 55dd2f4

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,8 @@ transpose(D::Diagonal{<:Number}) = D
552552
transpose(D::Diagonal) = Diagonal(transpose.(D.diag))
553553
adjoint(D::Diagonal{<:Number}) = conj(D)
554554
adjoint(D::Diagonal) = Diagonal(adjoint.(D.diag))
555+
Base.permutedims(D::Diagonal) = D
556+
Base.permutedims(D::Diagonal, perm) = (Base.checkdims_perm(D, D, perm); D)
555557

556558
function diag(D::Diagonal, k::Integer=0)
557559
# every branch call similar(..., ::Int) to make sure the

stdlib/LinearAlgebra/test/diagonal.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,14 @@ end
740740
@test dot(zeros(Int32, 0), Diagonal(zeros(Int, 0)), zeros(Int16, 0)) === 0
741741
end
742742

743+
744+
@testset "permutedims (#39447)" begin
745+
for D in (Diagonal(zeros(5)), Diagonal(zeros(5) .+ 1im), Diagonal([[1,2],[3,4]]))
746+
@test permutedims(D) === permutedims(D,(1,2)) === permutedims(D,(2,1)) === D
747+
@test_throws ArgumentError permutedims(D,(1,3))
748+
end
749+
end
750+
743751
@testset "Inner product" begin
744752
A = Diagonal(rand(10) .+ im)
745753
B = Diagonal(rand(10) .+ im)

0 commit comments

Comments
 (0)