MethodError on `length(::DiffResults.ImmutableDiffResult{1, Float64, Tuple{Float64}})`
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Inizia eseguendo il riproduttore Julia segnalato e traccia il fallimento attraverso src/derivatives/elementwise.jl e src/derivatives/broadcast.jl, usando come contesto gli entry point di tape in src/api/tape.jl e src/api/gradients.jl. Il lavoro è completato quando l’esempio g o j basato su reshape non genera più l’errore di lunghezza ImmutableDiffResult e un test di regressione copre questo comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello, here to report another possible bug found upstream in Turing. In the following example, f differentiates just fine but g doesn't.
import ReverseDiff
f(x) = exp.(x[])
f([1.0])
ReverseDiff.gradient(f, [1.0])
g(x) = exp.(reshape(vec(x), ()))
g([1.0])
ReverseDiff.gradient(g, [1.0])
Edit: h(x) = exp.(fill(x[], ())) works fine too, but j(x) = exp.(reshape(x, ())) doesn't.
Stack trace
julia> ReverseDiff.gradient(g, [1.0])
ERROR: MethodError: no method matching length(::DiffResults.ImmutableDiffResult{1, Float64, Tuple{Float64}})
The function `length` exists, but no method is defined for this combination of argument types.
Closest candidates are:
length(::Cmd)
@ Base process.jl:716
length(::Base.MethodSpecializations)
@ Base reflection.jl:1317
length(::Core.SimpleVector)
@ Base essentials.jl:933
...
Stacktrace:
[1] _similar_shape(itr::DiffResults.ImmutableDiffResult{1, Float64, Tuple{Float64}}, ::Base.HasLength)
@ Base ./array.jl:652
[2] _collect(cont::UnitRange{…}, itr::DiffResults.ImmutableDiffResult{…}, ::Base.HasEltype, isz::Base.HasLength)
@ Base ./array.jl:711
[3] collect(itr::DiffResults.ImmutableDiffResult{1, Float64, Tuple{Float64}})
@ Base ./array.jl:705
[4] broadcastable(x::DiffResults.ImmutableDiffResult{1, Float64, Tuple{Float64}})
@ Base.Broadcast ./broadcast.jl:707
[5] broadcasted
@ ./broadcast.jl:1318 [inlined]
[6] broadcast(f::ReverseDiff.ForwardOptimize{…}, x::ReverseDiff.TrackedArray{…})
@ ReverseDiff ~/.julia/packages/ReverseDiff/p1MzG/src/derivatives/elementwise.jl:237
[7] broadcast
@ ~/.julia/packages/ReverseDiff/p1MzG/src/derivatives/elementwise.jl:198 [inlined]
[8] _materialize
@ ~/.julia/packages/ReverseDiff/p1MzG/src/derivatives/broadcast.jl:265 [inlined]
[9] materialize
@ ~/.julia/packages/ReverseDiff/p1MzG/src/derivatives/broadcast.jl:273 [inlined]
[10] g(x::ReverseDiff.TrackedArray{Float64, Float64, 1, Vector{Float64}, Vector{Float64}})
@ Main ./REPL[6]:1
[11] ReverseDiff.GradientTape(f::typeof(g), input::Vector{…}, cfg::ReverseDiff.GradientConfig{…})
@ ReverseDiff ~/.julia/packages/ReverseDiff/p1MzG/src/api/tape.jl:199
[12] gradient(f::Function, input::Vector{Float64}, cfg::ReverseDiff.GradientConfig{ReverseDiff.TrackedArray{…}})
@ ReverseDiff ~/.julia/packages/ReverseDiff/p1MzG/src/api/gradients.jl:22
[13] top-level scope
@ REPL[8]:1
Some type information was truncated. Use `show(err)` to see complete types.
Version info
(ppl) pkg> st
Status `~/ppl/Project.toml`
[37e2e3b7] ReverseDiff v1.15.3
julia> versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
CPU: 10 × Apple M1 Pro
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, apple-m1)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)
- Lingua principale
- Julia
- Stelle
- 395
- Fork
- 61
- Merge medio
- 23h 18m
- PR unite (30g)
- 16
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaDiff/ReverseDiff.jl
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
JuliaDiff/ReverseDiff.jl#318 ·
I maintainer di solito rispondono entro 1 giorno
-
`@grad`/`@grad_from_chainrules` silently reuse a tangent if a pullback returns too few tangentsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
JuliaDiff/ReverseDiff.jl#315 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
JuliaDiff/ReverseDiff.jl#314 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 56/100
JuliaDiff/ReverseDiff.jl#321 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
JuliaDiff/ReverseDiff.jl#320 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaDiff/ReverseDiff.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Sienna-Platform/PowerSystemCaseBuilder.jl#239 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
JuliaPluto/Malt.jl#114 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
QuantumSavory/QuantumSavory.jl#592 ·
I maintainer di solito rispondono entro 1 giorno