JuliaApproximation / SemiclassicalOrthogonalPolynomials.jl

A Julia repository for semiclassical orthogonal polynomials
MIT License
7 stars 3 forks source link

Implement b=-1 #111

Closed DanielVandH closed 1 month ago

DanielVandH commented 2 months ago

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 ApplyArrays 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

P_n^{t, (u, -1, w)}(y) = (1 - y)P_{n-1}^{t, (u, 1, w)}(y), \quad n \geq 1,

with $P_0^{t, (u, -1, w)}(y) = 1$. The Jacobi matrix with this definition is defined by

yP_n^{t, (u, -, 1w)} = c_n^{t, (u, -1, w)}P_{n-1}^{t, (u, -1, w)} + a_n^{t, (u, -1, w)}P_n^{t, (u, -1, w)} + b_n^{t, (u, -1, w)}P_{n+1}^{t, (u, -1, w)},

with

\begin{align*}
a_n^{t, (u, -1, w)} &= \begin{cases} 1 & n = 0, \\ a_{n-1}^{t, (u, 1, w)} & n \geq 1, \end{cases} \\
b_n^{t, (u, -1, w)} &= \begin{cases} -1 & n = 0, \\ b_{n-1}^{t, (u, -1, w)} & n \geq 1, \end{cases} \\
c_n^{t, (u, -1, w)} &= \begin{cases} 0 & n = 1, \\ c_{n-1}^{t, (u, 1, w)} & n \geq 2. \end{cases}
\end{align*}

Differentiation is given by

\frac{\mathrm d}{\mathrm dy}\boldsymbol P^{t, (u, -1, w)} = \boldsymbol P^{t, (u+1, 0, w+1)} \boldsymbol D_{(u, -1, w)}^{t, (u+1,0,w+1)}, \quad \boldsymbol D_{(u, -1, w)}^{(t, (u+1,0,w+1)} = \begin{bmatrix} \boldsymbol 0 & \boldsymbol R_{(u+1,1,w+1)}^{t,(u+1,0,w+1)}\boldsymbol D_{(u,0,w)}^{t, (u+1,1,w+1)}\boldsymbol R_{\mathrm b, (u,1,w)}^{t,(u,0,w)} \end{bmatrix},

where

(1-y)\boldsymbol P^{t, (u, 1, w)} = \boldsymbol P^{t, (u, 0, w)}\boldsymbol R_{\mathrm b, (u, 1, w)}^{t, (u, 0, w)}

and

\frac{\mathrm d}{\mathrm dy}\boldsymbol P^{t, (u, 0, w)} = \boldsymbol P^{t, (u+1,1,w+1)} \boldsymbol D_{(u, 0, w)}^{t, (u+1,1,w+1)}.

Need to add weighted derivatives

dlfivefifty commented 2 months ago

I'm looking at this now, will try to get the tests to pass

DanielVandH commented 2 months ago

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

TSGut commented 2 months ago

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.

DanielVandH commented 2 months ago

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. @.***>

DanielVandH commented 2 months ago

@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

https://github.com/DanielVandH/SemiclassicalOrthogonalPolynomials.jl/blob/1bdaa2bcde28b21481a94ce02bf71c2768d7ec7e/src/SemiclassicalOrthogonalPolynomials.jl#L422-L435

to fix a new colsupport issue. Maybe you have some insight into what might've changed to have broken this?

TSGut commented 2 months ago

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.

DanielVandH commented 2 months ago

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.

dlfivefifty commented 2 months ago

I would suggest in general being explicit about Lazy array constructions as it will reduce compile time

DanielVandH commented 1 month ago

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?

dlfivefifty commented 1 month ago

Hmm its possible the changes in LazyArrays.jl I just made have made compilation really slow...

dlfivefifty commented 1 month ago

It might be Windows specific? I'm having trouble with these tests passing in time:

https://github.com/JuliaApproximation/ClassicalOrthogonalPolynomials.jl/actions/runs/9846940208/job/27202852824?pr=195

DanielVandH commented 1 month ago

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

dlfivefifty commented 1 month ago

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

dlfivefifty commented 1 month ago

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?

DanielVandH commented 1 month ago

I was on v2.1.5. The issue is still on 2.1.6. It's gone on 2.1.4

DanielVandH commented 1 month ago

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).

dlfivefifty commented 1 month ago

Can you try reverting just that commit and see if it fixes the issue?

DanielVandH commented 1 month ago

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

DanielVandH commented 1 month ago

Hopefully I did the revert properly here https://github.com/DanielVandH/LazyArrays.jl/commit/6fd2bc82a290fe924e5b0b1ace2eacccc0e9fcc0. This revert does fix the issues I'm seeing.

dlfivefifty commented 1 month ago

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.

DanielVandH commented 1 month ago

Alright. I'll try and work around it for now. I'll try and see what I can do with Cthulhu tomorrow

DanielVandH commented 1 month ago

Cthulhu wasn't much help. I might just not be using it properly. Deleting

https://github.com/JuliaArrays/LazyArrays.jl/blob/8ee041b18fc30bd723403e7fee08f1bb32129d94/ext/LazyArraysBandedMatricesExt.jl#L158-L169

fixes it. I don't understand why. This is also not a new method. Any ideas?

dlfivefifty commented 1 month ago

Didn't I change the type restriction from AbstractPaddedLayout to Union{PaddedColumns,PaddedLayout}?

Could this have caused an issue?

DanielVandH commented 1 month ago

Interesting.. yes it's exactly that change that broke it. Bizarre

dlfivefifty commented 1 month ago

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)

DanielVandH commented 1 month ago

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

dlfivefifty commented 1 month ago

A typical symptom of type-inference is if you hit ^C and run it again then it works...

dlfivefifty commented 1 month ago

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. ..

DanielVandH commented 1 month ago

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

dlfivefifty commented 1 month ago

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).

DanielVandH commented 1 month ago

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.

DanielVandH commented 1 month ago

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

dlfivefifty commented 1 month ago

There were a few other similar changes I made replacing AbstractPaddedLayout, try changing those back?

DanielVandH commented 1 month ago

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.

dlfivefifty commented 1 month ago

Is it a compile time thing or run time? Try throwing an error?

DanielVandH commented 1 month ago

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]).

DanielVandH commented 1 month ago

~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

DanielVandH commented 1 month ago

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.

codecov[bot] commented 1 month ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 94.32%. Comparing base (5011dc4) to head (7c090d8).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #111 +/- ## ========================================== + Coverage 92.52% 94.32% +1.80% ========================================== Files 3 3 Lines 575 634 +59 ========================================== + Hits 532 598 +66 + Misses 43 36 -7 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.