Skip to content

Commit 1fe7328

Browse files
authored
update for new block arrays (#27)
* update for new block arrays * updates * Drop old Julia versions * v0.3
1 parent 24f9c9d commit 1fe7328

File tree

14 files changed

+46
-58
lines changed

14 files changed

+46
-58
lines changed

.travis.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ os:
44
- linux
55
- osx
66
julia:
7-
- "1.0"
8-
- "1.1"
9-
- "1.2"
107
- "1.3"
118
- nightly
129
matrix:

Project.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ApproxFunBase"
22
uuid = "fbd15aa5-315a-5a7d-a8a4-24992e37be05"
3-
version = "0.2.3"
3+
version = "0.3"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"
@@ -29,8 +29,8 @@ ToeplitzMatrices = "c751599d-da0a-543b-9d20-d0a503d91d24"
2929
[compat]
3030
AbstractFFTs = "0.4, 0.5"
3131
BandedMatrices = "0.14"
32-
BlockArrays = "0.10"
33-
BlockBandedMatrices = "0.6"
32+
BlockArrays = "0.11"
33+
BlockBandedMatrices = "0.7"
3434
Calculus = "0.5"
3535
DSP = "0.6"
3636
DomainSets = "0.1"
@@ -45,7 +45,7 @@ LowRankApprox = "0.2, 0.3, 0.4"
4545
SpecialFunctions = "0.8, 0.9"
4646
StaticArrays = "0.12"
4747
ToeplitzMatrices = "0.6"
48-
julia = "1.0"
48+
julia = "1.3"
4949

5050
[extras]
5151
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

appveyor.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
environment:
22
matrix:
3-
- julia_version: 1
4-
- julia_version: 1.1
5-
- julia_version: 1.2
63
- julia_version: 1.3
74
- julia_version: nightly
85

src/ApproxFunBase.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,17 @@ import SpecialFunctions: sinpi, cospi, airy, besselh,
5858

5959
import StaticArrays: SVector
6060

61-
import BlockArrays: nblocks, blocksize, global2blockindex, globalrange, BlockSizes
62-
6361
import BandedMatrices: bandrange, bandshift,
6462
inbands_getindex, inbands_setindex!, bandwidth, AbstractBandedMatrix,
6563
colstart, colstop, colrange, rowstart, rowstop, rowrange,
6664
bandwidths, _BandedMatrix, BandedMatrix
6765

66+
import BlockArrays: blocksize, block, blockaxes, blockindex
6867
import BlockBandedMatrices: blockbandwidth, blockbandwidths, blockcolstop, blockcolrange,
6968
blockcolstart, blockrowstop, blockrowstart, blockrowrange,
7069
subblockbandwidth, subblockbandwidths, _BlockBandedMatrix,
7170
_BandedBlockBandedMatrix, BandedBlockBandedMatrix, BlockBandedMatrix,
72-
isblockbanded, isbandedblockbanded, bb_numentries, BlockBandedSizes,
73-
BandedBlockBandedSizes
71+
isblockbanded, isbandedblockbanded, bb_numentries, BlockBandedSizes
7472

7573
import FillArrays: AbstractFill, getindex_value
7674
import LazyArrays: cache

src/Caching/bandedblockbanded.jl

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ function CachedOperator(::Type{BandedBlockBandedMatrix}, op::Operator)
33
l,u = blockbandwidths(op)
44
λ,μ = subblockbandwidths(op)
55
data = BandedBlockBandedMatrix{eltype(op)}(undef,
6-
(blocklengths(rangespace(op))[1:0],blocklengths(domainspace(op))[1:0]),
6+
blocklengths(rangespace(op))[1:0],blocklengths(domainspace(op))[1:0],
77
(l,u), (λ,μ))
88

99
CachedOperator(op,data,size(data),domainspace(op),rangespace(op),(-l,u),false)
@@ -23,12 +23,10 @@ function resizedata!(B::CachedOperator{T,<:BandedBlockBandedMatrix{T}}, ::Colon,
2323
rows = blocklengths(rangespace(B.op))[1:J+l]
2424
cols = blocklengths(domainspace(B.op))[1:J]
2525

26-
bs = BandedBlockBandedSizes(rows, cols, l, u, λ, μ)
27-
2826
# B.data = _BandedBlockBandedMatrix(PseudoBlockArray
2927

30-
blocks = PseudoBlockArray(pad(B.data.data.blocks,:,(l+u+1)*sum(cols)), bs.data_block_sizes)
31-
B.data = _BandedBlockBandedMatrix(blocks, bs)
28+
blocks = PseudoBlockArray(pad(B.data.data.blocks,:,(l+u+1)*sum(cols)), rows, cols)
29+
B.data = _BandedBlockBandedMatrix(blocks, rows, cols, (l, u), (λ, μ))
3230

3331
jr=B.datasize[2]+1:col
3432
kr=colstart(B.data,jr[1]):colstop(B.data,jr[end])
@@ -55,14 +53,7 @@ function resizedata!(B::CachedOperator{T,<:BandedBlockBandedMatrix{T}},n::Intege
5553
K = Int(block(rangespace(B),n))
5654
rows = blocklengths(rangespace(B.op))[1:K]
5755

58-
b_bs = BlockSizes((BlockArrays._cumul_vec(rows), B.data.block_sizes.block_sizes.cumul_sizes[2]))
59-
60-
61-
bs = BandedBlockBandedSizes(b_bs, B.data.block_sizes.data_block_sizes,
62-
l, u, λ, μ)
63-
64-
65-
B.data = _BandedBlockBandedMatrix(B.data.data, bs)
56+
B.data = _BandedBlockBandedMatrix(B.data.data, blockedrange(rows), (l,u), (λ,μ))
6657
B.datasize = (n,B.datasize[2])
6758

6859
B

src/Caching/blockbanded.jl

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
function default_BlockBandedMatrix(S::Operator)
77
ret = BlockBandedMatrix(Zeros, S)
88

9-
@inbounds for J=Block(1):Block(nblocks(ret,2)), K=blockcolrange(ret,Int(J))
9+
@inbounds for J=blockaxes(ret,2), K=blockcolrange(ret,Int(J))
1010
ret[K,J] = view(S,K,J)
1111
end
1212
ret
@@ -71,7 +71,7 @@ function CachedOperator(::Type{BlockBandedMatrix},op::Operator;padding::Bool=fal
7171
l,u=blockbandwidths(op)
7272
padding && (u+=l+diagblockshift(op))
7373
data=BlockBandedMatrix{eltype(op)}(undef,
74-
(Vector{Int}(), Vector{Int}()),
74+
Vector{Int}(), Vector{Int}(),
7575
(l,u))
7676
CachedOperator(op,data,(0,0),domainspace(op),rangespace(op),(-l,u),padding)
7777
end
@@ -251,17 +251,16 @@ function resizedata!(QR::QROperator{CachedOperator{T,BlockBandedMatrix{T},
251251
bs = R.block_sizes
252252

253253
for j =QR.ncols+1 : col # first column of block
254-
bi = global2blockindex(bs, (j, j)) # converts from global indices to block indices
255-
K1, J1 = bi.I # this is the diagonal block corresponding to j
256-
κ, ξ = bi.α
254+
bi = findblockindex.(bs.axes, (j, j)) # converts from global indices to block indices
255+
K1, J1 = Int.(block.(bi)) # this is the diagonal block corresponding to j
256+
κ, ξ = blockindex.(bi)
257257

258258
st = bs.block_strides[J1] # the stride of the matrix
259259
shft = bs.block_starts[K1,J1]-1 + st*-1) + κ-1 # the index of the pointer to the j, j entry
260260

261261

262262
K_CS = Int(blockcolstop(R,J1)) # last row in J-th blockcolumn
263-
k_end = globalrange(bs, (K_CS, J1))[1][end]
264-
263+
k_end = last(bs.axes[1][Block(K_CS)])
265264

266265
w_j = W.cols[j] # the data index for the j-th column of W
267266
wp = w+sz*(w_j-1) # j-th column of W
@@ -278,7 +277,7 @@ function resizedata!(QR::QROperator{CachedOperator{T,BlockBandedMatrix{T},
278277
# scale rest of columns in first block
279278
# for ξ_2 = 2:
280279

281-
for ξ_2 = ξ:blocksize(bs, 2, J1)
280+
for ξ_2 = ξ:length(bs.axes[2][Block(J1)])
282281
# we now apply I-2v*v' in place
283282
r_sh = r+sz*(shft + st*(ξ_2-ξ)) # the pointer the (j,ξ_2)-th entry
284283
dt = BandedMatrices.dot(M, wp, 1, r_sh, 1)
@@ -288,7 +287,7 @@ function resizedata!(QR::QROperator{CachedOperator{T,BlockBandedMatrix{T},
288287
for J = J1+1:min(K1+u,J_end)
289288
st = bs.block_strides[J]
290289
shft = bs.block_starts[K1,J] + κ-2 # the index of the pointer to the j, j entry
291-
for ξ_2 = 1:blocksize(bs.block_sizes, 2, J)
290+
for ξ_2 = axes(bs.axes[2][Block(J)],1)
292291
# we now apply I-2v*v' in place
293292
# r_sh = r+sz*(shft + st*(ξ_2-1)) # the pointer the (j,ξ_2)-th entry
294293

src/Fun.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ extrapolate(f::Fun,x,y,z...) = extrapolate(f.coefficients,f.space,Vec(x,y,z...))
244244
values(f::Fun,dat...) = itransform(f.space,f.coefficients,dat...)
245245
points(f::Fun) = points(f.space,ncoefficients(f))
246246
ncoefficients(f::Fun) = length(f.coefficients)
247-
nblocks(f::Fun) = block(space(f),ncoefficients(f)).n[1]
247+
blocksize(f::Fun) = (block(space(f),ncoefficients(f)).n[1],)
248248

249249
function stride(f::Fun)
250250
# Check only for stride 2 at the moment

src/Operators/Operator.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ macro functional(FF)
8585
end
8686

8787

88-
nblocks(A::Operator,k) = k==1 ? length(blocklengths(rangespace(A))) : length(blocklengths(domainspace(A)))
89-
nblocks(A::Operator) = (nblocks(A,1),nblocks(A,2))
88+
blocksize(A::Operator,k) = k==1 ? length(blocklengths(rangespace(A))) : length(blocklengths(domainspace(A)))
89+
blocksize(A::Operator) = (blocksize(A,1),blocksize(A,2))
9090

9191

9292
Base.size(A::Operator) = (size(A,1),size(A,2))
@@ -247,8 +247,8 @@ defaultgetindex(A::Operator,k,j) = view(A,k,j)
247247
# TODO: finite dimensional blocks
248248
blockcolstart(A::Operator,J::Integer) = Block(max(1,J-blockbandwidth(A,2)))
249249
blockrowstart(A::Operator,K::Integer) = Block(max(1,K-blockbandwidth(A,1)))
250-
blockcolstop(A::Operator,J::Integer) = Block(min(J+blockbandwidth(A,1),nblocks(A,1)))
251-
blockrowstop(A::Operator,K::Integer) = Block(min(K+blockbandwidth(A,2),nblocks(A,2)))
250+
blockcolstop(A::Operator,J::Integer) = Block(min(J+blockbandwidth(A,1),blocksize(A,1)))
251+
blockrowstop(A::Operator,K::Integer) = Block(min(K+blockbandwidth(A,2),blocksize(A,2)))
252252

253253
blockrows(A::Operator,K::Integer) = blockrange(rangespace(A),K)
254254
blockcols(A::Operator,J::Integer) = blockrange(domainspace(A),J)
@@ -681,12 +681,12 @@ BandedMatrix(::Type{Zeros}, V::Operator) = BandedMatrix(Zeros{eltype(V)}(size(V)
681681
Matrix(::Type{Zeros}, V::Operator) = Matrix(Zeros{eltype(V)}(size(V)))
682682
BandedBlockBandedMatrix(::Type{Zeros}, V::Operator) =
683683
BandedBlockBandedMatrix(Zeros{eltype(V)}(size(V)),
684-
(blocklengths(rangespace(V)), blocklengths(domainspace(V))),
684+
blocklengths(rangespace(V)), blocklengths(domainspace(V)),
685685
blockbandwidths(V), subblockbandwidths(V))
686686
BlockBandedMatrix(::Type{Zeros}, V::Operator) =
687687
BlockBandedMatrix(Zeros{eltype(V)}(size(V)),
688-
(AbstractVector{Int}(blocklengths(rangespace(V))),
689-
AbstractVector{Int}(blocklengths(domainspace(V)))),
688+
AbstractVector{Int}(blocklengths(rangespace(V))),
689+
AbstractVector{Int}(blocklengths(domainspace(V))),
690690
blockbandwidths(V))
691691
RaggedMatrix(::Type{Zeros}, V::Operator) =
692692
RaggedMatrix(Zeros{eltype(V)}(size(V)),

src/Operators/SubOperator.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ function BandedBlockBandedMatrix(::Type{Zeros}, S::SubOperator)
231231
rows,cols = blocklengths(rangespace(S)), blocklengths(domainspace(S))
232232

233233
BandedBlockBandedMatrix(Zeros{eltype(KO)}(sum(rows),sum(cols)),
234-
(rows,cols), (l,u), (λ-jsh,μ+ksh))
234+
rows,cols, (l,u), (λ-jsh,μ+ksh))
235235
end
236236

237237
function BandedBlockBandedMatrix(::Type{Zeros}, S::SubOperator{T,B,Tuple{BlockRange1,BlockRange1}}) where {T,B}
@@ -250,7 +250,7 @@ function BandedBlockBandedMatrix(::Type{Zeros}, S::SubOperator{T,B,Tuple{BlockRa
250250
KJR = blocklengthrange(dt,JR)
251251

252252
BandedBlockBandedMatrix(Zeros{eltype(KO)}(sum(KBR),sum(KJR)),
253-
(AbstractVector{Int}(KBR),AbstractVector{Int}(KJR)), (l+bl_sh,u-bl_sh), (λ,μ))
253+
AbstractVector{Int}(KBR),AbstractVector{Int}(KJR), (l+bl_sh,u-bl_sh), (λ,μ))
254254
end
255255

256256

src/Operators/general/InterlaceOperator.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ function InterlaceOperator(ops::AbstractMatrix{Operator{T}},ds::Space,rs::Space)
9797
dsi = interlacer(ds)
9898
rsi = interlacer(rs)
9999

100-
if size(ops,2) == p && all(isbanded,ops) &&# only support nblocks 1 for now
100+
if size(ops,2) == p && all(isbanded,ops) &&# only support blocksize (1,) for now
101101
all(i->isa(i,AbstractFill) && getindex_value(i) == 1, dsi.blocks) &&
102102
all(i->isa(i,AbstractFill) && getindex_value(i) == 1, rsi.blocks)
103103
l,u = 0,0
@@ -393,19 +393,19 @@ function blockbanded_interlace_convert!(S,ret)
393393
l,u=blockbandwidths(S)::Tuple{Int,Int}
394394

395395
M = map(op -> begin
396-
KR_size = Block.(Int(first(KR)):min(Int(last(KR)),nblocks(op,1)))
397-
JR_size = Block.(Int(first(JR)):min(Int(last(JR)),nblocks(op,2)))
396+
KR_size = Block.(Int(first(KR)):min(Int(last(KR)),blocksize(op,1)))
397+
JR_size = Block.(Int(first(JR)):min(Int(last(JR)),blocksize(op,2)))
398398
BlockBandedMatrix(view(op, KR_size, JR_size))
399399
end, parent(S).ops)
400400

401-
for J=Block(1):Block(nblocks(ret,2)),K=blockcolrange(ret,Int(J))
401+
for J=blockaxes(ret,2),K=blockcolrange(ret,Int(J))
402402
Bs=view(ret,K,J)
403403
j = 0
404404
for ξ=1:size(M,2)
405405
k = 0
406406
m = 0
407407
for κ=1:size(M,1)
408-
if K.n[1] nblocks(M[κ,ξ],1) && J.n[1] nblocks(M[κ,ξ],2)
408+
if K.n[1] blocksize(M[κ,ξ],1) && J.n[1] blocksize(M[κ,ξ],2)
409409
MKJ = M[κ,ξ][K,J]::Matrix{T}
410410
n,m = size(MKJ)
411411
Bs[k+1:k+n,j+1:j+m] = MKJ

0 commit comments

Comments
 (0)