Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

kwcall ambiguity for lu(Symmetric(BandedMatrix))

未关闭
#243 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
julia
领域
tooling

调研方向

使用 issue 中的 Julia 和 BandedMatrices 示例复现该歧义,然后检查 src/factorizations.jl 中第 314 行和第 427-429 行附近的代码,并结合 stacktrace 中显示的 LinearAlgebra 的 lu.jl 方法进行分析。当 lu(Symmetric(A)) 不再引发 kwcall 歧义,同时现有的 lu(A) 行为仍然有效时,即视为完成。

由索引模型根据 Issue 内容生成。

描述

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
主要语言
Julia
星标
57
派生
10
平均合并
1 天 9 小时
30 天内合并 PR
11

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

JuliaLinearAlgebra/ArrayLayouts.jl 的其他 Issue

查看 JuliaLinearAlgebra/ArrayLayouts.jl 的全部 Issue

相似的 Issue

更多 Julia Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。