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

Error trying to differentiate `eachindex`

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

还没有人认领这个 Issue。

评估

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

调研方向

使用 eachindex 示例重现 test/diffractor.jl 中的失败,并通过 tangent.jl 中的 unbundle 以及 broadcast 路径检查堆栈跟踪。完成标准是该示例能够在没有所报告的 MethodError 的情况下进行微分,并有一个覆盖该行为的回归测试。

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

描述

This came up in a test suite:

julia> import AbstractDifferentiation as AD

julia> import Diffractor: DiffractorForwardBackend

julia> h(x::AbstractVector) = eachindex(x) .* x
h (generic function with 1 method)

julia> AD.jacobian(DiffractorForwardBackend(), h, [1, 2])
ERROR: MethodError: no method matching size(::ChainRulesCore.Tangent{Base.OneTo{Int64}, @NamedTuple{stop::Int64}})

Closest candidates are:
  size(::Base.MethodList)
   @ Base reflection.jl:1042
  size(::BitVector)
   @ Base bitarray.jl:104
  size(::BitVector, ::Integer)
   @ Base bitarray.jl:107
  ...

Stacktrace:
  [1] axes
    @ ./abstractarray.jl:98 [inlined]
  [2] call_composed(fs::Tuple{typeof(axes)}, x::Tuple{ChainRulesCore.Tangent{Base.OneTo{…}, @NamedTuple{…}}}, kw::@Kwargs{})
    @ Base ./operators.jl:1045
  [3] call_composed
    @ ./operators.jl:1044 [inlined]
  [4] (::ComposedFunction{…})(x::ChainRulesCore.Tangent{…}; kw::@Kwargs{})
    @ Base ./operators.jl:1041
  [5] map
    @ ./tuple.jl:292 [inlined]
  [6] findconsistentvalue(f::typeof(axes), cols::Tuple{Base.OneTo{…}, ChainRulesCore.Tangent{…}})
    @ StructArrays ~/.julia/packages/StructArrays/CjQ4L/src/utils.jl:208
  [7] (StructArrays.StructVector{…})(c::Tuple{…})
    @ StructArrays ~/.julia/packages/StructArrays/CjQ4L/src/structarray.jl:18
  [8] (StructArrays.StructArray{Diffractor.TangentBundle{…} where P})(c::Tuple{Base.OneTo{…}, ChainRulesCore.Tangent{…}})
    @ StructArrays ~/.julia/packages/StructArrays/CjQ4L/src/structarray.jl:94
  [9] unbundle(atb::Diffractor.TangentBundle{1, Base.OneTo{Int64}, Diffractor.TaylorTangent{Tuple{…}}})
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/tangent.jl:365
 [10] (::Diffractor.var"#205#206"{1, Diffractor.∂☆{…}, Diffractor.TangentBundle{…}})(i::Int64)
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/stage1/broadcast.jl:23
 [11] ntuple(f::Diffractor.var"#205#206"{1, Diffractor.∂☆{…}, Diffractor.TangentBundle{…}}, n::Int64)
    @ Base ./ntuple.jl:19
 [12] (::Diffractor.∂☆{…})(zc::Diffractor.TangentBundle{…}, bc::Diffractor.TangentBundle{…})
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/stage1/broadcast.jl:16
 [13] materialize
    @ ./broadcast.jl:903 [inlined]
 [14] (::Diffractor.∂☆recurse{…})(::Diffractor.TangentBundle{…}, ::Diffractor.TangentBundle{…})
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/stage1/recurse_fwd.jl:0
 [15] (::Diffractor.∂☆internal{…})(::Diffractor.TangentBundle{…}, ::Vararg{…})
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/stage1/forward.jl:114
 [16] ∂☆
    @ ~/.julia/packages/Diffractor/v1WuP/src/stage1/forward.jl:161 [inlined]
 [17] h
    @ ~/Work/GitHub/Julia/DifferentiationInterface.jl/test/diffractor.jl:13 [inlined]
 [18] ∂☆internal
    @ ~/.julia/packages/Diffractor/v1WuP/src/stage1/forward.jl:114 [inlined]
 [19] ∂☆
    @ ~/.julia/packages/Diffractor/v1WuP/src/stage1/forward.jl:161 [inlined]
 [20] (::Diffractor.var"#pushforward#370"{typeof(h), Tuple{Vector{Int64}}})(vs::Tuple{Vector{Int64}})
    @ Diffractor ~/.julia/packages/Diffractor/v1WuP/src/AbstractDifferentiation.jl:17
 [21] #369
    @ ~/.julia/packages/AbstractDifferentiation/RGmzD/src/AbstractDifferentiation.jl:644 [inlined]
 [22] mapslices(f::Diffractor.var"#369#373"{Diffractor.var"#pushforward#370"{…}}, A::Matrix{Int64}; dims::Int64)
    @ Base ./abstractarray.jl:3191
 [23] jacobian(b::DiffractorForwardBackend, f::Function, args::Vector{Int64})
    @ Diffractor ~/.julia/packages/AbstractDifferentiation/RGmzD/src/AbstractDifferentiation.jl:642
 [24] top-level scope
    @ ~/Work/GitHub/Julia/DifferentiationInterface.jl/test/diffractor.jl:15
Some type information was truncated. Use `show(err)` to see complete types.
主要语言
Julia
星标
453
派生
33
PR 合并指标
30 天内没有已合并 PR

环境准备

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

从这里开始

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

JuliaDiff/Diffractor.jl 的其他 Issue

查看 JuliaDiff/Diffractor.jl 的全部 Issue

相似的 Issue

更多 Julia Issue

把新 issue 发到你的邮箱

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