Skip to content

Commit 0a9c164

Browse files
authored
Remove specialized issymmetric/ishermitian for Diagonal{<:Number} (#1213)
Unfortunately, this definition doesn't work if the matrix contains `NaN`, as it is not equal to itself. It is better to fall back to checking each element by default. This fixes the mismatch in ```julia julia> D = Diagonal(fill(NaN,2)) 2×2 Diagonal{Float64, Vector{Float64}}: NaN ⋅ ⋅ NaN julia> issymmetric(D) true julia> issymmetric(Array(D)) false ```
1 parent ff5648a commit 0a9c164

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

src/diagonal.jl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,7 @@ Base._reverse(A::Diagonal, dims) = reverse!(Matrix(A); dims)
247247
Base._reverse(A::Diagonal, ::Colon) = Diagonal(reverse(A.diag))
248248
Base._reverse!(A::Diagonal, ::Colon) = (reverse!(A.diag); A)
249249

250-
ishermitian(D::Diagonal{<:Number}) = isreal(D.diag)
251250
ishermitian(D::Diagonal) = all(ishermitian, D.diag)
252-
issymmetric(D::Diagonal{<:Number}) = true
253251
issymmetric(D::Diagonal) = all(issymmetric, D.diag)
254252
isposdef(D::Diagonal) = all(isposdef, D.diag)
255253

test/diagonal.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1458,4 +1458,11 @@ end
14581458
@test opnorm(D, Inf) == opnorm(A, Inf)
14591459
end
14601460

1461+
@testset "issymmetric with NaN" begin
1462+
D = Diagonal(fill(NaN,3))
1463+
A = Array(D)
1464+
@test issymmetric(D) == issymmetric(A)
1465+
@test ishermitian(D) == ishermitian(A)
1466+
end
1467+
14611468
end # module TestDiagonal

0 commit comments

Comments
 (0)