Skip to content

Code running on local Julia, but failing on CI tests with the last version of BlockArrays  #211

@andreasvarga

Description

@andreasvarga

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions