hessian!(::ImmutableDiffResult, f, ::StaticArray) errors when f does not depend on its argument
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- julia
- Ambito
- backend-api-design
Direzione di ricerca
Inizia dal percorso di implementazione di hessian! che chiama extract_jacobian(T, partials(T, fd2), x), quindi traccia il modo in cui vengono gestiti i risultati costanti e i risultati Dual con un tag che li racchiude. Aggiungi una copertura di regressione per entrambi gli esempi, incluso il caso di input vuoto, e verifica che ciascuno produca l’Hessian nullo atteso o il risultato scalare annidato atteso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
hessian!(::ImmutableDiffResult, f, ::StaticArray) errors outright whenever f returns no Dual of its own tag.
using ForwardDiff, StaticArrays, DiffResults
sx = SVector(1.0, 2.0, 3.0)
# (a) constant `f`
ForwardDiff.hessian!(DiffResults.HessianResult(sx), z -> 2.0, sx)
# ERROR: DimensionMismatch: No precise constructor for SMatrix{3, 3, Float64, 9} found.
# Size of input was (0, 3).
# (b) `f` constant in `z` but carrying an enclosing tag
ForwardDiff.derivative(1.0) do a
r = ForwardDiff.hessian!(DiffResults.HessianResult(sx), z -> a * 2.0, sx)
DiffResults.value(r)
end
# ERROR: MethodError: no method matching extract_jacobian(::Type{Tag{…}}, ::Dual{…}, ::SVector{3, Float64})
Every other path handles both fine — hessian(f, sx), hessian!(::Matrix, f, sx) and hessian(f, ::Vector) all return a 3×3 zero Hessian, and the nested forms of those return 0.0.
Cause
The method extracts with extract_jacobian(T, partials(T, fd2), x), and extract_jacobian(::Type{T}, ydual::Union{StaticArray,Partials}, x) assumes partials(T, fd2) has one entry per input. It does not when f returns no Dual{T}:
- a constant gives
Partials{0}, so the result is built at size(0, N)and theSMatrixconstructor rejects it; - a
Dual{S}withS ≺ Tgiveszero(d), a bareDual, which matches no method at all.
Suggested fix
Dispatch on the result rather than on its partials, returning a zero length(x) × length(x) Hessian when there is no differentiated layer to read — a constant f, an empty x, and a result that carries only an enclosing tag all fall under the same rule.
Version: ForwardDiff master (v1.4.5), Julia 1.12.7, StaticArrays 1.9.19.
- Lingua principale
- Julia
- Stelle
- 1k
- Fork
- 162
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
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/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualForse già presa @devmotion l’ha presa 13 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 commenti ·
-
Enable NaN-safe mode by defaultForse già presa @devmotion l’ha presa 1 giorno fa. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 reazione ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 75/100
JuliaDiff/ForwardDiff.jl#849 ·
-
`gradient!` leaves part of the result unwritten when `f` does not depend on its argumentForse già presa @devmotion l’ha presa 42 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 78/100
JuliaDiff/ForwardDiff.jl#847 ·
Tutte le issue di JuliaDiff/ForwardDiff.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
CliMA/ClimaAtmos.jl#4891 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
tagbot-manual
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
tshort/StaticCompiler.jl#191 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
SciML/SciMLSensitivity.jl#1703 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
JuliaGPU/GPUCompiler.jl#1008 ·
I maintainer di solito rispondono entro 1 giorno
-
`biggs6` disagrees with CUTEst and is unbounded belowForse già presa @timholy l’ha presa 1 giorno fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100