ArrayLayouts.jl icon indicating copy to clipboard operation
ArrayLayouts.jl copied to clipboard

kwcall ambiguity for lu(Symmetric(BandedMatrix))

Open DanielVandH opened this issue 6 months ago • 0 comments

julia> using BandedMatrices, LinearAlgebra

julia> A = brand(10, 10, 2, 2);

julia> lu(A) # seems fine
BandedMatrices.BandedLU{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}
L factor:
10×10 Matrix{Float64}:
  1.0          0.0           0.0           0.0          …   0.0           0.0          0.0        0.0       0.0
  0.130262     1.0           0.0           0.0              0.0           0.0          0.0        0.0       0.0
  0.628091     0.925623      1.0           0.0              0.0           0.0          0.0        0.0       0.0
  6.56551e-17  4.66203e-16  -0.930112      1.0              0.0           0.0          0.0        0.0       0.0
  9.48947e-17  5.10714e-16   1.70639e-16  -1.66186e-16      0.0           0.0          0.0        0.0       0.0
  1.09378e-16  4.08892e-16   2.02321e-16  -1.53524e-16  …   1.0           0.0          0.0        0.0       0.0
 -1.48462e-17  3.74493e-16   3.01977e-17  -4.18909e-17      9.42525e-17   1.0          0.0        0.0       0.0
  2.69952e-17  3.59865e-16   1.39717e-16  -3.46407e-16     -1.07228e-16   1.46833e-16  1.0        0.0       0.0
 -2.07649e-16  1.52132e-16  -2.19689e-16   0.506627         0.014214      0.34169      0.447224   1.0       0.0
  5.26367e-17  0.19874      -0.121982      0.26927         -0.108379     -0.76199      0.820067  -0.405123  1.0
U factor:
10×10 BandedMatrix{Float64} with bandwidths (2, 4):
 0.958321  0.64343    0.0950425  0.0        0.0         ⋅         ⋅          ⋅          ⋅          ⋅
 0.0       0.605374   0.924089   0.18638    0.976283   0.0        ⋅          ⋅          ⋅          ⋅
 0.0       0.0       -0.800624   0.233672  -0.903669   0.0       0.0         ⋅          ⋅          ⋅
  ⋅        0.0        0.0        0.535959   0.0770822  0.474611  0.370779   0.0         ⋅          ⋅
  ⋅         ⋅         0.0        0.0        0.843502   0.38096   0.934787   0.113725   0.571547    ⋅
  ⋅         ⋅          ⋅         0.0        0.0        0.82845   0.0961225  0.264537   0.542442   0.620033
  ⋅         ⋅          ⋅          ⋅         0.0        0.0       0.481825   0.520846   0.993578   0.448423
  ⋅         ⋅          ⋅          ⋅          ⋅         0.0       0.0        0.47772    0.384355   0.59676
  ⋅         ⋅          ⋅          ⋅          ⋅          ⋅        0.0        0.0       -0.816749  -0.42892
  ⋅         ⋅          ⋅          ⋅          ⋅          ⋅         ⋅         0.0        0.0       -0.254256

julia> lu(Symmetric(A))
MethodError: kwcall(::@NamedTuple{check::Bool}, ::typeof(lu!), ::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, ::RowMaximum) is ambiguous.

Candidates:
  kwcall(::NamedTuple, ::typeof(lu!), A::AbstractMatrix, pivot::Union{NoPivot, RowMaximum, RowNonZero})
    @ LinearAlgebra C:\Users\danjv\.julia\juliaup\julia-1.10.4+0.x64.w64.mingw32\share\julia\stdlib\v1.10\LinearAlgebra\src\lu.jl:132
  kwcall(::NamedTuple, ::typeof(lu!), A::Union{Hermitian{var"#s6993", var"#s6994"}, Hermitian{Complex{var"#s6993"}, var"#s6994"}, Symmetric{var"#s6993", var"#s6994"}} where {var"#s6993"<:Real, var"#s6994"<:(ArrayLayouts.LayoutMatrix)}, args...)
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:429
  kwcall(::NamedTuple, ::typeof(lu!), A::Union{Hermitian{T, S}, Symmetric{T, S}} where S, pivot::Union{NoPivot, RowMaximum, RowNonZero}) where T
    @ LinearAlgebra C:\Users\danjv\.julia\juliaup\julia-1.10.4+0.x64.w64.mingw32\share\julia\stdlib\v1.10\LinearAlgebra\src\lu.jl:86

Possible fix, define
  kwcall(::NamedTuple, ::typeof(lu!), ::Union{Hermitian{var"#s6993", var"#s6994"}, Hermitian{Complex{var"#s6993"}, var"#s6994"}, Symmetric{var"#s6993", var"#s6994"}} where {var"#s6993"<:Real, var"#s6994"<:(ArrayLayouts.LayoutMatrix)}, ::Union{NoPivot, RowMaximum, RowNonZero})

Stacktrace:
  [1] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, pivot::RowMaximum; check::Bool)
    @ LinearAlgebra C:\Users\danjv\.julia\juliaup\julia-1.10.4+0.x64.w64.mingw32\share\julia\stdlib\v1.10\LinearAlgebra\src\lu.jl:300
  [2] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, pivot::RowMaximum)
    @ LinearAlgebra C:\Users\danjv\.julia\juliaup\julia-1.10.4+0.x64.w64.mingw32\share\julia\stdlib\v1.10\LinearAlgebra\src\lu.jl:299
  [3] lu_layout(layout::ArrayLayouts.SymmetricLayout{BandedMatrices.BandedColumns{ArrayLayouts.DenseColumnMajor}}, axes::Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, pivot::RowMaximum; kwds::@Kwargs{})
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:315
  [4] lu_layout(layout::ArrayLayouts.SymmetricLayout{BandedMatrices.BandedColumns{ArrayLayouts.DenseColumnMajor}}, axes::Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, pivot::RowMaximum)
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:315
  [5] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}, pivot::RowMaximum; kwds::@Kwargs{})
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:427
  [6] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}})
    @ LinearAlgebra C:\Users\danjv\.julia\juliaup\julia-1.10.4+0.x64.w64.mingw32\share\julia\stdlib\v1.10\LinearAlgebra\src\lu.jl:299
  [7] lu_layout(layout::ArrayLayouts.SymmetricLayout{BandedMatrices.BandedColumns{ArrayLayouts.DenseColumnMajor}}, axes::Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}; kwds::@Kwargs{})
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:314
  [8] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}}; kwds::@Kwargs{})
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:428
  [9] lu(A::Symmetric{Float64, BandedMatrix{Float64, Matrix{Float64}, Base.OneTo{Int64}}})
    @ ArrayLayouts C:\Users\danjv\.julia\packages\ArrayLayouts\31idh\src\factorizations.jl:428
 [10] top-level scope
    @ REPL[7]:1

DanielVandH avatar Aug 16 '24 20:08 DanielVandH