Skip to content

Commit fbf61e3

Browse files
authored
Type asesrtions in BandedMatrix conversion (#159)
* return type assertions in BandedMatrix * concrete printshow * assertions with variables
1 parent 55d0e2b commit fbf61e3

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/Operators/general/algebra.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,8 @@ function getindex(P::TimesOperator,k::AbstractVector)
346346
vec(Matrix(P[1:1,k]))
347347
end
348348

349+
_rettype(::Type{BandedMatrix{T}}) where {T} = BandedMatrix{T,Matrix{T},Base.OneTo{Int}}
350+
_rettype(T) = T
349351
for TYP in (:Matrix, :BandedMatrix, :RaggedMatrix)
350352
@eval function $TYP(V::SubOperator{T,TO,Tuple{UnitRange{Int},UnitRange{Int}}}) where {T,TO<:TimesOperator}
351353
P = parent(V)
@@ -406,12 +408,14 @@ for TYP in (:Matrix, :BandedMatrix, :RaggedMatrix)
406408

407409
# The following returns a banded Matrix with all rows
408410
# for large k its upper triangular
409-
BA = convert($TYP{T}, P.ops[end][krl[end,1]:krl[end,2],jr])
411+
RT = $TYP{T}
412+
RT2 = _rettype(RT)
413+
BA::RT2 = convert(RT, P.ops[end][krl[end,1]:krl[end,2],jr])::RT
410414
for m = (length(P.ops)-1):-1:1
411-
BA = convert($TYP{T}, P.ops[m][krl[m,1]:krl[m,2],krl[m+1,1]:krl[m+1,2]])*BA
415+
BA = convert(RT, P.ops[m][krl[m,1]:krl[m,2],krl[m+1,1]:krl[m+1,2]])::RT * BA
412416
end
413417

414-
$TYP{T}(BA)
418+
RT(BA)::RT2
415419
end
416420
end
417421

src/show.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ summarystr(B::Operator) = string(typeof(B).name.name, " : ", domainspace(B), "
3434
summary(io::IO, B::Operator) = print(io, summarystr(B))
3535

3636
struct PrintShow
37-
str
37+
c::Char
3838
end
39-
Base.show(io::IO,N::PrintShow) = print(io,N.str)
39+
Base.show(io::IO, N::PrintShow) = print(io, N.c)
4040

4141
show(io::IO, B::Operator; kw...) = summary(io, B)
4242

@@ -49,57 +49,57 @@ function show(io::IO, ::MIME"text/plain", B::Operator;header::Bool=true)
4949
if isbanded(B) && isinf(size(B,1)) && isinf(size(B,2))
5050
BM=B[1:10,1:10]
5151

52-
M=Matrix{Any}(undef,11,11)
53-
fill!(M,PrintShow(""))
52+
M=Matrix{Union{eltype(B), PrintShow}}(undef,11,11)
53+
fill!(M,PrintShow(''))
5454
for j = 1:size(BM,2),k = colrange(BM,j)
5555
M[k,j]=BM[k,j]
5656
end
5757

5858
for k=max(1,11-bandwidth(B,2)):11
59-
M[k,end]=PrintShow("")
59+
M[k,end]=PrintShow('')
6060
end
6161
for j=max(1,11-bandwidth(B,1)):10
62-
M[end,j]=PrintShow("")
62+
M[end,j]=PrintShow('')
6363
end
6464

6565
print_array(io, M)
6666
elseif isinf(size(B,1)) && isinf(size(B,2))
6767
BM=B[1:10,1:10]
6868

69-
M=Matrix{Any}(undef,11,11)
69+
M=Matrix{Union{eltype(B), PrintShow}}(undef,11,11)
7070
for k=1:10,j=1:10
7171
M[k,j]=BM[k,j]
7272
end
7373

74-
M[1,end]=PrintShow("")
75-
M[end,1]=PrintShow("")
74+
M[1,end]=PrintShow('')
75+
M[end,1]=PrintShow('')
7676

7777
for k=2:11
78-
M[k,end]=M[end,k]=PrintShow("")
78+
M[k,end]=M[end,k]=PrintShow('')
7979
end
8080

8181
print_array(io, M)
8282
elseif isinf(size(B,1))
8383
BM=B[1:10,1:size(B,2)]
8484

85-
M=Matrix{Any}(undef,11,size(B,2))
85+
M=Matrix{Union{eltype(B), PrintShow}}(undef,11,size(B,2))
8686
for k=1:10,j=1:size(B,2)
8787
M[k,j]=BM[k,j]
8888
end
8989
for k=1:size(B,2)
90-
M[end,k]=PrintShow("")
90+
M[end,k]=PrintShow('')
9191
end
9292

9393
print_array(io, M)
9494
elseif isinf(size(B,2))
9595
BM=B[1:size(B,1),1:10]
9696

97-
M=Matrix{Any}(undef,size(B,1),11)
97+
M=Matrix{Union{eltype(B), PrintShow}}(undef,size(B,1),11)
9898
for k=1:size(B,1),j=1:10
9999
M[k,j]=BM[k,j]
100100
end
101101
for k=1:size(B,1)
102-
M[k,end]=PrintShow("")
102+
M[k,end]=PrintShow('')
103103
end
104104

105105
print_array(io, M)

0 commit comments

Comments
 (0)