Skip to content

Commit c90bfd3

Browse files
refactor for AbstractBlockVector moments
- remove most instances of μ.blocks in favour of μ[BlockIndex(n, k)] which should exist for any AbstractBlockVector - have the bivariatemoments constructor return a BlockedVector - the rationale is that the block-analogue of a zero-padded vector isa BlockedVector{T, <: PaddedVector{T}} rather than a BlockVector - remove X and Y from BivariateChebyshevGramMatrix. the whole point for it is to be a light type
1 parent 66f0301 commit c90bfd3

File tree

4 files changed

+113
-101
lines changed

4 files changed

+113
-101
lines changed

src/BivariateGramMatrix.jl

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Bivariate modified moments of ``P_{n,k}(x,y) = p_{n-k}(x) q_k(y)`` with respect
88
function bivariatemoments(μ1::AbstractVector{T}, μ2::AbstractVector{T}) where T
99
@assert length(μ1) == length(μ2)
1010
N = length(μ1)
11-
μ = BlockVector{T}(undef, 1:N)
11+
μ = BlockedVector{T}(undef, 1:N)
1212
for n in 0:N-1
1313
for k in 0:n
14-
μ.blocks[n+1][k+1] = μ1[n-k+1]*μ2[k+1]
14+
μ[BlockIndex(n+1, k+1)] = μ1[n-k+1]*μ2[k+1]
1515
end
1616
end
1717
return μ
@@ -79,8 +79,8 @@ BivariateGramMatrix(W::WT, X::XT, Y::YT) where {T, WT <: AbstractMatrix{T}, XT <
7979
@inline blockrowsupport(G::BivariateGramMatrix, j) = blockrowsupport(MemoryLayout(G), G.W, j)
8080
@inline blockcolsupport(G::BivariateGramMatrix, j) = blockcolsupport(MemoryLayout(G), G.W, j)
8181

82-
BivariateGramMatrix::AbstractVector{T}, X::XT, Y::YT) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}} = BivariateGramMatrix(μ, X, Y, one(T))
83-
function BivariateGramMatrix::AbstractVector{T}, X::XT, Y::YT, p0::T) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}}
82+
BivariateGramMatrix::AbstractBlockVector{T}, X::XT, Y::YT) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}} = BivariateGramMatrix(μ, X, Y, one(T))
83+
function BivariateGramMatrix::AbstractBlockVector{T}, X::XT, Y::YT, p0::T) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}}
8484
N = blocklength(μ)
8585
n = (N+1)÷2
8686
@assert N == blocksize(X, 1) == blocksize(X, 2) == blocksize(Y, 1) == blocksize(Y, 2)
@@ -90,7 +90,7 @@ function BivariateGramMatrix(μ::AbstractVector{T}, X::XT, Y::YT, p0::T) where {
9090
W = BlockMatrix{T}(undef, 1:N, 1:N)
9191
if n > 0
9292
for m in 1:N
93-
setblock!(W, p0*μ[Block(m, 1)], m, 1)
93+
W[Block(m, 1)] = p0*μ[Block(m, 1)]
9494
end
9595
end
9696
if n > 1
@@ -108,27 +108,27 @@ function BivariateGramMatrix(μ::AbstractVector{T}, X::XT, Y::YT, p0::T) where {
108108
WN = BlockMatrix{T}(undef, 1:n, 1:n)
109109
for j in 1:n
110110
for k in j:n
111-
setblock!(WN, viewblock(W, Block(k, j)), k, j)
111+
WN[Block(k, j)] = viewblock(W, Block(k, j))
112112
end
113113
end
114114
WS = Symmetric(WN, :L)
115115
XN = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (0, 0))
116116
for j in 1:n
117117
for k in max(1, j-1):min(n, j+1)
118-
setblock!(XN, viewblock(X, Block(k, j)), k, j)
118+
XN[Block(k, j)] = viewblock(X, Block(k, j))
119119
end
120120
end
121121
YN = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (1, 1))
122122
for j in 1:n
123123
for k in max(1, j-1):min(n, j+1)
124-
setblock!(YN, viewblock(Y, Block(k, j)), k, j)
124+
YN[Block(k, j)] = viewblock(Y, Block(k, j))
125125
end
126126
end
127127
return BivariateGramMatrix(WS, XN, YN)
128128
#return BivariateGramMatrix(Symmetric(W[Block.(1:n), Block.(1:n)], :L), X[Block.(1:n), Block.(1:n)], Y[Block.(1:n), Block.(1:n)])
129129
end
130130

