@@ -3,7 +3,7 @@ module ForwardDiffStaticArraysExt
33using ForwardDiff, StaticArrays
44using ForwardDiff. LinearAlgebra
55using ForwardDiff. DiffResults
6- using ForwardDiff: Dual, partials, GradientConfig, JacobianConfig, HessianConfig, Tag, Chunk,
6+ using ForwardDiff: Dual, partials, npartials, Partials, GradientConfig, JacobianConfig, HessianConfig, Tag, Chunk,
77 gradient, hessian, jacobian, gradient!, hessian!, jacobian!,
88 extract_gradient!, extract_jacobian!, extract_value!,
99 vector_mode_gradient, vector_mode_gradient!,
7171@inline ForwardDiff. jacobian! (result:: Union{AbstractArray,DiffResult} , f:: F , x:: StaticArray , cfg:: JacobianConfig ) where {F} = jacobian! (result, f, x)
7272@inline ForwardDiff. jacobian! (result:: Union{AbstractArray,DiffResult} , f:: F , x:: StaticArray , cfg:: JacobianConfig , :: Val ) where {F} = jacobian! (result, f, x)
7373
74- @generated function extract_jacobian (:: Type{T} , ydual:: StaticArray , x:: S ) where {T,S<: StaticArray }
75- M, N = length (ydual), length (x)
74+ @generated function extract_jacobian (:: Type{T} , ydual:: Union{StaticArray,Partials} , x:: S ) where {T,S<: StaticArray }
75+ M = ydual <: Partials ? npartials (ydual) : length (ydual)
76+ N = length (x)
7677 result = Expr (:tuple , [:(partials (T, ydual[$ i], $ j)) for i in 1 : M, j in 1 : N]. .. )
7778 return quote
7879 $ (Expr (:meta , :inline ))
0 commit comments