Skip to content

Commit 4f33475

Browse files
authored
char to symbol in Symmetric/HermitianOperator convert (#501)
1 parent 718ddbc commit 4f33475

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

src/Operators/general/OperatorLayout.jl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
1-
2-
31
export HermitianOperator, SymmetricOperator, AdjointOperator, TransposeOperator
42

3+
function char_to_symbol(uplo::Char)
4+
if uplo == 'U'
5+
return :U
6+
elseif uplo == 'L'
7+
return :L
8+
else
9+
throw(ArgumentError("invalid uplo $uplo"))
10+
end
11+
end
512

613
struct HermitianOperator{T<:Number,B<:Operator} <: Operator{T}
714
op::B
815
uplo::Char
916
end
1017

1118
HermitianOperator(B::Operator{T}, uplo::Symbol=:U) where {T<:Number} = HermitianOperator{T,typeof(B)}(B, char_uplo(uplo))
12-
convert(::Type{Operator{T}},A::HermitianOperator) where {T}=HermitianOperator(strictconvert(Operator{T},A.op), A.uplo)
19+
function convert(::Type{Operator{T}},A::HermitianOperator) where {T}
20+
HermitianOperator(strictconvert(Operator{T},A.op), char_to_symbol(A.uplo))
21+
end
1322

1423
domainspace(P::HermitianOperator)=domainspace(P.op)
1524
rangespace(P::HermitianOperator)=rangespace(P.op)
@@ -42,7 +51,9 @@ struct SymmetricOperator{T<:Number,B<:Operator} <: Operator{T}
4251
end
4352

4453
SymmetricOperator(B::Operator{T}, uplo::Symbol=:U) where {T<:Number} = SymmetricOperator{T,typeof(B)}(B, char_uplo(uplo))
45-
convert(::Type{Operator{T}},A::SymmetricOperator) where {T}=SymmetricOperator(strictconvert(Operator{T},A.op), A.uplo)
54+
function convert(::Type{Operator{T}},A::SymmetricOperator) where {T}
55+
SymmetricOperator(strictconvert(Operator{T},A.op), char_to_symbol(A.uplo))
56+
end
4657

4758
domainspace(P::SymmetricOperator)=domainspace(P.op)
4859
rangespace(P::SymmetricOperator)=rangespace(P.op)

test/PolynomialSpacesTests.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,17 @@ Base.:(==)(a::UniqueInterval, b::UniqueInterval) = (@assert a.parentinterval ==
326326
end
327327
end
328328

329+
@testset "layout Operators" begin
330+
D = Derivative(Chebyshev())
331+
for S in (SymmetricOperator(D),
332+
HermitianOperator(D))
333+
S2 = convert(Operator{Int}, S)
334+
B = S2[1:10, 1:10]
335+
@test B isa BandedMatrix{Int}
336+
@test S2[1:10, 1:10] == S[1:10, 1:10]
337+
end
338+
end
339+
329340
@testset "inplace ldiv" begin
330341
@testset for T in [Float32, Float64, ComplexF32, ComplexF64]
331342
v = rand(T, 4)

0 commit comments

Comments
 (0)