131-
function BivariateGramMatrix::PaddedVector{T}, X::XT, Y::YT, p0::T) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}}
131+
function BivariateGramMatrix::BlockedVector{T, <: PaddedVector{T}}, X::XT, Y::YT, p0::T) where {T, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}}
132132
N = blocklength(μ)
133133
b = blocklength.args[2])-1
134134
n = (N+1)÷2
@@ -139,7 +139,7 @@ function BivariateGramMatrix(μ::PaddedVector{T}, X::XT, Y::YT, p0::T) where {T,
139139
W = BandedBlockBandedMatrix{T}(undef, 1:N, 1:N, (b, 0), (b, b))
140140
if n > 0
141141
for m in 1:min(N, b+1)
142-
setblock!(W, p0*μ[Block(m, 1)], m, 1)
142+
W[Block(m, 1)] = p0*μ[Block(m, 1)]
143143
end
144144
end
145145
if n > 1
@@ -157,20 +157,20 @@ function BivariateGramMatrix(μ::PaddedVector{T}, X::XT, Y::YT, p0::T) where {T,
157157
WN = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (b, 0), (b, b))
158158
for j in 1:n
159159
for k in j:min(n, j+b)
160-
setblock!(WN, viewblock(W, Block(k, j)), k, j)
160+
WN[Block(k, j)] = viewblock(W, Block(k, j))
161161
end
162162
end
163163
WS = Symmetric(WN, :L)
164164
XN = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (0, 0))
165165
for j in 1:n
166166
for k in max(1, j-1):min(n, j+1)
167-
setblock!(XN, viewblock(X, Block(k, j)), k, j)
167+
XN[Block(k, j)] = viewblock(X, Block(k, j))
168168
end
169169
end
170170
YN = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (1, 1))
171171
for j in 1:n
172172
for k in max(1, j-1):min(n, j+1)
173-
setblock!(YN, viewblock(Y, Block(k, j)), k, j)
173+
YN[Block(k, j)] = viewblock(Y, Block(k, j))
174174
end
175175
end
176176
return BivariateGramMatrix(WS, XN, YN)
@@ -351,95 +351,47 @@ end
351351

352352

353353

354-
struct BivariateChebyshevGramMatrix{T, BV <: AbstractBlockVector{T}, BS <: NTuple{2, AbstractUnitRange{Int}}, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}} <: AbstractBivariateGramMatrix{T}
354+
struct BivariateChebyshevGramMatrix{T, BV <: AbstractBlockVector{T}, BS <: NTuple{2, AbstractUnitRange{Int}}} <: AbstractBivariateGramMatrix{T}
355355
μ::BV
356356
axes::BS
357-
X::XT
358-
Y::YT
359-
function BivariateChebyshevGramMatrix{T, BV, BS, XT, YT}::BV, axes::BS, X::XT, Y::YT) where {T, BV, BS, XT, YT}
360-
if size(X) size(Y)
361-
throw(ArgumentError("Cannot construct a BivariateChebyshevGramMatrix with X and Y of different sizes."))
362-
end
363-
if blockbandwidths(X) (1, 1)
364-
throw(ArgumentError("Cannot construct a BivariateChebyshevGramMatrix with a nonblocktridiagonal X."))
365-
end
366-
if blockbandwidths(Y) (1, 1)
367-
throw(ArgumentError("Cannot construct a BivariateChebyshevGramMatrix with a nonblocktridiagonal Y."))
368-
end
369-
new{T, BV, BS, XT, YT}(μ, axes, X, Y)
370-
end
371357
end
372358

