Open jishnub opened 1 year ago
This seems to be https://github.com/JuliaDebug/Cthulhu.jl/issues/455 resuscitated.
Using https://github.com/jishnub/ApproxFunOrthogonalPolynomials.jl/tree/cthulhuerrorVectorAny
julia> using ApproxFunOrthogonalPolynomials julia> f = Fun((x,y)->x*y, Ultraspherical(1) ⊗ Chebyshev()) Fun(Ultraspherical(1) ⊗ Chebyshev(), [0.0, 0.0, 0.0, 0.0, 0.5]) julia> @descend ProductFun(ProductFun(f), NormalizedUltraspherical(1) ⊗ Ultraspherical(1)) ProductFun(f::ProductFun, sp::TensorSpace) @ ApproxFunBase ~/.julia/packages/ApproxFunBase/WgPov/src/Multivariate/ProductFun.jl:183 183 ProductFun(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}::ProductFun,sp::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}::TensorSpace)::ProductFun{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}=space(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64})::TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}==sp::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64} ? f : ProductFun::Type{ProductFun}(coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64},sp::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64})::Matrix{Float64},sp::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64})::ProductFun{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64} Select a call to descend into or ↩ to ascend. [q]uit. [b]ookmark. Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native. Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code Actions: [E]dit source code, [R]evise and redisplay space(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultr… %2 = ==(::TensorSpace{…},::TensorSpace{…})::Core.Const(false) • coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tup… ProductFun::Type{ProductFun}(coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float6… ↩ coefficients(f::ProductFun, ox::TensorSpace) @ ApproxFunBase ~/.julia/packages/ApproxFunBase/WgPov/src/Multivariate/ProductFun.jl:279 279 coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}::ProductFun, ox::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}::TensorSpace)::Matrix{Float64} = coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}, factors(ox::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64})::Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}}...) Select a call to descend into or ↩ to ascend. [q]uit. [b]ookmark. Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native. Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code Actions: [E]dit source code, [R]evise and redisplay factors(ox::TensorSpace{Tuple{NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Ultraspherical{Int64, ChebyshevInterval{Float64}, … • coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tup… ↩ coefficients(f::ProductFun, ox::Space, oy::Space) @ ApproxFunBase ~/.julia/packages/ApproxFunBase/WgPov/src/Multivariate/ProductFun.jl:247 247 function coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}::ProductFun, ox::NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64}::Space, oy::Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}::Space)::Matrix{Float64} 248 T::Core.Const(Float64)=cfstype(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64})::Type{Float64} 249 m::Int64=size(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64},1)::Int64 250 B::Matrix{Float64} = zeros(T::Type{Float64}, m::Int64, length(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}.coefficients::Vector{Fun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Float64, Vector{Float64}}})::Int64)::Matrix{Float64} 251 # convert in x direction 252 #TODO: adaptively grow in x? 253 for k::Int64=(1:length(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}.coefficients::Vector{Fun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Float64, Vector{Float64}}})::Int64)::Int64::Union{Nothing, Tuple{Int64, Int64}} 254 B::Matrix{Float64}[:,k::Int64] = pad(coefficients(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64}.coefficients::Vector{Fun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Float64, Vector{Float64}}}[k::Int64]::Fun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Float64, Vector{Float64}},ox::NormalizedUltraspherical{Int64, ChebyshevInterval{Float64}, Float64})::Vector{Float64}, m::Int64)::Vector{Float64} 255 end 256 257 sp::TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64} = space(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, Float64})::TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64} 258 spf2::Core.Const(Chebyshev()) = factor(sp::TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.FixedIntervalProduct{2, Float64, ChebyshevInterval{Float64}}, Float64}, 2)::Chebyshev{ChebyshevInterval{Float64}, Float64} 259 260 # convert in y direction 261 for k=(1:size(B::Matrix{Float64},1)::Int64)::UnitRange{Int64}::Union{Nothing, Tuple{Int64, Int64}} 262 ccfs::Any=coefficients(view(B::Matrix{Float64},k::Int64,:)::SubArray{Float64, 1, Matrix{Float64}, Tuple{Int64, Base.Slice{Base.OneTo{Int64}}}, true}, spf2::Chebyshev{ChebyshevInterval{Float64}, Float64}, oy::Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64})::Any 263 if (length(ccfs::Any)::Any>size(B::Matrix{Float64},2)::Int64)::Any 264 B::Matrix{Float64}=pad(B,size(B::Matrix{Float64},1)::Int64,length(ccfs::Any)::Any)::Matrix{Float64} 265 end 266 B::Matrix{Float64}[k::Int64,(1:length(ccfs::Any)::Any)::Any]=ccfs 267 for j::Any=((length(ccfs::Any)::Any+1)::Any:size(B::Matrix{Float64},2)::Any)::Any::Any 268 B::Matrix{Float64}[k::Int64,j::Any]=zero(T::Type{Float64})::Float64 269 end 270 end 271 272 B::Matrix{Float64} 273 end Select a call to descend into or ↩ to ascend. [q]uit. [b]ookmark. Toggles: [w]arn, [h]ide type-stable statements, [t]ype annotations, [s]yntax highlight for Source/LLVM/Native. Show: [S]ource code, [A]ST, [T]yped code, [L]LVM IR, [N]ative code Actions: [E]dit source code, [R]evise and redisplay ^ %26 = = < semi-concrete eval > iterate(::Core.PartialStruct(UnitRange{Int64}, Any[Core.Const(1), Int64]),::Int64)::Union{Nothing, Tuple{Int64, Int64}} space(f::ProductFun{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}, TensorSpace{Tuple{Ultr… factor(sp::TensorSpace{Tuple{Ultraspherical{Int64, ChebyshevInterval{Float64}, Float64}, Chebyshev{ChebyshevInterval{Float64}, Float64}}, DomainSets.F… size(B::Matrix{Float64},1) 1:size(B::Matrix{Float64},1)::Int64 k=(1:size(B::Matrix{Float64},1)::Int64)::UnitRange{Int64} view(B::Matrix{Float64},k::Int64,:) • coefficients(view(B::Matrix{Float64},k::Int64,:)::SubArray{Float64, 1, Matrix{Float64}, Tuple{Int64, Base.Slice{Base.OneTo{Int64}}}, true}, spf2::Cheb… runtime length(ccfs::Any) v size(B::Matrix{Float64},2) ERROR: TypeError: in typeassert, expected Vector{Any}, got a value of type Nothing Stacktrace: [1] gettyp @ ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:279 [inlined] [2] addchildren!(tparent::JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}, parent::JuliaSyntax.SyntaxNode, src::Core.CodeInfo, node2ssa::IdDict{JuliaSyntax.SyntaxNode, Int64}, symtyps::IdDict{JuliaSyntax.SyntaxNode, Any}, mappings::Vector{Vector{Union{JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}, JuliaSyntax.SyntaxNode}}}) @ TypedSyntax ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:85 [3] addchildren!(tparent::JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}, parent::JuliaSyntax.SyntaxNode, src::Core.CodeInfo, node2ssa::IdDict{JuliaSyntax.SyntaxNode, Int64}, symtyps::IdDict{JuliaSyntax.SyntaxNode, Any}, mappings::Vector{Vector{Union{JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}, JuliaSyntax.SyntaxNode}}}) (repeats 3 times) @ TypedSyntax ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:90 [4] JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}(rootnode::JuliaSyntax.SyntaxNode, src::Core.CodeInfo, mappings::Vector{Vector{Union{JuliaSyntax.TreeNode{TypedSyntax.TypedSyntaxData}, JuliaSyntax.SyntaxNode}}}, symtyps::IdDict{JuliaSyntax.SyntaxNode, Any}) @ TypedSyntax ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:69 [5] tsn_and_mappings(m::Method, src::Core.CodeInfo, rt::Any, sourcetext::SubString{String}, lineno::Int64; warn::Bool, strip_macros::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}) @ TypedSyntax ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:48 [6] tsn_and_mappings(m::Method, src::Core.CodeInfo, rt::Any; warn::Bool, strip_macros::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}) @ TypedSyntax ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:34 [7] tsn_and_mappings @ ~/.julia/packages/TypedSyntax/vbZHi/src/node.jl:28 [inlined] [8] #get_typed_sourcetext#32 @ ~/.julia/packages/Cthulhu/4WY7j/src/reflection.jl:346 [inlined] [9] get_typed_sourcetext @ ~/.julia/packages/Cthulhu/4WY7j/src/reflection.jl:344 [inlined] [10] find_callsites(interp::Cthulhu.CthulhuInterpreter, CI::Core.CodeInfo, stmt_infos::Vector{Core.Compiler.CallInfo}, mi::Core.MethodInstance, slottypes::Vector{Any}, optimize::Bool, annotate_source::Bool) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/reflection.jl:28 [11] _descend(term::REPL.Terminals.TTYTerminal, interp::Cthulhu.CthulhuInterpreter, curs::Cthulhu.CthulhuCursor; override::Nothing, debuginfo::Cthulhu.DInfo.DebugInfo, optimize::Bool, interruptexc::Bool, iswarn::Bool, hide_type_stable::Bool, verbose::Nothing, remarks::Bool, with_effects::Bool, inline_cost::Bool, type_annotations::Bool, annotate_source::Bool) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:458 [12] _descend(term::REPL.Terminals.TTYTerminal, interp::Cthulhu.CthulhuInterpreter, curs::Cthulhu.CthulhuCursor; override::Nothing, debuginfo::Cthulhu.DInfo.DebugInfo, optimize::Bool, interruptexc::Bool, iswarn::Bool, hide_type_stable::Bool, verbose::Nothing, remarks::Bool, with_effects::Bool, inline_cost::Bool, type_annotations::Bool, annotate_source::Bool) (repeats 2 times) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:591 [13] _descend(term::REPL.Terminals.TTYTerminal, interp::Cthulhu.CthulhuInterpreter, curs::Cthulhu.CthulhuCursor; override::Nothing, debuginfo::Symbol, optimize::Bool, interruptexc::Bool, iswarn::Bool, hide_type_stable::Bool, verbose::Nothing, remarks::Bool, with_effects::Bool, inline_cost::Bool, type_annotations::Bool, annotate_source::Bool) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:591 [14] _descend(term::REPL.Terminals.TTYTerminal, interp::Cthulhu.CthulhuInterpreter, mi::Core.MethodInstance; kwargs::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:iswarn,), Tuple{Bool}}}) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:724 [15] _descend(::REPL.Terminals.TTYTerminal, ::Any, ::Vararg{Any}; interp::Core.Compiler.NativeInterpreter, kwargs::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:iswarn,), Tuple{Bool}}}) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:740 [16] __descend_with_error_handling(args::Any; terminal::Any, kwargs::Base.Pairs{Symbol, V, Tuple{Vararg{Symbol, N}}, NamedTuple{names, T}} where {V, N, names, T<:Tuple{Vararg{Any, N}}}) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:207 [17] _descend_with_error_handling(f::Any, argtypes::Any; kwargs::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:iswarn,), Tuple{Bool}}}) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:196 [18] descend_code_typed(::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:154 [19] descend_code_typed(::Any, ::Any) @ Cthulhu ~/.julia/packages/Cthulhu/4WY7j/src/Cthulhu.jl:154 [20] top-level scope @ REPL[4]:1 (@v1.9) pkg> st -m Cthulhu Status `~/.julia/environments/v1.9/Manifest.toml` [f68482b8] Cthulhu v2.9.2 julia> VERSION v"1.9.2"
This seems to be https://github.com/JuliaDebug/Cthulhu.jl/issues/455 resuscitated.
Using https://github.com/jishnub/ApproxFunOrthogonalPolynomials.jl/tree/cthulhuerrorVectorAny