Skip to content

Commit ddf1794

Browse files
authored
Support Mapped-Weighted OPs (#69)
* Support Mapped-Weighted OPs * Improvements to massmatrix and interlace * Update test_lanczos.jl * Much faster OffHilbert * two-interval Hilbert inverse works * much faster solves * Update Project.toml * v0.4.7 * sum for PiecewiseInterlace * mapped log kernel * Support both Weighted(::SubArray) and SubArray(::Weighted,...) * remove old Hilber * Update stieltjes.jl * Update test_stieltjes.jl * bug fixes * Update Project.toml * fix plotting for PiecewiseInterlace * Update Project.toml * Update Project.toml * fixes for DomainSets v0.5.5
1 parent ef2f44a commit ddf1794

18 files changed

+515
-227
lines changed

Project.toml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ClassicalOrthogonalPolynomials"
22
uuid = "b30e2e7b-c4ee-47da-9d5f-2c5c27239acd"
33
authors = ["Sheehan Olver <[email protected]>"]
4-
version = "0.4.6"
4+
version = "0.4.7"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
@@ -25,22 +25,22 @@ QuasiArrays = "c4ea9172-b204-11e9-377d-29865faadc5c"
2525
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
2626

2727
[compat]
28-
ArrayLayouts = "0.7"
29-
BandedMatrices = "0.16.5"
30-
BlockArrays = "0.16"
31-
BlockBandedMatrices = "0.10.9"
28+
ArrayLayouts = "0.7.5"
29+
BandedMatrices = "0.16.11"
30+
BlockArrays = "0.16.6"
31+
BlockBandedMatrices = "0.11"
3232
ContinuumArrays = "0.9.1"
33-
DomainSets = "0.5"
33+
DomainSets = "0.5.6"
3434
FFTW = "1.1"
3535
FastGaussQuadrature = "0.4.3"
3636
FastTransforms = "0.12"
3737
FillArrays = "0.11, 0.12"
3838
HypergeometricFunctions = "0.3.4"
39-
InfiniteArrays = "0.11.1, 0.12"
40-
InfiniteLinearAlgebra = "0.5.8"
39+
InfiniteArrays = "0.12"
40+
InfiniteLinearAlgebra = "0.6"
4141
IntervalSets = "0.5"
42-
LazyArrays = "0.21.16"
43-
LazyBandedMatrices = "0.6.6"
42+
LazyArrays = "0.21.20"
43+
LazyBandedMatrices = "0.7"
4444
QuasiArrays = "0.7"
4545
SpecialFunctions = "1.0"
4646
julia = "1.6"

src/ClassicalOrthogonalPolynomials.jl

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,26 @@ import Base: @_inline_meta, axes, getindex, unsafe_getindex, convert, prod, *, /
1212
first, last, Slice, size, length, axes, IdentityUnitRange, sum, _sum, cumsum,
1313
to_indices, _maybetail, tail, getproperty, inv, show, isapprox, summary
1414
import Base.Broadcast: materialize, BroadcastStyle, broadcasted, Broadcasted
15-
import LazyArrays: MemoryLayout, Applied, ApplyStyle, flatten, _flatten, colsupport, adjointlayout,
15+
import LazyArrays: MemoryLayout, Applied, ApplyStyle, flatten, _flatten, adjointlayout,
1616
sub_materialize, arguments, sub_paddeddata, paddeddata, PaddedLayout, resizedata!, LazyVector, ApplyLayout, call,
1717
_mul_arguments, CachedVector, CachedMatrix, LazyVector, LazyMatrix, axpy!, AbstractLazyLayout, BroadcastLayout,
18-
AbstractCachedVector, AbstractCachedMatrix, paddeddata, cache_filldata!
18+
AbstractCachedVector, AbstractCachedMatrix, paddeddata, cache_filldata!,
19+
simplifiable, PaddedArray
1920
import ArrayLayouts: MatMulVecAdd, materialize!, _fill_lmul!, sublayout, sub_materialize, lmul!, ldiv!, ldiv, transposelayout, triangulardata,
20-
subdiagonaldata, diagonaldata, supdiagonaldata
21+
subdiagonaldata, diagonaldata, supdiagonaldata, mul, rowsupport, colsupport
2122
import LazyBandedMatrices: SymTridiagonal, Bidiagonal, Tridiagonal, unitblocks, BlockRange1, AbstractLazyBandedLayout
2223
import LinearAlgebra: pinv, factorize, qr, adjoint, transpose, dot
2324
import BandedMatrices: AbstractBandedLayout, AbstractBandedMatrix, _BandedMatrix, bandeddata
2425
import FillArrays: AbstractFill, getindex_value, SquareEye
25-
26+
import DomainSets: components
2627
import QuasiArrays: cardinality, checkindex, QuasiAdjoint, QuasiTranspose, Inclusion, SubQuasiArray,
2728
QuasiDiagonal, MulQuasiArray, MulQuasiMatrix, MulQuasiVector, QuasiMatMulMat,
2829
ApplyQuasiArray, ApplyQuasiMatrix, LazyQuasiArrayApplyStyle, AbstractQuasiArrayApplyStyle,
2930
LazyQuasiArray, LazyQuasiVector, LazyQuasiMatrix, LazyLayout, LazyQuasiArrayStyle,
3031
_getindex, layout_getindex, _factorize, AbstractQuasiArray, AbstractQuasiMatrix, AbstractQuasiVector
3132

3233
import InfiniteArrays: OneToInf, InfAxes, Infinity, AbstractInfUnitRange, InfiniteCardinal, InfRanges
34+
import InfiniteLinearAlgebra: chop!, chop
3335
import ContinuumArrays: Basis, Weight, basis, @simplify, Identity, AbstractAffineQuasiVector, ProjectionFactorization,
3436
inbounds_getindex, grid, plotgrid, transform, transform_ldiv, TransformFactorization, QInfAxes, broadcastbasis, Expansion,
3537
AffineQuasiVector, AffineMap, WeightLayout, WeightedBasisLayout, WeightedBasisLayouts, demap, AbstractBasisLayout, BasisLayout,
@@ -60,22 +62,12 @@ include("interlace.jl")
6062

6163
cardinality(::FullSpace{<:AbstractFloat}) = ℵ₁
6264
cardinality(::EuclideanDomain) = ℵ₁
65+
cardinality(::Union{DomainSets.RealNumbers,DomainSets.ComplexNumbers}) = ℵ₁
66+
cardinality(::Union{DomainSets.Integers,DomainSets.Rationals,DomainSets.NaturalNumbers}) = ℵ₀
6367

6468
transform_ldiv(A::AbstractQuasiArray{T}, f::AbstractQuasiArray{V}, ::Tuple{<:Any,InfiniteCardinal{0}}) where {T,V} =
6569
adaptivetransform_ldiv(convert(AbstractQuasiArray{promote_type(T,V)}, A), f)
6670

67-
function chop!(c::AbstractVector, tol::Real)
68-
@assert tol >= 0
69-
70-
for k=length(c):-1:1
71-
if abs(c[k]) > tol
72-
resize!(c,k)
73-
return c
74-
end
75-
end
76-
resize!(c,0)
77-
c
78-
end
7971

8072
setaxis(c, ::OneToInf) = c
8173
setaxis(c, ax::BlockedUnitRange) = PseudoBlockVector(c, (ax,))
@@ -185,6 +177,12 @@ singularities(r::Base.RefValue) = r[] # pass through
185177
orthogonalityweight(P::SubQuasiArray{<:Any,2,<:Any,<:Tuple{AbstractAffineQuasiVector,Slice}}) =
186178
orthogonalityweight(parent(P))[parentindices(P)[1]]
187179

180+
function massmatrix(P::SubQuasiArray{<:Any,2,<:Any,<:Tuple{AbstractAffineQuasiVector,Slice}})
181+
Q = parent(P)
182+
kr,jr = parentindices(P)
183+
massmatrix(Q)/kr.A
184+
end
185+
188186
_weighted(w, P) = w .* P
189187
weighted(P::AbstractQuasiMatrix) = _weighted(orthogonalityweight(P), P)
190188

src/classical/chebyshev.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ chebysevuweight(d::AbstractInterval{T}) where T = ChebyshevUWeight{float(T)}[aff
7373
==(::Chebyshev, ::Legendre) = false
7474
==(::Legendre, ::Chebyshev) = false
7575

76+
summary(io::IO, w::ChebyshevT{Float64}) = print(io, "ChebyshevT()")
77+
summary(io::IO, w::ChebyshevU{Float64}) = print(io, "ChebyshevU()")
78+
7679
OrthogonalPolynomial(w::ChebyshevWeight{kind,T}) where {kind,T} = Chebyshev{kind,T}()
7780
orthogonalityweight(P::Chebyshev{kind,T}) where {kind,T} = ChebyshevWeight{kind,T}()
7881

@@ -158,6 +161,12 @@ end
158161
ApplyQuasiMatrix(*, ChebyshevU{T}(), A)
159162
end
160163

164+
@simplify function *(D::Derivative{<:Any,<:ChebyshevInterval}, W::Weighted{<:Any,<:ChebyshevU})
165+
T = promote_type(eltype(D),eltype(W))
166+
Weighted(ChebyshevT{T}()) * _BandedMatrix((-one(T):-one(T):(-∞))', ℵ₀, 1,-1)
167+
end
168+
169+
161170
#####
162171
# Conversion
163172
#####

src/classical/fourier.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ end
6161
end
6262

6363

64-
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), c::BroadcastQuasiVector{<:Any,typeof(cos),<:Tuple{<:Inclusion{<:Any,<:FullSpace}}}, F::Fourier)
64+
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), c::BroadcastQuasiVector{<:Any,typeof(cos),<:Tuple{<:Inclusion{<:Any,RealNumbers}}}, F::Fourier)
6565
axes(c,1) == axes(F,1) || throw(DimensionMismatch())
6666
T = promote_type(eltype(c), eltype(F))
6767
# Use LinearAlgebra.Tridiagonal for now since broadcasting support not complete for LazyBandedMatrices.Tridiagonal
@@ -71,7 +71,7 @@ function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), c::BroadcastQuasiVec
7171
end
7272