373-
BivariateChebyshevGramMatrix::BV, axes::BS, X::XT, Y::YT) where {T, BV <: AbstractBlockVector{T}, BS <: NTuple{2, AbstractUnitRange{Int}}, XT <: AbstractMatrix{T}, YT <: AbstractMatrix{T}} = BivariateChebyshevGramMatrix{T, BV, BS, XT, YT}(μ, axes, X, Y)
374-
375359
function BivariateChebyshevGramMatrix::AbstractBlockVector{T}) where T
376-
n = (length.blocks)+1)÷2
377-
BivariateChebyshevGramMatrix(μ, (blockedrange(1:n), blockedrange(1:n)), _chebyshev_x(T, n), _chebyshev_y(T, n))
360+
n = (blocklength)+1)÷2
361+
BivariateChebyshevGramMatrix(μ, (blockedrange(1:n), blockedrange(1:n)))
378362
end
379363

380-
@inline axes(W::BivariateChebyshevGramMatrix) = W.axes
364+
@inline axes(G::BivariateChebyshevGramMatrix) = G.axes
381365

382-
Base.@propagate_inbounds getindex(W::BivariateChebyshevGramMatrix{T}, blockindex::BlockIndex{2}) where T = _blockindex_getindex(W, blockindex)
366+
Base.@propagate_inbounds getindex(G::BivariateChebyshevGramMatrix{T}, blockindex::BlockIndex{2}) where T = _blockindex_getindex(G, blockindex)
383367

384-
@inline function _blockindex_getindex(W::BivariateChebyshevGramMatrix{T}, bi::BlockIndex{2}) where T
385-
μ = W.μ
386-
@boundscheck blockcheckbounds(W, Block(bi.I))
368+
@inline function _blockindex_getindex(G::BivariateChebyshevGramMatrix{T}, bi::BlockIndex{2}) where T
369+
@boundscheck blockcheckbounds(G, Block(bi.I))
387370
m, n = bi.I
388371
j, k = bi.α
389372
@boundscheck (1 j m) && (1 k n)
390-
v =.blocks[m+n-1][j+k-1]+μ.blocks[abs(m-j-n+k)+j+k-1][j+k-1]+μ.blocks[m-j+n-k+abs(j-k)+1][abs(j-k)+1]+μ.blocks[abs(m-j-n+k)+abs(j-k)+1][abs(j-k)+1])/4
373+
μ = G.μ
374+
v = (μ[BlockIndex(m+n-1, j+k-1)]+μ[BlockIndex(abs(m-j-n+k)+j+k-1, j+k-1)]+μ[BlockIndex(m-j+n-k+abs(j-k)+1, abs(j-k)+1)]+μ[BlockIndex(abs(m-j-n+k)+abs(j-k)+1, abs(j-k)+1)])/4
391375
return v
392376
end
393377

394-
@inline function getindex(W::BivariateChebyshevGramMatrix{T}, i::Vararg{Integer, 2}) where T
395-
@boundscheck checkbounds(W, i...)
396-
@inbounds v = W[findblockindex.(axes(W), i)...]
378+
@inline function getindex(G::BivariateChebyshevGramMatrix{T}, i::Vararg{Integer, 2}) where T
379+
@boundscheck checkbounds(G, i...)
380+
@inbounds v = G[findblockindex.(axes(G), i)...]
397381
return v
398382
end
399383

400-
function _chebyshev_x(::Type{T}, n::Integer) where T
401-
X = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (0, 0))
402-
dat = X.data.blocks
403-
@inbounds for j in 1:n*(n+1)÷2
404-
dat[2, j] = zero(T)
405-
end
406-
@inbounds for j in 1:n-1
407-
for k in 1:j-1
408-
dat[3, k+j*(j-1)÷2] = one(T)/2
409-
end
410-
dat[3, j+j*(j-1)÷2] = one(T)
411-
end
412-
@inbounds for j in 2:n
413-
for k in 1:j
414-
dat[1, k+j*(j-1)÷2] = one(T)/2
415-
end
416-
end
417-
418-
return X
384+
@inline function blockbandwidths(G::BivariateChebyshevGramMatrix{T, <: BlockedVector{T, <: PaddedVector{T}}}) where T
385+
N = length(G.μ.blocks.args[2])
386+
b = ceil(Int, (-1+sqrt(1+8N))/2) - 1
387+
return (b, b)
419388
end
420-
421-
function _chebyshev_y(::Type{T}, n::Integer) where T
422-
Y = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (1, 1))
423-
dat = Y.data.blocks
424-
@inbounds for k in 2:8
425-
for j in 1:n*(n+1)÷2
426-
dat[k, j] = zero(T)
427-
end
428-
end
429-
@inbounds for j in 1:n-1
430-
dat[9, 1+j*(j-1)÷2] = one(T)
431-
for k in 2:j
432-
dat[9, k+j*(j-1)÷2] = one(T)/2
433-
end
434-
end
435-
@inbounds for j in 2:n
436-
for k in 2:j
437-
dat[1, k+j*(j-1)÷2] = one(T)/2
438-
end
439-
end
440-
441-
return Y
389+
@inline function subblockbandwidths(G::BivariateChebyshevGramMatrix{T, <: BlockedVector{T, <: PaddedVector{T}}}) where T
390+
N = length(G.μ.blocks.args[2])
391+
b = ceil(Int, (-1+sqrt(1+8N))/2) - 1
392+
return (b, b)
442393
end
394+
@inline MemoryLayout(G::BivariateChebyshevGramMatrix{T, <: BlockedVector{T, <: PaddedVector{T}}}) where T = BandedBlockBandedLayout()
443395

