Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Incorrect results when nesting ReverseDiff inside ForwardDiff

Aperta
#168 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
julia
Ambito
tooling

Direzione di ricerca

Riproduci le chiamate annidate utilizzando i punti di ingresso ReverseDiff.gradient e ForwardDiff.gradient indicati nell’issue, con le versioni elencate di Julia e dei package. Determina il comportamento previsto di ReverseDiff all’interno di ForwardDiff, aggiungi la copertura per il caso segnalato di gradiente nullo e verifica che il comportamento risultante sia esplicito e coerente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug priority

I'm not sure if this is even supported, but I think it should throw an error instead of returning zero gradients

The first example is an old bug (#45 ), the second shows you can't nest ReverseDiff inside ForwardDiff, the third shows you can the other way around.

julia> let
           D(f, x) = ReverseDiff.gradient(x->f(x[1]), [x])[1]
           u1 = D(x -> x * D(y -> x * y, 3), 5) # 3
           u2 = D(x -> x * D(y -> y * x, 3), 5) # 5
           @show u1, u2
       end
(u1, u2) = (3, 5)
(3, 5)

julia> let
           Dr(f, x) = ReverseDiff.gradient(x->f(x[1]), [x])[1]
           Df(f, x) = ForwardDiff.gradient(x->f(x[1]), [x])[1]
           u1 = Df(x -> x * Dr(y -> x * y, 3), 5) 
           u2 = Df(x -> x * Dr(y -> y * x, 3), 5) 
           @show u1, u2
       end
(u1, u2) = (0, 0)
(0, 0)

julia> let
           Dr(f, x) = ReverseDiff.gradient(x->f(x[1]), [x])[1]
           Df(f, x) = ForwardDiff.gradient(x->f(x[1]), [x])[1]
           u1 = Dr(x -> x * Df(y -> x * y, 3), 5) 
           u2 = Dr(x -> x * Df(y -> y * x, 3), 5) 
           @show u1, u2
       end
(u1, u2) = (10, 10)
(10, 10)
(test3) pkg> status
Status `~/Sandboxes/Julia-Misc/test3/Project.toml`
  [f6369f11] ForwardDiff v0.10.16 `~/.julia/dev/ForwardDiff`
  [37e2e3b7] ReverseDiff v1.5.0 `~/.julia/dev/ReverseDiff`

julia> versioninfo()
Julia Version 1.5.3
Commit 788b2c77c1 (2020-11-09 13:37 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: AMD Ryzen 7 3700X 8-Core Processor
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, znver2)
Lingua principale
Julia
Stelle
396
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaDiff/ReverseDiff.jl

Tutte le issue di JuliaDiff/ReverseDiff.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.