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

hessian!(::ImmutableDiffResult, f, ::StaticArray) errors when f does not depend on its argument

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

@devmotion ci sta già lavorando.

Dal 31/8/2026.

  • #844 di @devmotion — aperta

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

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 the SMatrix constructor rejects it;
  • a Dual{S} with S ≺ T gives zero(d), a bare Dual, 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

  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/ForwardDiff.jl

Tutte le issue di JuliaDiff/ForwardDiff.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.