Error trying to differentiate `eachindex`
还没有人认领这个 Issue。
评估
调研方向
使用 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,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
JuliaDiff/Diffractor.jl 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 25/100
JuliaDiff/Diffractor.jl#302 · 2 条评论 ·
-
难度 3/5 1-2 天 新手友好度 52/100
JuliaDiff/Diffractor.jl#294 ·
-
bug
难度 4/5 3-5 天 新手友好度 35/100
JuliaDiff/Diffractor.jl#293 ·
-
bug
难度 4/5 3-5 天 新手友好度 35/100
JuliaDiff/Diffractor.jl#290 · 8 条评论 ·
-
难度 4/5 3-5 天 新手友好度 45/100
JuliaDiff/Diffractor.jl#278 · 1 条评论 · 1 个 reaction ·
查看 JuliaDiff/Diffractor.jl 的全部 Issue
相似的 Issue
-
documentation
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 66/100
SciML/NonlinearSolve.jl#1372 ·
维护者通常 1 天内回复
-
Truncated discrete ccdf and logccdf return incorrect values at the lower atom可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
JuliaStats/Distributions.jl#2095 ·
-
documentation 📜 microphysics💧 ❄️
难度 2/5 1-3 小时 新手友好度 63/100
NumericalEarth/Breeze.jl#1073 ·
维护者通常 1 天内回复
-
难度 2/5 1 小时以内 新手友好度 78/100
维护者通常 1 天内回复