7373

74-
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), s::BroadcastQuasiVector{<:Any,typeof(sin),<:Tuple{<:Inclusion{<:Any,<:FullSpace}}}, F::Fourier)
74+
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), s::BroadcastQuasiVector{<:Any,typeof(sin),<:Tuple{<:Inclusion{<:Any,RealNumbers}}}, F::Fourier)
7575
axes(s,1) == axes(F,1) || throw(DimensionMismatch())
7676
T = promote_type(eltype(s), eltype(F))
7777
# Use LinearAlgebra.Tridiagonal for now since broadcasting support not complete for LazyBandedMatrices.Tridiagonal

src/classical/jacobi.jl

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ broadcasted(::LazyQuasiArrayStyle{1}, ::typeof(*), w::AbstractJacobiWeight, v::A
1010
broadcasted(::LazyQuasiArrayStyle{1}, ::typeof(sqrt), w::AbstractJacobiWeight) =
1111
JacobiWeight(w.a/2, w.b/2)
1212

13-
broadcasted(::LazyQuasiArrayStyle{1}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, w::AbstractJacobiWeight, ::Base.RefValue{Val{k}}) where k =
13+
broadcasted(::LazyQuasiArrayStyle{1}, ::typeof(Base.literal_pow), ::Base.RefValue{typeof(^)}, w::AbstractJacobiWeight, ::Base.RefValue{Val{k}}) where k =
1414
JacobiWeight(k * w.a, k * w.b)
1515

1616
struct JacobiWeight{T} <: AbstractJacobiWeight{T}
@@ -136,7 +136,7 @@ Jacobi(P::Legendre{T}) where T = Jacobi(zero(T), zero(T))
136136
"""
137137
jacobip(n, a, b, z)
138138
139-
computes the `n`-th Jacobi polynomial, orthogonal with
139+
computes the `n`-th Jacobi polynomial, orthogonal with
140140
respec to `(1-x)^a*(1+x)^b`, at `z`.
141141
"""
142142
jacobip(n::Integer, a, b, z::Number) = Base.unsafe_getindex(Jacobi{promote_type(typeof(a), typeof(b), typeof(z))}(a,b), z, n+1)
@@ -237,25 +237,40 @@ end
237237
# Mass Matrix
238238
#########
239239

240-
legendre_massmatrix(::Type{T}) where T = Diagonal(convert(T,2) ./ (2(0:∞) .+ 1))
240+
# massmatrix(P) = Weighted(P)'P
241+
massmatrix(P::Legendre{T}) where T = Diagonal(convert(T,2) ./ (2(0:∞) .+ 1))
241242

243+
244+
245+
"""
246+
legendre_massmatrix
247+
248+
computes the massmatrix by first re-expanding in Legendre
249+
"""
242250
function legendre_massmatrix(Ac, B)
243251
A = parent(Ac)
244252
P = Legendre{eltype(B)}()
245-
(P\A)'*legendre_massmatrix(eltype(P))*(P\B)
253+
(P\A)'*massmatrix(P)*(P\B)
246254
end
247255

248-
@simplify *(Ac::QuasiAdjoint{<:Any,<:Legendre}, B::Legendre) = legendre_massmatrix(Ac, B)
256+
@simplify *(Ac::QuasiAdjoint{<:Any,<:Legendre}, B::Legendre) = massmatrix(Legendre{promote_type(eltype(Ac), eltype(B))}())
249257
@simplify *(Ac::QuasiAdjoint{<:Any,<:AbstractJacobi}, B::AbstractJacobi) = legendre_massmatrix(Ac,B)
258+
@simplify *(Ac::QuasiAdjoint{<:Any,<:AbstractJacobi}, B::Weighted{<:Any,<:AbstractJacobi}) = legendre_massmatrix(Ac,B)
250259

251-
# 2^{a + b + 1} {\Gamma(n+a+1) \Gamma(n+b+1) \over (2n+a+b+1) \Gamma(n+a+b+1) n!}.
260+
@simplify function *(Ac::QuasiAdjoint{<:Any,<:AbstractJacobi}, B::AbstractQuasiVector)
261+
P = Legendre{eltype(Ac)}()
262+
(Ac * P) * (P \ B)
263+
end
252264

253-
function jacobi_massmatrix(a, b)
265+
# 2^{a + b + 1} {\Gamma(n+a+1) \Gamma(n+b+1) \over (2n+a+b+1) \Gamma(n+a+b+1) n!}.
266+
function massmatrix(P::Jacobi)
267+
a,b = P.a,P.b
254268
n = 0:
255269
Diagonal(2^(a+b+1) .* (exp.(loggamma.(n .+ (a+1)) .+ loggamma.(n .+ (b+1)) .- loggamma.(n .+ (a+b+1)) .- loggamma.(n .+ 1)) ./ (2n .+ (a+b+1))))
256270
end
257271

258272

273+
259274
@simplify function *(wAc::QuasiAdjoint{<:Any,<:WeightedBasis{<:Any,<:AbstractJacobiWeight}}, wB::WeightedBasis{<:Any,<:AbstractJacobiWeight})
260275
w,A = arguments(parent(wAc))
261276
v,B = arguments(wB)
@@ -265,7 +280,7 @@ end
265280
A = parent(Ac)
266281
w,B = arguments(wB)
267282
P = Jacobi(w.a, w.b)
268-
(P\A)' * jacobi_massmatrix(w.a, w.b) * (P \ B)
283+
(P\A)' * massmatrix(P) * (P \ B)
269284
end
270285

271286
########

src/clenshaw.jl

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ Base.@propagate_inbounds function _clenshaw_next!(n, A::AbstractVector, ::Zeros,
133133
end
134134

135135
Base.@propagate_inbounds function _clenshaw_next!(n, A::AbstractVector, B::AbstractVector, C::AbstractVector, x::AbstractMatrix, c, bn1::AbstractMatrix{T}, bn2::AbstractMatrix{T}) where T
136-
bn2 .= B[n] .* bn1 .- C[n+1] .* bn2
136+
# bn2 .= B[n] .* bn1 .- C[n+1] .* bn2
137+
lmul!(-C[n+1], bn2)
138+
BLAS.axpy!(B[n], bn1, bn2)
137139
muladd!(A[n], x, bn1, one(T), bn2)
138140
view(bn2,band(0)) .+= c[n]
139141
bn2
@@ -166,7 +168,8 @@ Base.@propagate_inbounds function _clenshaw_first!(A, ::Zeros, C, X, c, bn1, bn2
166168
end
167169

168170
Base.@propagate_inbounds function _clenshaw_first!(A, B, C, X, c, bn1, bn2)
169-
bn2 .= B[1] .* bn1 .- C[2] .* bn2
171+
lmul!(-C[2], bn2)
172+
BLAS.axpy!(B[1], bn1, bn2)
170173
muladd!(A[1], X, bn1, one(eltype(bn2)), bn2)
171174
view(bn2,band(0)) .+= c[1]
172175
bn2
@@ -283,17 +286,17 @@ function _BandedMatrix(::ClenshawLayout, V::SubArray{<:Any,2})
283286
M = parent(V)
284287
kr,jr = parentindices(V)
285288
b = bandwidth(M,1)
286-
jkr=max(1,min(jr[1],kr[1])-b÷2):max(jr[end],kr[end])+b÷2
289+
jkr=max(1,min(first(jr),first(kr))-b÷2):max(last(jr),last(kr))+b÷2
287290
# relationship between jkr and kr, jr
288-
kr2,jr2 = kr.-jkr[1].+1,jr.-jkr[1].+1
291+
kr2,jr2 = kr.-first(jkr).+1,jr.-first(jkr).+1
289292
lmul!(M.p0, clenshaw(M.c, M.A, M.B, M.C, M.X[jkr, jkr])[kr2,jr2])
290293
end
291294

292295
function getindex(M::Clenshaw{T}, kr::AbstractUnitRange, j::Integer) where T
293296
b = bandwidth(M,1)
294-
jkr=max(1,min(j,kr[1])-b÷2):max(j,kr[end])+b÷2
297+
jkr=max(1,min(j,first(kr))-b÷2):max(j,last(kr))+b÷2
295298
# relationship between jkr and kr, jr
296-
kr2,j2 = kr.-jkr[1].+1,j-jkr[1]+1
299+
kr2,j2 = kr.-first(jkr).+1,j-first(jkr)+1
297300
f = [Zeros{T}(j2-1); one(T); Zeros{T}(length(jkr)-j2)]
298301
lmul!(M.p0, clenshaw(M.c, M.A, M.B, M.C, M.X[jkr, jkr], f)[kr2])
299302
end
@@ -322,11 +325,19 @@ function materialize!(M::MatMulVecAdd{<:ClenshawLayout,<:PaddedLayout,<:PaddedLa
322325
y
323326
end
324327

328+
# TODO: generalise this to be trait based
325329
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), a::Expansion{<:Any,<:OrthogonalPolynomial}, P::OrthogonalPolynomial)
326330
axes(a,1) == axes(P,1) || throw(DimensionMismatch())
327331
P * Clenshaw(a, P)
328332
end
329333

334+
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), a::Expansion{<:Any,<:SubQuasiArray{<:Any,2,<:OrthogonalPolynomial,<:Tuple{AbstractAffineQuasiVector,Slice}}}, V::SubQuasiArray{<:Any,2,<:OrthogonalPolynomial,<:Tuple{AbstractAffineQuasiVector,Any}})
335+
axes(a,1) == axes(V,1) || throw(DimensionMismatch())
336+
kr,jr = parentindices(V)
337+
P = view(parent(V),kr,:)
338+
P * Clenshaw(a, P)[:,jr]
339+
end
340+
330341
function broadcasted(::LazyQuasiArrayStyle{2}, ::typeof(*), a::Expansion{<:Any,<:WeightedOrthogonalPolynomial}, P::OrthogonalPolynomial)
331342
axes(a,1) == axes(P,1) || throw(DimensionMismatch())
332343
wQ,c = arguments(a)

src/interlace.jl

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ end
9696

9797

9898
abstract type AbstractInterlaceBasis{T} <: Basis{T} end
99-
copy(A::AbstractInterlaceBasis) = interlacebasis(A, map(copy, A.args))
99+
copy(A::AbstractInterlaceBasis) = interlacebasis(A, map(copy, A.args)...)
100100

101101
"""
102102
PiecewiseInterlace(args...)
@@ -145,6 +145,18 @@ end
145145
interlacebasis(S, map(first, args)...) * BlockBroadcastArray{promote_type(eltype(D),eltype(S))}(Diagonal, unitblocks.(last.(args))...)
146146
end
147147

148+
@simplify function *(Ac::QuasiAdjoint{<:Any,<:AbstractInterlaceBasis}, B::AbstractInterlaceBasis)
149+
axes(Ac,2) == axes(B,1) || throw(DimensionMismatch())
150+
BlockBroadcastArray{promote_type(eltype(Ac),eltype(B))}(Diagonal, unitblocks.(adjoint.(parent(Ac).args) .* B.args)...)
151+
end
152+
153+
@simplify function *(Ac::QuasiAdjoint{<:Any,<:AbstractInterlaceBasis}, B::AbstractQuasiVector)
154+
axes(Ac,2) == axes(B,1) || throw(DimensionMismatch())
155+
args = (Ac').args
156+
cs = (adjoint.(args) .* getindex.(Ref(B), axes.(args,1)))
157+
BlockBroadcastArray(vcat, unitblocks.(cs)...)
158+
end
159+
148160
struct PiecewiseFactorization{T,FF,Ax} <: Factorization{T}
149161
factorizations::FF
150162
axes::Ax
@@ -168,4 +180,45 @@ function factorize(V::SubQuasiArray{<:Any,2,<:AbstractInterlaceBasis,<:Tuple{Inc
168180
_,jr = parentindices(V)
169181
J = findblock(axes(P,2),maximum(jr))
170182
ProjectionFactorization(factorize(P[:,Block.(OneTo(Int(J)))]), jr)
171-
end
183+
end
184+
185+
###
186+
# sum
187+
###
188+
189+
_sum(P::PiecewiseInterlace, dims) = BlockBroadcastArray(hcat, unitblocks.(_sum.(P.args, dims))...)
190+
191+
# blockvector2vectortuple
192+
193+
function components(f::Expansion{<:Any,<:PiecewiseInterlace})
194+
P,c = arguments(*, f)
195+
P.args .* blockvector2vectortuple(c)
196+
end
197+
198+
##
199+
# summary
200+
###
201+
202+
function summary(io::IO, w::PiecewiseInterlace)
203+
print(io, "PiecewiseInterlace(")
204+
args = w.args
205+
summary(io, first(args))
206+
for a in tail(args)
207+
print(io, ", ")
208+
summary(io, a)
209+
end
210+
print(io, ")")
211+
end
212+
213+
###
214+
# plot
215+
###
216+
217+
218+
function plotgrid(Pn::SubQuasiArray{T,2,<:PiecewiseInterlace,<:Tuple{Inclusion,Any}}) where T
219+
kr,jr = parentindices(Pn)
220+
P = parent(Pn)
221+
N = findblock(axes(P,2),maximum(jr))
222+
sort!(vcat(plotgrid.(getindex.(P.args, :, Ref(oneto(Int(N)))))...))
223+
end
224+

src/lanczos.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ triangulardata(R::LanczosConversion) = R
112112
sublayout(::LanczosConversionLayout, ::Type{<:Tuple{KR,Integer}}) where KR =
113113
sublayout(PaddedLayout{UnknownLayout}(), Tuple{KR})
114114

115-
function sub_paddeddata(::LanczosConversionLayout, S::SubArray{<:Any,1,<:AbstractMatrix})
115+
function sub_paddeddata(::LanczosConversionLayout, S::SubArray{<:Any,1,<:AbstractMatrix,<:Tuple{Any,Integer}})
116116
P = parent(S)
117117
(kr,j) = parentindices(S)
118118
resizedata!(P.data, j)

0 commit comments

Comments
 (0)