444396
#
445397
# The computation of the skew-symmetric generators for the bivariate Chebyshev--Gram matrix equation:
@@ -460,38 +412,38 @@ function compute_skew_generators(::Val{1}, W::BivariateChebyshevGramMatrix{T}) w
460412
GB = zeros(T, m, N)
461413
for k in 1:N-1
462414
for j in 1:m
463-
GB[j, k] = -.blocks[m+N][j+k-1]+μ.blocks[abs(m-j-N-1+k)+j+k-1][j+k-1]+μ.blocks[m-j+N+1-k+abs(j-k)+1][abs(j-k)+1]+μ.blocks[abs(m-j-N-1+k)+abs(j-k)+1][abs(j-k)+1])/8
415+
GB[j, k] = -[BlockIndex(m+N, j+k-1)]+μ[BlockIndex(abs(m-j-N-1+k)+j+k-1, j+k-1)]+μ[BlockIndex(m-j+N+1-k+abs(j-k)+1, abs(j-k)+1)]+μ[BlockIndex(abs(m-j-N-1+k)+abs(j-k)+1, abs(j-k)+1)])/8
464416
end
465417
end
466418
for j in 1:m
467-
GB[j, N] = -.blocks[m+N][j+N-1]+μ.blocks[abs(m-j-1)+j+N-1][j+N-1]+μ.blocks[m-j+1+abs(j-N)+1][abs(j-N)+1]+μ.blocks[abs(m-j-1)+abs(j-N)+1][abs(j-N)+1])/4
419+
GB[j, N] = -[BlockIndex(m+N, j+N-1)]+μ[BlockIndex(abs(m-j-1)+j+N-1, j+N-1)]+μ[BlockIndex(m-j+1+abs(j-N)+1, abs(j-N)+1)]+μ[BlockIndex(abs(m-j-1)+abs(j-N)+1, abs(j-N)+1)])/4
468420
end
469421
G.blocks[m, 2] = GB
470422
end
471423
GB = zeros(T, N, N)
472424
@inbounds for k in 1:N-1
473425
for j in 1:N
474426
if abs(k-j-1)+j+k-1 < 2N
475-
GB[j, k] -= μ.blocks[abs(k-j-1)+j+k-1][j+k-1]
427+
GB[j, k] -= μ[BlockIndex(abs(k-j-1)+j+k-1, j+k-1)]
476428
end
477429
if 2N-j+1-k+abs(j-k)+1 < 2N
478-
GB[j, k] -= μ.blocks[2N-j+1-k+abs(j-k)+1][abs(j-k)+1]
430+
GB[j, k] -= μ[BlockIndex(2N-j+1-k+abs(j-k)+1, abs(j-k)+1)]
479431
end
480432
if abs(k-j-1)+abs(j-k)+1 < 2N
481-
GB[j, k] -= μ.blocks[abs(k-j-1)+abs(j-k)+1][abs(j-k)+1]
433+
GB[j, k] -= μ[BlockIndex(abs(k-j-1)+abs(j-k)+1, abs(j-k)+1)]
482434
end
483435
GB[j, k] /= 8
484436
end
485437
end
486438
@inbounds for j in 1:N
487439
if abs(N-j-1)+j+N-1 < 2N
488-
GB[j, N] -= μ.blocks[abs(N-j-1)+j+N-1][j+N-1]
440+
GB[j, N] -= μ[BlockIndex(abs(N-j-1)+j+N-1, j+N-1)]
489441
end
490442
if N-j+1+abs(j-N)+1 < 2N
491-
GB[j, N] -= μ.blocks[N-j+1+abs(j-N)+1][abs(j-N)+1]
443+
GB[j, N] -= μ[BlockIndex(N-j+1+abs(j-N)+1, abs(j-N)+1)]
492444
end
493445
if abs(N-j-1)+abs(j-N)+1 < 2N
494-
GB[j, N] -= μ.blocks[abs(N-j-1)+abs(j-N)+1][abs(j-N)+1]
446+
GB[j, N] -= μ[BlockIndex(abs(N-j-1)+abs(j-N)+1, abs(j-N)+1)]
495447
end
496448
GB[j, N] /= 4
497449
end
@@ -517,38 +469,38 @@ function compute_skew_generators(::Val{2}, W::BivariateChebyshevGramMatrix{T}) w
517469
@inbounds for m in 1:N-1
518470
GB = zeros(T, m, N)
519471
for j in 1:m
520-
GB[j, 1] = -.blocks[m+N][j+1]+μ.blocks[abs(m-j-N+1)+j+1][j+1]+μ.blocks[m-j+N-1+abs(j-2)+1][abs(j-2)+1]+μ.blocks[abs(m-j-N+1)+abs(j-2)+1][abs(j-2)+1])/4
472+
GB[j, 1] = -[BlockIndex(m+N, j+1)]+μ[BlockIndex(abs(m-j-N+1)+j+1, j+1)]+μ[BlockIndex(m-j+N-1+abs(j-2)+1, abs(j-2)+1)]+μ[BlockIndex(abs(m-j-N+1)+abs(j-2)+1, abs(j-2)+1)])/4
521473
end
522474
for k in 2:N
523475
for j in 1:m
524-
GB[j, k] = -.blocks[m+N][j+k]+μ.blocks[abs(m-j-N+k)+j+k][j+k]+μ.blocks[m-j+N-k+abs(j-k-1)+1][abs(j-k-1)+1]+μ.blocks[abs(m-j-N+k)+abs(j-k-1)+1][abs(j-k-1)+1])/8
476+
GB[j, k] = -[BlockIndex(m+N, j+k)]+μ[BlockIndex(abs(m-j-N+k)+j+k, j+k)]+μ[BlockIndex(m-j+N-k+abs(j-k-1)+1, abs(j-k-1)+1)]+μ[BlockIndex(abs(m-j-N+k)+abs(j-k-1)+1, abs(j-k-1)+1)])/8
525477
end
526478
end
527479
G.blocks[m, 2] = GB
528480
end
529481
GB = zeros(T, N, N)
530482
@inbounds for j in 1:N
531483
if abs(1-j)+j+1 < 2N
532-
GB[j, 1] -= μ.blocks[abs(1-j)+j+1][j+1]
484+
GB[j, 1] -= μ[BlockIndex(abs(1-j)+j+1, j+1)]
533485
end
534486
if 2N-j-1+abs(j-2)+1 < 2N
535-
GB[j, 1] -= μ.blocks[2N-j-1+abs(j-2)+1][abs(j-2)+1]
487+
GB[j, 1] -= μ[BlockIndex(2N-j-1+abs(j-2)+1, abs(j-2)+1)]
536488
end
537489
if abs(1-j)+abs(j-2)+1 < 2N
538-
GB[j, 1] -= μ.blocks[abs(1-j)+abs(j-2)+1][abs(j-2)+1]
490+
GB[j, 1] -= μ[BlockIndex(abs(1-j)+abs(j-2)+1, abs(j-2)+1)]
539491
end
540492
GB[j, 1] /= 4
541493
end
542494
@inbounds for k in 2:N
543495
for j in 1:N
544496
if abs(k-j)+j+k < 2N
545-
GB[j, k] -= μ.blocks[abs(k-j)+j+k][j+k]
497+
GB[j, k] -= μ[BlockIndex(abs(k-j)+j+k, j+k)]
546498
end
547499
if 2N-j-k+abs(j-k-1)+1 < 2N
548-
GB[j, k] -= μ.blocks[2N-j-k+abs(j-k-1)+1][abs(j-k-1)+1]
500+
GB[j, k] -= μ[BlockIndex(2N-j-k+abs(j-k-1)+1, abs(j-k-1)+1)]
549501
end
550502
if abs(k-j)+abs(j-k-1)+1 < 2N
551-
GB[j, k] -= μ.blocks[abs(k-j)+abs(j-k-1)+1][abs(j-k-1)+1]
503+
GB[j, k] -= μ[BlockIndex(abs(k-j)+abs(j-k-1)+1, abs(j-k-1)+1)]
552504
end
553505
GB[j, k] /= 8
554506
end
@@ -563,3 +515,51 @@ function compute_skew_generators(::Val{2}, W::BivariateChebyshevGramMatrix{T}) w
563515

