`@grad_from_chainrules` hygiene: types in vararg arguments are not escaped
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 68/100
Direzione di ricerca
Start in src/macros.jl at the argument loop linked in the issue, then inspect _make_fwd_args, where the generated dispatch signature also contains the vararg type. Check how both paths handle the type in ys::Foo.... Done means the rule imports without UndefVarError and the stated ReverseDiff.gradient call returns [1.0, 1.0].
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
#224 was fixed by #232, but only for arguments of the form x::T. Types in a vararg argument are still resolved in ReverseDiff, not in the calling module:
using ReverseDiff, ChainRulesCore
struct Foo end
f(x, ys::Foo...) = sum(x)
ChainRulesCore.rrule(::typeof(f), x, ys::Foo...) = f(x, ys...), Δ -> (NoTangent(), fill(Δ, size(x)), map(_ -> NoTangent(), ys)...)
ReverseDiff.@grad_from_chainrules f(x::ReverseDiff.TrackedArray, ys::Foo...)
ERROR: LoadError: UndefVarError: `Foo` not defined in `ReverseDiff`
Expected: the rule is imported, and ReverseDiff.gradient(x -> f(x, Foo(), Foo()), [1.0, 2.0]) returns [1.0, 1.0].
Cause: the argument loop only escapes the type of a top-level x::T expression. ys::Foo... is an Expr(:..., :(ys::Foo)), so it's returned unchanged and Foo is resolved through macro hygiene. The type also ends up unescaped in the Vararg{Foo} of the dispatch signature generated by _make_fwd_args.
ReverseDiff master (b796032, v1.18.4), Julia 1.13.1.
- 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
- 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 72/100
oxfordcontrol/COSMO.jl#211 ·
-
documentation
Difficoltà 2/5 Mezza giornata Idoneità per principianti 65/100
I maintainer di solito rispondono entro 6 giorni
-
ARKODE: callbacks that modify `u` throw MethodError on reinitForse già presa @devmotion l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
SciML/Sundials.jl#575 ·
-
broken links in docsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Tube(N) builds N TubeBase segments of length L/(N−1): total friction/inertia length is N·L/(N−1)Forse già presa @ChrisRackauckas-Claude l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
SciML/ModelingToolkitStandardLibrary.jl#525 ·
I maintainer di solito rispondono entro 1 giorno