@@ -3,7 +3,7 @@ module ForwardDiffStaticArraysExt
33using ForwardDiff, StaticArrays
44using ForwardDiff. LinearAlgebra
55using ForwardDiff. DiffResults
6- using ForwardDiff: Dual, partials, 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)
76- result = Expr (:tuple , [:(partials (T, ydual[$ i], $ j)) for i in 1 : M, j in 1 : N]. .. )
77- return quote
78- $ (Expr (:meta , :inline ))
79- V = StaticArrays. similar_type (S, valtype (eltype ($ ydual)), Size ($ M, $ N))
80- return V ($ result)
81- end
82- end
83-
84- @generated function extract_jacobian (:: Type{T} , ydual:: Partials{M} , x:: S ) where {M, T, S<: StaticArray }
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)
8576 N = length (x)
8677 result = Expr (:tuple , [:(partials (T, ydual[$ i], $ j)) for i in 1 : M, j in 1 : N]. .. )
8778 return quote
0 commit comments