Skip to content

Commit 2f04595

Browse files
authored
Implement issymmetric and ishermitian (#324)
* Implement issymmetric and ishermitian * Add tests * Add comment * Fix format * Bump compat of DP
1 parent d7d27bb commit 2f04595

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/operators.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ function LinearAlgebra.hermitian(v::AbstractPolynomialLike, ::Symbol)
434434
)
435435
return v
436436
end
437+
# This is the same implementation as `LinearAlgebra.ishermitian(::Number)`
438+
LinearAlgebra.ishermitian(p::AbstractPolynomialLike) = p == conj(p)
437439

438440
LinearAlgebra.transpose(v::AbstractVariable) = v
439441
LinearAlgebra.transpose(m::AbstractMonomial) = m
@@ -458,6 +460,7 @@ LinearAlgebra.dot(p::AbstractPolynomialLike, x) = p' * x
458460

459461
LinearAlgebra.symmetric_type(PT::Type{<:_APL}) = PT
460462
LinearAlgebra.symmetric(p::_APL, ::Symbol) = p
463+
LinearAlgebra.issymmetric(::_APL) = true
461464

462465
# Amazingly, this works! Thanks, StaticArrays.jl!
463466
"""

test/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1010
TypedPolynomials = "afbbf031-7a57-5f58-a1b9-b774a0fad08d"
1111

1212
[compat]
13-
DynamicPolynomials = "0.5"
13+
DynamicPolynomials = "0.6"
1414
TypedPolynomials = "0.4"

test/commutative/complex.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,25 @@
8282
4x + 8y^2 - 6x^3,
8383
[x, real(y)] => [2 + 4im, 9 + 0 * x^0],
8484
) == 1184 + 112im + 144im * imag(y) - 8imag(y)^2
85+
86+
@testset "Symmetric and Hermitian" begin
87+
p = a + 1
88+
P = typeof(p)
89+
@test LinearAlgebra.symmetric_type(P) == P
90+
@test LinearAlgebra.issymmetric(p)
91+
@test LinearAlgebra.symmetric(p, :U) === p
92+
@test LinearAlgebra.symmetric(p, :L) === p
93+
@test LinearAlgebra.hermitian_type(P) == P
94+
@test LinearAlgebra.ishermitian(p)
95+
@test LinearAlgebra.hermitian(p, :U) === p
96+
@test LinearAlgebra.hermitian(p, :L) === p
97+
@test !LinearAlgebra.ishermitian(a + im)
98+
q = x + 1
99+
@test !LinearAlgebra.ishermitian(q)
100+
err = ErrorException(
101+
"Complex-valued polynomials cannot be interpreted as hermitian scalars",
102+
)
103+
@test_throws err LinearAlgebra.hermitian(q, :U)
104+
@test_throws err LinearAlgebra.hermitian(q, :L)
105+
end
85106
end

0 commit comments

Comments
 (0)