564516
G
565517
end
518+
519+
520+
521+
## Move to tests?
522+
523+
function _chebyshev_x(::Type{T}, n::Integer) where T
524+
X = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (0, 0))
525+
dat = X.data.blocks
526+
@inbounds for j in 1:n*(n+1)÷2
527+
dat[2, j] = zero(T)
528+
end
529+
@inbounds for j in 1:n-1
530+
for k in 1:j-1
531+
dat[3, k+j*(j-1)÷2] = one(T)/2
532+
end
533+
dat[3, j+j*(j-1)÷2] = one(T)
534+
end
535+
@inbounds for j in 2:n
536+
for k in 1:j
537+
dat[1, k+j*(j-1)÷2] = one(T)/2
538+
end
539+
end
540+
541+
return X
542+
end
543+
544+
function _chebyshev_y(::Type{T}, n::Integer) where T
545+
Y = BandedBlockBandedMatrix{T}(undef, 1:n, 1:n, (1, 1), (1, 1))
546+
dat = Y.data.blocks
547+
@inbounds for k in 2:8
548+
for j in 1:n*(n+1)÷2
549+
dat[k, j] = zero(T)
550+
end
551+
end
552+
@inbounds for j in 1:n-1
553+
dat[9, 1+j*(j-1)÷2] = one(T)
554+
for k in 2:j
555+
dat[9, k+j*(j-1)÷2] = one(T)/2
556+
end
557+
end
558+
@inbounds for j in 2:n
559+
for k in 2:j
560+
dat[1, k+j*(j-1)÷2] = one(T)/2
561+
end
562+
end
563+
564+
return Y
565+
end

