Skip to content

Commit 8ff014f

Browse files
cossioandreasnoack
authored andcommitted
sum for diagonal (and related) matrices (#32184)
1 parent 042504d commit 8ff014f

File tree

6 files changed

+21
-0
lines changed

6 files changed

+21
-0
lines changed

stdlib/LinearAlgebra/src/bidiag.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,3 +724,5 @@ function eigvecs(M::Bidiagonal{T}) where T
724724
Q #Actually Triangular
725725
end
726726
eigen(M::Bidiagonal) = Eigen(eigvals(M), eigvecs(M))
727+
728+
Base._sum(A::Bidiagonal, ::Colon) = sum(A.dv) + sum(A.ev)

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,3 +575,5 @@ end
575575

576576
cholesky(A::Diagonal, ::Val{false} = Val(false); check::Bool = true) =
577577
cholesky!(cholcopy(A), Val(false); check = check)
578+
579+
Base._sum(A::Diagonal, ::Colon) = sum(A.diag)

stdlib/LinearAlgebra/src/tridiag.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,3 +646,6 @@ function SymTridiagonal{T}(M::Tridiagonal) where T
646646
throw(ArgumentError("Tridiagonal is not symmetric, cannot convert to SymTridiagonal"))
647647
end
648648
end
649+
650+
Base._sum(A::Tridiagonal, ::Colon) = sum(A.d) + sum(A.dl) + sum(A.du)
651+
Base._sum(A::SymTridiagonal, ::Colon) = sum(A.dv) + 2sum(A.ev)

stdlib/LinearAlgebra/test/bidiag.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,4 +409,9 @@ end
409409
@test vcat((Aub\bb)...) UpperTriangular(A)\b
410410
end
411411

412+
@testset "sum" begin
413+
@test sum(Bidiagonal([1,2,3], [1,2], :U)) == 9
414+
@test sum(Bidiagonal([1,2,3], [1,2], :L)) == 9
415+
end
416+
412417
end # module TestBidiagonal

stdlib/LinearAlgebra/test/diagonal.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,4 +548,8 @@ end
548548
@test E.vectors == [0 1 0; 1 0 0; 0 0 1]
549549
end
550550

551+
@testset "sum" begin
552+
@test sum(Diagonal([1,2,3])) == 6
553+
end
554+
551555
end # module TestDiagonal

stdlib/LinearAlgebra/test/tridiag.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,4 +445,9 @@ end
445445
@test cond(SymTridiagonal([1,2,3], [0,0])) 3
446446
end
447447

448+
@testset "sum" begin
449+
@test sum(Tridiagonal([1,2], [1,2,3], [7,8])) == 24
450+
@test sum(SymTridiagonal([1,2,3], [1,2])) == 12
451+
end
452+
448453
end # module TestTridiagonal

0 commit comments

Comments
 (0)