Skip to content

Commit f09de94

Browse files
author
KristofferC
committed
Revert "Reroute Symmetric/Hermitian + Diagonal through triangular (#55605)"
This reverts commit 2878479.
1 parent b86812d commit f09de94

File tree

3 files changed

+15
-32
lines changed

3 files changed

+15
-32
lines changed

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,21 @@ end
250250
(+)(Da::Diagonal, Db::Diagonal) = Diagonal(Da.diag + Db.diag)
251251
(-)(Da::Diagonal, Db::Diagonal) = Diagonal(Da.diag - Db.diag)
252252

253+
for f in (:+, :-)
254+
@eval function $f(D::Diagonal{<:Number}, S::Symmetric)
255+
return Symmetric($f(D, S.data), sym_uplo(S.uplo))
256+
end
257+
@eval function $f(S::Symmetric, D::Diagonal{<:Number})
258+
return Symmetric($f(S.data, D), sym_uplo(S.uplo))
259+
end
260+
@eval function $f(D::Diagonal{<:Real}, H::Hermitian)
261+
return Hermitian($f(D, H.data), sym_uplo(H.uplo))
262+
end
263+
@eval function $f(H::Hermitian, D::Diagonal{<:Real})
264+
return Hermitian($f(H.data, D), sym_uplo(H.uplo))
265+
end
266+
end
267+
253268
(*)(x::Number, D::Diagonal) = Diagonal(x * D.diag)
254269
(*)(D::Diagonal, x::Number) = Diagonal(D.diag * x)
255270
(/)(D::Diagonal, x::Number) = Diagonal(D.diag / x)

stdlib/LinearAlgebra/src/special.jl

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -264,25 +264,6 @@ function (-)(A::UniformScaling, B::Diagonal)
264264
Diagonal(Ref(A) .- B.diag)
265265
end
266266

267-
for f in (:+, :-)
268-
@eval function $f(D::Diagonal{<:Number}, S::Symmetric)
269-
uplo = sym_uplo(S.uplo)
270-
return Symmetric(parentof_applytri($f, Symmetric(D, uplo), S), uplo)
271-
end
272-
@eval function $f(S::Symmetric, D::Diagonal{<:Number})
273-
uplo = sym_uplo(S.uplo)
274-
return Symmetric(parentof_applytri($f, S, Symmetric(D, uplo)), uplo)
275-
end
276-
@eval function $f(D::Diagonal{<:Real}, H::Hermitian)
277-
uplo = sym_uplo(H.uplo)
278-
return Hermitian(parentof_applytri($f, Hermitian(D, uplo), H), uplo)
279-
end
280-
@eval function $f(H::Hermitian, D::Diagonal{<:Real})
281-
uplo = sym_uplo(H.uplo)
282-
return Hermitian(parentof_applytri($f, H, Hermitian(D, uplo)), uplo)
283-
end
284-
end
285-
286267
## Diagonal construction from UniformScaling
287268
Diagonal{T}(s::UniformScaling, m::Integer) where {T} = Diagonal{T}(fill(T(s.λ), m))
288269
Diagonal(s::UniformScaling, m::Integer) = Diagonal{eltype(s)}(s, m)

stdlib/LinearAlgebra/test/special.jl

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -536,17 +536,4 @@ end
536536
@test v * S isa Matrix
537537
end
538538

539-
@testset "Partly filled Hermitian and Diagonal algebra" begin
540-
D = Diagonal([1,2])
541-
for S in (Symmetric, Hermitian), uplo in (:U, :L)
542-
M = Matrix{BigInt}(undef, 2, 2)
543-
M[1,1] = M[2,2] = M[1+(uplo == :L), 1 + (uplo == :U)] = 3
544-
H = S(M, uplo)
545-
HM = Matrix(H)
546-
@test H + D == D + H == HM + D
547-
@test H - D == HM - D
548-
@test D - H == D - HM
549-
end
550-
end
551-
552539
end # module TestSpecial

0 commit comments

Comments
 (0)