src/FastTransforms.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ using AbstractFFTs
88
using FFTW
99
using GenericFFT
1010

11-
import Base: axes, convert, unsafe_convert, eltype, ndims, adjoint, transpose, show, showerror,
11+
import Base: axes, convert, unsafe_convert, eltype, ndims, adjoint, transpose, show,
1212
*, \, inv, length, size, view, getindex, tail, OneTo
1313

1414
import Base.GMP: Limb
@@ -26,7 +26,7 @@ import BandedMatrices: bandwidths, BandedLayout
2626

2727
import BlockArrays: _blockindex_getindex, blockrowsupport, blockcolsupport
2828

29-
import BlockBandedMatrices: blockbandwidths, subblockbandwidths, blockcolrange
29+
import BlockBandedMatrices: blockbandwidths, subblockbandwidths, blockcolrange, BandedBlockBandedLayout
3030

3131
import FFTW: dct, dct!, idct, idct!, plan_dct!, plan_idct!,
3232
plan_dct, plan_idct, fftwNumber

src/GramMatrix.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ See also [`GramMatrix`](@ref) for the general case.
277277
"""
278278
function ChebyshevGramMatrix::V) where {T, V <: AbstractVector{T}}
279279
n = (length(μ)+1)÷2
280-
ChebyshevGramMatrix{T, V}(μ, n)
280+
ChebyshevGramMatrix(μ, n)
281281
end
282282

283283
@inline size(G::ChebyshevGramMatrix) = (G.n, G.n)

0 commit comments

Comments
 (0)