Closed DanielVandH closed 1 month ago
I'm looking at this now, will try to get the tests to pass
Will hopefully have this all fixed up soon after I get out of a whole rabbit hole of ambiguities. The expansion tests started failing after #112 for some reason
What's the error? Or does it just give wrong values in the expansion without erroring? If it's a problem in that PR let me know.
I think it's just issues with the layouts. Not really an issue with the pr, probably just that it's revealed some other issues with ambiguities. I'll give an example of the error in the morning
On Tue, 2 July 2024, 1:02 am Timon Salar Gutleb, @.***> wrote:
What's the error? Or does it just give wrong values in the expansion without erroring? If it's a problem in that PR let me know.
— Reply to this email directly, view it on GitHub https://github.com/JuliaApproximation/SemiclassicalOrthogonalPolynomials.jl/pull/111#issuecomment-2201473978, or unsubscribe https://github.com/notifications/unsubscribe-auth/AWZPH4G3LWTVBYUA3RW6JOTZKHUZ5AVCNFSM6AAAAABJSNRMSOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMBRGQ3TGOJXHA . You are receiving this because you authored the thread.Message ID: <JuliaApproximation/SemiclassicalOrthogonalPolynomials. @.***>
@TSGut This is the issue:
julia> using SemiclassicalOrthogonalPolynomials, ClassicalOrthogonalPolynomials # make sure you're on this pr branch
julia> Ps = SemiclassicalJacobi.(2, -1//2:5//2, -1.0, -1//2:5//2)
4-element SemiclassicalOrthogonalPolynomials.SemiclassicalJacobiFamily{Float64, UnitRange{Rational{Int64}}, Float64, UnitRange{Rational{Int64}}}:
SemiclassicalJacobi with weight x^-0.5 * (1-x)^-1.0 * (2.0-x)^-0.5 on 0..1
SemiclassicalJacobi with weight x^0.5 * (1-x)^-1.0 * (2.0-x)^0.5 on 0..1
SemiclassicalJacobi with weight x^1.5 * (1-x)^-1.0 * (2.0-x)^1.5 on 0..1
SemiclassicalJacobi with weight x^2.5 * (1-x)^-1.0 * (2.0-x)^2.5 on 0..1
julia> g = x -> exp(x) + sin(x)
#11 (generic function with 1 method)
julia> expand(Ps[1], g) # works
SemiclassicalJacobi with weight x^-0.5 * (1-x)^-1.0 * (2.0-x)^-0.5 on 0..1 * [3.559752813266927, -2.689556624759561, -0.1419489233276318, -0.00815710939820469, -0.0012292671637252207, -7.007691099937732e-5, -1.3644779541294862e-6, -3.3513086473469194e-8, -2.7275540904437935e-9, -8.832973058841338e-11 … ]
julia> expand(Ps[2], g) # works
SemiclassicalJacobi with weight x^0.5 * (1-x)^-1.0 * (2.0-x)^0.5 on 0..1 * [3.559752813266927, -2.813114026394983, -0.15330885488899992, -0.009528747519073118, -0.0013411342705156972, -7.427293498329727e-5, -1.4527735961828238e-6, -3.734131077723306e-8, -2.925216076248728e-9, -9.315982251717606e-11 … ]
julia> expand(Ps[3], g)
ERROR: MethodError: simplifiable(::ArrayLayouts.Mul{LazyArrays.ApplyLayout{typeof(\)}, ArrayLayouts.DiagonalLayout{ArrayLayouts.OnesLayout}, LazyArrays.ApplyMatrix{Float64, typeof(\), Tuple{LinearAlgebra.UpperTriangular{Float64, InfiniteLinearAlgebra.AdaptiveQRFactors{Float64, BandedMatrices.BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}, LazyBandedMatrices.SymTridiagonal{Float64, LazyArrays.BroadcastVector{Float64, typeof(-), Tuple{Float64, ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}, LazyArrays.BroadcastVector{Float64, typeof(-), Tuple{ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}}}}, LinearAlgebra.Diagonal{Float64, LazyArrays.BroadcastVector{Float64, typeof(*), Tuple{LazyArrays.BroadcastVector{Float64, typeof(sign), Tuple{SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, InfiniteLinearAlgebra.AdaptiveQRFactors{Float64, BandedMatrices.BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}, LazyBandedMatrices.SymTridiagonal{Float64, LazyArrays.BroadcastVector{Float64, typeof(-), Tuple{Float64, ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}, LazyArrays.BroadcastVector{Float64, typeof(-), Tuple{ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}}}}, Tuple{InfiniteLinearAlgebra.InfBandCartesianIndices}, false}}}, Float64}}}}}, LinearAlgebra.Diagonal{Float64, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}) is ambiguous.
Candidates:
simplifiable(M::ArrayLayouts.Mul{LazyArrays.ApplyLayout{typeof(\)}})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\inv.jl:140
simplifiable(M::ArrayLayouts.Mul{<:Any, <:ArrayLayouts.DiagonalLayout{<:ArrayLayouts.AbstractFillLayout}})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:375
Possible fix, define
simplifiable(::ArrayLayouts.Mul{LazyArrays.ApplyLayout{…}, <:ArrayLayouts.DiagonalLayout{…}})
Stacktrace:
[1] simplifiable
@ C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:339 [inlined]
[2] _most_simplifiable
@ C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:342 [inlined]
[3] simplifiable(::typeof(*), ::LazyArrays.ApplyMatrix{…}, ::LazyArrays.ApplyMatrix{…}, ::LinearAlgebra.Diagonal{…})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:340
[4] _simplify(::typeof(*), ::LazyArrays.ApplyMatrix{…}, ::LazyArrays.ApplyMatrix{…}, ::LinearAlgebra.Diagonal{…}, ::Vararg{…})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:349
[5] simplify
@ C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:345 [inlined]
[6] simplify
@ C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:355 [inlined]
[7] copy
@ C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\ext\LazyArraysBandedMatricesExt.jl:576 [inlined]
[8] materialize
@ C:\Users\djv23\.julia\packages\ArrayLayouts\70nvu\src\mul.jl:137 [inlined]
[9] mul
@ C:\Users\djv23\.julia\packages\ArrayLayouts\70nvu\src\mul.jl:138 [inlined]
[10] *(A::LazyArrays.ApplyArray{…}, B::LazyBandedMatrices.Bidiagonal{…})
@ ArrayLayouts C:\Users\djv23\.julia\packages\ArrayLayouts\70nvu\src\mul.jl:223
[11] \(A::SemiclassicalJacobi{Float64}, B::SemiclassicalJacobi{Float64})
@ SemiclassicalOrthogonalPolynomials c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:446
[12] \(A::SemiclassicalJacobi{Float64}, B::SemiclassicalJacobi{Float64})
@ SemiclassicalOrthogonalPolynomials c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:435
[13] semijacobi_ldiv(P::SemiclassicalJacobi{…}, Q::LanczosPolynomial{…})
@ SemiclassicalOrthogonalPolynomials c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:278
[14] \(A::SemiclassicalJacobi{Float64}, B::LanczosPolynomial{Float64, SemiclassicalJacobiWeight{…}, Normalized{…}})
@ SemiclassicalOrthogonalPolynomials c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:452
[15] ldiv(Q::SemiclassicalJacobi{Float64}, f::QuasiArrays.BroadcastQuasiVector{Float64, var"#11#12", Tuple{Inclusion{…}}})
@ SemiclassicalOrthogonalPolynomials c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:519
[16] \(A::SemiclassicalJacobi{Float64}, B::QuasiArrays.BroadcastQuasiVector{Float64, var"#11#12", Tuple{Inclusion{…}}})
@ QuasiArrays C:\Users\djv23\.julia\packages\QuasiArrays\Jo8rC\src\matmul.jl:34
[17] transform(A::SemiclassicalJacobi{Float64}, f::Function)
@ ContinuumArrays C:\Users\djv23\.julia\packages\ContinuumArrays\d6Ead\src\bases\bases.jl:291
[18] expand(A::SemiclassicalJacobi{Float64}, f::Function)
@ ContinuumArrays C:\Users\djv23\.julia\packages\ContinuumArrays\d6Ead\src\bases\bases.jl:302
[19] top-level scope
@ c:\Users\djv23\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\test\test_neg1b.jl:80
Some type information was truncated. Use `show(err)` to see complete types.
Part of the issue is probably what I've had to do here
to fix a new colsupport
issue. Maybe you have some insight into what might've changed to have broken this?
So replacing the line return Rₐ₀ᵪᴬ * Rᵦₐ₋₁ᵪᵗᵃ⁰ᶜ
with return ApplyArray(*,UpperTriangular(Rₐ₀ᵪᴬ), Rᵦₐ₋₁ᵪᵗᵃ⁰ᶜ)
works, so it's definitely layout shenanigans. That's probably not a great long term solution but short term it may let you finish what you want to do here and unless I missed something it's not all that different from what would be done internally anyway, so it may not matter performance wise (may be missing something, I only glanced at the methods mentioned below).
The long term fix would be to disambiguate in LazyArrays.jl, the error message is pretty spot on, the issue is these two options are ambiguous for our multiplication chain of Rₐ₀ᵪᴬ * Rᵦₐ₋₁ᵪᵗᵃ⁰ᶜ
:
Candidates:
simplifiable(M::ArrayLayouts.Mul{LazyArrays.ApplyLayout{typeof(\)}})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\inv.jl:140
simplifiable(M::ArrayLayouts.Mul{<:Any, <:ArrayLayouts.DiagonalLayout{<:ArrayLayouts.AbstractFillLayout}})
@ LazyArrays C:\Users\djv23\.julia\packages\LazyArrays\QwVhu\src\linalg\mul.jl:375
A well placed redirection if one is in both of those cases would be one example of a proper fix. In any case that has to happen in LazyArrays.jl. For now I would recommend the quick fix I mentioned.
Thanks for looking into it @TSGut. I am still getting used to understanding all of the design across these packages :)
I'll use this temporary fix for now but I'll try and get some fixes through as well.
I would suggest in general being explicit about Lazy array constructions as it will reduce compile time
Any ideas why the first testset (the Jacobi test in the test_neg1b.jl file) might have become insanely slow all of a sudden? I don't believe I did anything significant.. the slowness is coming only from the first evaluation for each (t, a, c)
triple. i.e. for n=1:25
for the first x
(currently 0
but this is an issue even for x=0.5
for example) every single evaluation is extremely slow. Running the loop n=1:25
again without even changing x
is fast once again. Did something change with compilation?
Hmm its possible the changes in LazyArrays.jl I just made have made compilation really slow...
It might be Windows specific? I'm having trouble with these tests passing in time:
I started seeing this issue last night but only got to confirm it just now, so I'm not sure it'd be those changes just now. If it's Windows only that'll be pretty rough to debug
Can you pin LazyArrays.jl at 2.1.4 and see if it goes away?
If it is a compile time issue there might be a type instability introduced
Also, are you on LazyArrays v2.1.5 or 2.1.6? If 2.1.5 can you try 2.1.6 just in case the issue is gone?
I was on v2.1.5. The issue is still on 2.1.6. It's gone on 2.1.4
Would it somehow be due to https://github.com/JuliaArrays/LazyArrays.jl/pull/334? This is the only method that I think might be encountered that changed in 2.1.5 as far as I can tell (not 100% sure what https://github.com/JuliaArrays/LazyArrays.jl/pull/335 does).
Can you try reverting just that commit and see if it fixes the issue?
Reverting https://github.com/JuliaArrays/LazyArrays.jl/pull/334 didn't change anything. I'll have to learn how to properly revert https://github.com/JuliaArrays/LazyArrays.jl/pull/335 and I'll test
Hopefully I did the revert properly here https://github.com/DanielVandH/LazyArrays.jl/commit/6fd2bc82a290fe924e5b0b1ace2eacccc0e9fcc0. This revert does fix the issues I'm seeing.
ok we are going to have to figure out what exactly is causing this, maybe at our next meeting.
It's probably a type inference bug that for whatever reason only exists on windows. To work around it we need to find where type inference breaks. This is annoying to do, Cthulu.jl might help. Also going down the call chain until compilation works might help deduce the problem.
Alright. I'll try and work around it for now. I'll try and see what I can do with Cthulhu tomorrow
Cthulhu wasn't much help. I might just not be using it properly. Deleting
fixes it. I don't understand why. This is also not a new method. Any ideas?
Didn't I change the type restriction from AbstractPaddedLayout
to Union{PaddedColumns,PaddedLayout}
?
Could this have caused an issue?
Interesting.. yes it's exactly that change that broke it. Bizarre
Are we are sure it's a compiler or type inference issue?
If so It might be worth making an issue in JuliaLang/julia including steps to reproduce (eg point to the tag with the bug and the tag without and a MWE that causes it)
I'm not 100% sure what the exact issue is, only the cause. I'll come back to it and, if necessary, make an issue as you say. I'm going to carry on with that fix for now since I spent a lot of time now just looking for that, and I'll return to this later
A typical symptom of type-inference is if you hit ^C and run it again then it works...
But possibly something wanted to call that implementation and instead is calling something else with the change. Adding an error message to the function might reveal this. ..
They do both reach the function, although the stacktraces seem to be different. Running this code:
begin
using LazyArrays, SemiclassicalOrthogonalPolynomials
t, a, c = 1.2, 1.5, 0.3
P = SemiclassicalJacobi(t, a, 1.0, c)
@time P[0.2, 3]
@time P[0.2, 3]
end
If I take the stacktrace where things are working, meaning
function materialize!(M::MatMulVecAdd{<:BandedLayouts,<:AbstractPaddedLayout,<:AbstractPaddedLayout})
throw("...")
α,A,x,β,y = M.α,M.A,M.B,M.β,M.C
length(y) == size(A,1) || throw(DimensionMismatch())
length(x) == size(A,2) || throw(DimensionMismatch())
x̃ = paddeddata(x)
resizedata!(y, min(length(M),length(x̃)+bandwidth(A,1)))
ỹ = paddeddata(y)
muladd!(α, view(A, axes(ỹ,1), axes(x̃,1)) , x̃, β, ỹ)
y
end
then
julia> err
1-element ExceptionStack:
LoadError: "..."
Stacktrace:
[1] materialize!(M::ArrayLayouts.MulAdd{ArrayLayouts.SymTridiagonalLayout{LazyArrays.LazyLayout, LazyArrays.LazyLayout}, LazyArrays.PaddedColumns{ArrayLayouts.UnknownLayout}, LazyArrays.PaddedColumns{ArrayLayouts.UnknownLayout}, Float64, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}, SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}})
@ LazyArraysBandedMatricesExt c:\Users\danjv\.julia\dev\LazyArrays.jl\ext\LazyArraysBandedMatricesExt.jl:159
[2] muladd!(α::Float64, A::LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}, B::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, β::Float64, C::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}; kw::@Kwargs{})
@ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\muladd.jl:75
[3] lanczos!(Ns::UnitRange{Int64}, X::LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}, W::ApplyArray{Float64, 2, typeof(*), Tuple{LinearAlgebra.Diagonal{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(\), Tuple{Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}}}}, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}}}, γ::LazyArrays.CachedArray{Float64, 1, Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}, β::LazyArrays.CachedArray{Float64, 1, Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}, R::LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}})
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:12
[4] resizedata!(L::ClassicalOrthogonalPolynomials.LanczosData{Float64}, N::Int64)
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:62
[5] resizedata!
@ C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:132 [inlined]
[6] _lanczos_getindex
@ C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:137 [inlined]
[7] getindex
@ C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:145 [inlined]
[8] _getindex
@ .\abstractarray.jl:1341 [inlined]
[9] getindex
@ .\abstractarray.jl:1291 [inlined]
[10] _broadcast_getindex
@ .\broadcast.jl:662 [inlined]
[11] _getindex
@ .\broadcast.jl:706 [inlined]
[12] _broadcast_getindex
@ .\broadcast.jl:681 [inlined]
[13] getindex
@ .\broadcast.jl:636 [inlined]
[14] getindex
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\lazybroadcasting.jl:93 [inlined]
[15] initiateforwardrecurrence(N::Int64, A::BroadcastVector{Float64, typeof(inv), Tuple{ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}, B::BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}, ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}}}, C::BroadcastVector{Float64, typeof(/), Tuple{ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}, ClassicalOrthogonalPolynomials.LanczosJacobiBand{Float64}}}, x::Float64, μ::Float64)
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\clenshaw.jl:18
[16] unsafe_getindex(P::SemiclassicalJacobi{Float64}, x::Float64, n::Int64)
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\clenshaw.jl:87
[17] getindex(P::SemiclassicalJacobi{Float64}, x::Float64, n::Int64)
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\clenshaw.jl:75
[18] macro expansion
@ .\timing.jl:279 [inlined]
[19] top-level scope
@ c:\Users\danjv\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\test\test_neg1b.jl:48
Now going back to the broken definition, meaning
function materialize!(M::MatMulVecAdd{<:BandedLayouts,<:Union{PaddedColumns,PaddedLayout},<:Union{PaddedColumns,PaddedLayout}})
α,A,x,β,y = M.α,M.A,M.B,M.β,M.C
length(y) == size(A,1) || throw(DimensionMismatch())
length(x) == size(A,2) || throw(DimensionMismatch())
x̃ = paddeddata(x)
resizedata!(y, min(length(M),length(x̃)+bandwidth(A,1)))
ỹ = paddeddata(y)
muladd!(α, view(A, axes(ỹ,1), axes(x̃,1)) , x̃, β, ỹ)
y
end
I get
julia> err
1-element ExceptionStack:
LoadError: "..."
Stacktrace:
[1] materialize!(M::ArrayLayouts.MulAdd{ClassicalOrthogonalPolynomials.ClenshawLayout, LazyArrays.PaddedColumns{ArrayLayouts.UnknownLayout}, LazyArrays.PaddedColumns{ArrayLayouts.DenseColumnMajor}, Float64, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}, SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}})
@ LazyArraysBandedMatricesExt c:\Users\danjv\.julia\dev\LazyArrays.jl\ext\LazyArraysBandedMatricesExt.jl:159
[2] muladd!(α::Float64, A::ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}, B::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, β::Float64, C::ApplyArray{Float64, 1, typeof(vcat), Tuple{Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}; kw::@Kwargs{Czero::Bool})
@ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\muladd.jl:75
[3] copyto!
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\muladd.jl:82 [inlined]
[4] copy(M::ArrayLayouts.MulAdd{ClassicalOrthogonalPolynomials.ClenshawLayout, LazyArrays.PaddedColumns{ArrayLayouts.UnknownLayout}, ArrayLayouts.ZerosLayout, Float64, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}, SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}})
@ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\muladd.jl:77
[5] copy(M::Mul{ClassicalOrthogonalPolynomials.ClenshawLayout, LazyArrays.PaddedColumns{ArrayLayouts.UnknownLayout}, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}, SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}})
@ LazyArraysBandedMatricesExt c:\Users\danjv\.julia\dev\LazyArrays.jl\ext\LazyArraysBandedMatricesExt.jl:639
[6] materialize
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:137 [inlined]
[7] mul
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:138 [inlined]
[8] _twoarg_simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:348 [inlined]
[9] _simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:346 [inlined]
[10] _tail_simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:352 [inlined]
[11] _most_simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:351 [inlined]
[12] _simplify(::typeof(*), ::LinearAlgebra.Diagonal{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(\), Tuple{Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}}}}, ::ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}, ::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false})
@ LazyArrays c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:349
[13] simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:345 [inlined]
[14] simplify
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:355 [inlined]
[15] copy
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\src\linalg\mul.jl:360 [inlined]
[16] copy
@ c:\Users\danjv\.julia\dev\LazyArrays.jl\ext\LazyArraysBandedMatricesExt.jl:639 [inlined]
[17] materialize
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:137 [inlined]
[18] mul
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:138 [inlined]
[19] dot(x::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false}, A::ApplyArray{Float64, 2, typeof(*), Tuple{LinearAlgebra.Diagonal{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(\), Tuple{Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}}}}, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}}}, y::SubArray{Float64, 1, LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}}, Tuple{Base.Slice{InfiniteArrays.OneToInf{Int64}}, Int64}, false})
@ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:474
[20] dot
@ C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\mul.jl:475 [inlined]
[21] ClassicalOrthogonalPolynomials.LanczosData{Float64}(X::LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}, W::ApplyArray{Float64, 2, typeof(*), Tuple{LinearAlgebra.Diagonal{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(\), Tuple{Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}}}}, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}}}, γ::LazyArrays.CachedArray{Float64, 1, Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}, β::LazyArrays.CachedArray{Float64, 1, Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}, R::LinearAlgebra.UpperTriangular{Float64, LazyArrays.CachedArray{Float64, 2, Matrix{Float64}, FillArrays.Zeros{Float64, 2, Tuple{InfiniteArrays.OneToInf{Int64}, InfiniteArrays.OneToInf{Int64}}}}})
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:39
[22] LanczosData
@ C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:45 [inlined]
[23] ClassicalOrthogonalPolynomials.LanczosData(X::LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}, W::ApplyArray{Float64, 2, typeof(*), Tuple{LinearAlgebra.Diagonal{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(\), Tuple{Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}, FillArrays.Ones{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}}}}, ClassicalOrthogonalPolynomials.Clenshaw{Float64, Vector{Float64}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(+), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, BroadcastVector{Float64, typeof(/), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}}}}}, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfUnitRange{Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, LazyBandedMatrices.SymTridiagonal{Float64, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(-), Tuple{BroadcastVector{Float64, typeof(/), Tuple{Float64, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, FillArrays.Fill{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}, Float64}}}}, BroadcastVector{Float64, typeof(sqrt), Tuple{BroadcastVector{Float64, typeof(*), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Float64, BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(/), Tuple{BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Int64, Int64}, InfiniteArrays.InfStepRange{Float64, Float64}}}, BroadcastVector{Float64, typeof(*), Tuple{InfiniteArrays.InfStepRange{Float64, Float64}, InfiniteArrays.InfStepRange{Float64, Float64}}}}}, Float64}}}}}}}}}}}})
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:46
[24] ClassicalOrthogonalPolynomials.LanczosData(w::QuasiArrays.ApplyQuasiVector{Float64, typeof(*), Tuple{ClassicalOrthogonalPolynomials.Weighted{Float64, QuasiArrays.SubQuasiArray{Float64, 2, ClassicalOrthogonalPolynomials.Jacobi{Float64}, Tuple{ContinuumArrays.AffineMap{Float64, QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, QuasiArrays.Inclusion{Float64, DomainSets.ChebyshevInterval{Float64}}}, Base.Slice{InfiniteArrays.OneToInf{Int64}}}, false}}, ApplyArray{Float64, 1, typeof(vcat), Tuple{Vector{Float64}, FillArrays.Zeros{Float64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}}, P::Normalized{Float64, QuasiArrays.SubQuasiArray{Float64, 2, ClassicalOrthogonalPolynomials.Jacobi{Float64}, Tuple{ContinuumArrays.AffineMap{Float64, QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, QuasiArrays.Inclusion{Float64, DomainSets.ChebyshevInterval{Float64}}}, Base.Slice{InfiniteArrays.OneToInf{Int64}}}, false}, Accumulate{Float64, 1, typeof(*), Vector{Float64}, AbstractVector{Float64}}})
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:53
[25] LanczosPolynomial(w_in::QuasiArrays.BroadcastQuasiVector{Float64, typeof(*), Tuple{QuasiArrays.BroadcastQuasiVector{Float64, typeof(^), Tuple{QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, Float64}}, QuasiArrays.BroadcastQuasiVector{Float64, typeof(^), Tuple{ContinuumArrays.AffineQuasiVector{Float64, Float64, QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, Float64}, Float64}}, QuasiArrays.BroadcastQuasiVector{Float64, typeof(^), Tuple{ContinuumArrays.AffineQuasiVector{Float64, Float64, QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, Float64}, Float64}}}}, P::QuasiArrays.SubQuasiArray{Float64, 2, ClassicalOrthogonalPolynomials.Jacobi{Float64}, Tuple{ContinuumArrays.AffineMap{Float64, QuasiArrays.Inclusion{Float64, DomainSets.UnitInterval{Float64}}, QuasiArrays.Inclusion{Float64, DomainSets.ChebyshevInterval{Float64}}}, Base.Slice{InfiniteArrays.OneToInf{Int64}}}, false})
@ ClassicalOrthogonalPolynomials C:\Users\danjv\.julia\packages\ClassicalOrthogonalPolynomials\DiRvH\src\lanczos.jl:163
[26] semiclassical_jacobimatrix(t::Float64, a::Float64, b::Float64, c::Float64)
@ SemiclassicalOrthogonalPolynomials c:\Users\danjv\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:161
[27] SemiclassicalJacobi(t::Float64, a::Float64, b::Float64, c::Float64)
@ SemiclassicalOrthogonalPolynomials c:\Users\danjv\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\src\SemiclassicalOrthogonalPolynomials.jl:128
[28] top-level scope
@ c:\Users\danjv\.julia\dev\SemiclassicalOrthogonalPolynomials.jl\test\test_neg1b.jl:47
There is a lot more simplify
going on
I suspect the answer is the former is inlining and removing all the simplify
whilst the latter is not. It's possible that some thresholds are different between Windows and other OSes.
So I think for now we just make the fix you found.
The design of simplify
definitely pushes the limits of type inference. In fact if it is called at runtime it has exponential complexity 🤦♂️ The compiler avoids this because the function lookup table acts as a database of whats called, but definitely not ideal. A generated function might be better but I haven't got around to trying it (and there's the risk it makes things worse).
Been spending ages again trying to figure out why my expand
tests were failing. Turns out deleting the
function colsupport(lay::AbstractInvLayout{<:TriangularLayout}, A, j)
B, = arguments(lay, A)
return colsupport(B, j)
end
function rowsupport(lay::AbstractInvLayout{<:TriangularLayout}, A, k)
B, = arguments(lay, A)
return rowsupport(B, k)
end
I added makes them pass again. Is there something wrong with these definitions? Or any suggestions about what could be happening? I'm going to make a PR to revert them for the time being but it would be nice to try and see what the issue is.
Actually it seems to be a combination of this and something else I need to identify.. I'll keep trying.
Ignore the above. It has nothing to do with those methods. Something else between LazyArrays@2.1.4 and LazyArrays@2.1.7 is breaking my tests, but it's not that. I don't know what it is yet though.. none of the other tests fail, its only my b=-1
. Back to the debugger
There were a few other similar changes I made replacing AbstractPaddedLayout, try changing those back?
Ignore the above. It has nothing to do with those methods.
I don't know what went wrong where I determined that I was wrong initially. Turns out that reverting it so fix my problems. I'm going to make a PR reverting it, but I don't fully understand the issue. It would be nice to eventually get that method back in.
Is it a compile time thing or run time? Try throwing an error?
It's runtime. The coefficients from expand
were just not giving the correct values (e.g. expanding 5 + (1 - x)
was giving something like coefficients = [3.4, -2]
instead of [5, 1]
).
~Pretty much all done now except for figuring out weighted expansions and fixing families. Have to special case it since the existing code assumes there is a normalisation constant. Not sure how to do expansions that involve the $b=-1$ weight yet.~ Weighted expansions and derivatives done (including $b=-1$ weight not allowed). Looking into fixing issues with efficiently constructing families now, that's all that's left I believe.
Do we need derivatives of fully weighted $b=-1$ polynomials? I don't know how to make sense of it when the $b$ weight is included since we'd want $\mathcal D[(1-x)^{-1}P^{t,(a,-1,c)}] =(1-x)^{-2}P^{t,(a+1,-2,c+1)}D$. Not differentiable at $x=1$ anyway but the issue is decrementing past $-1$.
CI will also fail until https://github.com/JuliaLinearAlgebra/InfiniteLinearAlgebra.jl/pull/186 gets merged and registered. Might also want https://github.com/JuliaArrays/LazyArrays.jl/pull/341 done before completing this
Everything should be good now. Tests all pass locally. Not sure what CI will do until
CI will also fail until https://github.com/JuliaLinearAlgebra/InfiniteLinearAlgebra.jl/pull/186 gets merged and registered. Might also want https://github.com/JuliaArrays/LazyArrays.jl/pull/341 done before completing this
is resolved.
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 94.32%. Comparing base (
5011dc4
) to head (7c090d8
).
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
Need to get #109, #105, and https://github.com/JuliaArrays/LazyArrays.jl/issues/320 (or something like it) over the line to get this completed. There could be a way to just force it all to work by putting
ApplyArray
s everywhere (though there are issues with those too, I've found) but getting those done first will probably be more useful in the long run. I'll mark this as ready to review once that's done. Tests did pass when I last worked on this four days ago, not sure where all these ambiguities have come from but I'll work on it eventually.This PR implements $P_n^{t, (u, -1, w)}$, defined so that
with $P_0^{t, (u, -1, w)}(y) = 1$. The Jacobi matrix with this definition is defined by
with
Differentiation is given by
where
and
Need to add weighted derivatives