-
Notifications
You must be signed in to change notification settings - Fork 35
Description
The following code is running correctly on my machine with Julia 1.7.2, ApproxFun v0.13.1, ApproxFunBase v0.5.5 and
BlockArrays v0.16.11
using LinearAlgebra
using ApproxFun
Af = Fun(t -> [0 1; -10*cos(t) -24-10*sin(t)],Fourier(0..2π));
D = Derivative(domain(Af));
ND = [D 0I; 0I D];
Aop = Af - ND;
NA = 322
RW = Aop[1:NA,1:NA]
resulting in a matrix as below
322×322 ApproxFunBase.RaggedMatrix{Float64}:
0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5.76141e-16 -6.6615e-16 -24.0 -5.0 -5.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
-1.3323e-15 5.76141e-16 -10.0 -24.0 0.0 -5.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 -1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
⋮ ⋮ ⋱ ⋮ ⋮
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -79.0 5.76141e-16 -6.6615e-16 -24.0 -5.0 -5.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.0 0.0 0.0 -6.6615e-16 5.76141e-16 -5.0 -24.0 0.0 -5.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 -80.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
However, the same sequence fails on the Ubuntu_latest and Windows_latest CI test environments with Julia 1.7.2, ApproxFun v0.13.1, ApproxFunBase v0.5.5 and BlockArrays v0.16.16.
I am including a part of the error message (sorry, it is very large), with the hope you could indicate a way out of this error case.
(see run information here for the complete error message):
ERROR: LoadError: MethodError: no method matching blocks(::ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}})
Closest candidates are:
blocks(::BlockArrays.BlockArray) at ~/.julia/packages/BlockArrays/KgZhO/src/blocks.jl:49
blocks(::LinearAlgebra.Adjoint) at ~/.julia/packages/BlockArrays/KgZhO/src/blocks.jl:50
blocks(::LinearAlgebra.Transpose) at ~/.julia/packages/BlockArrays/KgZhO/src/blocks.jl:51
...
Stacktrace:
[1] blockcolsupport(#unused#::ArrayLayouts.UnknownLayout, A::ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, j::BlockArrays.Block{1, Int64})
@ BlockArrays ~/.julia/packages/BlockArrays/KgZhO/src/blocklinalg.jl:10
[2] blockcolsupport(A::ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, j::BlockArrays.Block{1, Int64})
@ BlockArrays ~/.julia/packages/BlockArrays/KgZhO/src/blocklinalg.jl:17
[3] blockcolstop(::ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, ::BlockArrays.Block{1, Int64})
@ BlockArrays ~/.julia/packages/BlockArrays/KgZhO/src/blocklinalg.jl:21
[4] colstop(M::ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, j::Int64)
@ ApproxFunBase ~/.julia/packages/ApproxFunBase/fvVRN/src/Operators/general/InterlaceOperator.jl:232
[5] colstop
@ ~/.julia/packages/ApproxFunBase/fvVRN/src/Operators/SubOperator.jl:173 [inlined]
[6] ApproxFunBase.RaggedMatrix(#unused#::Type{FillArrays.Zeros}, V::ApproxFunBase.SubOperator{Float64, ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, Tuple{Int64, Int64}, Tuple{Int64, Int64}})
@ ApproxFunBase ~/.julia/packages/ApproxFunBase/fvVRN/src/Operators/Operator.jl:691
[7] ApproxFunBase.RaggedMatrix(S::ApproxFunBase.SubOperator{Float64, ApproxFunBase.InterlaceOperator{Float64, 2, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.ArraySpace{ApproxFunBase.SumSpace{Tuple{ApproxFunFourier.CosSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunFourier.SinSpace{ApproxFunFourier.PeriodicSegment{Float64}, Float64}}, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, 1, ApproxFunFourier.PeriodicSegment{Float64}, Float64}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ApproxFunBase.CachedIterator{Tuple{Int64, Int64}, ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}, FillArrays.Fill{Int64, 1, Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, Tuple{Infinities.RealInfinity, Infinities.InfiniteCardinal{0}}}, Tuple{UnitRange{Int64}, UnitRange{Int64}}, Tuple{Int64, Int64}, Tuple{Int64, Int64}})
@ ApproxFunBase ~/.julia/packages/ApproxFunBase/fvVRN/src/Operators/general/InterlaceOperator.jl:359
[8] AbstractArray
@ ~/.julia/packages/ApproxFunBase/fvVRN/src/Operators/Operator.jl:781 [inlined]
etc.
I was not able to perform the above test locally using BlockArrays v0.16.16 (probably other dependencies impede performing the update with Pkg).
I raised this issue already at #771 and here
in the hope to find the right place for this issue.