Skip to content

Commit cc668ce

Browse files
authored
Fix \ for LanczosPolynomials with empty caches (#198)
* Use emptymaximum * General indices * Syntax
1 parent 53244ac commit cc668ce

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
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.13.3"
4+
version = "0.13.4"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/lanczos.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@ Base.BroadcastStyle(::Type{<:LanczosConversion}) = LazyArrays.LazyArrayStyle{2}(
9191

9292
struct LanczosConversionLayout <: AbstractLazyLayout end
9393

94+
_emptymaximum(arr) = isempty(arr) ? convert(eltype(arr), firstindex(arr)-1) : maximum(arr)
95+
9496
LazyArrays.simplifiable(::Mul{LanczosConversionLayout,<:AbstractPaddedLayout}) = Val(true)
9597
function copy(M::Mul{LanczosConversionLayout,<:AbstractPaddedLayout})
96-
resizedata!(M.A.data, maximum(colsupport(M.B)))
98+
resizedata!(M.A.data, _emptymaximum(colsupport(M.B)))
9799
M.A.data.R * M.B
98100
end
99101

100102
function copy(M::Ldiv{LanczosConversionLayout,<:AbstractPaddedLayout})
101-
resizedata!(M.A.data, maximum(colsupport(M.B)))
103+
resizedata!(M.A.data, _emptymaximum(colsupport(M.B)))
102104
M.A.data.R \ M.B
103105
end
104106

test/test_lanczos.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using ClassicalOrthogonalPolynomials, BandedMatrices, ArrayLayouts, QuasiArrays, ContinuumArrays, InfiniteArrays, Test
2-
import ClassicalOrthogonalPolynomials: recurrencecoefficients, PaddedColumns, orthogonalityweight, golubwelsch, LanczosData
2+
import ClassicalOrthogonalPolynomials: recurrencecoefficients, PaddedColumns, orthogonalityweight, golubwelsch, LanczosData, _emptymaximum, LanczosConversion
33

44
@testset "Lanczos" begin
55
@testset "Legendre" begin
@@ -304,3 +304,15 @@ import ClassicalOrthogonalPolynomials: recurrencecoefficients, PaddedColumns, or
304304
@test Q[0.5,1:3] [1, 1.369306393762913, 0.6469364618834543]
305305
end
306306
end
307+
308+
@testset "#197" begin
309+
@test _emptymaximum(1:5) == 5
310+
@test _emptymaximum(1:0) == 0
311+
x = Inclusion(ChebyshevInterval())
312+
f = exp.(x)
313+
QQ = LanczosPolynomial(f)
314+
R = LanczosConversion(QQ.data)
315+
v = cache(Zeros(∞))
316+
@test (R \ v)[1:500] == zeros(500)
317+
@test (R * v)[1:500] == zeros(500)
318+
end

0 commit comments

Comments
 (0)