# Hessian of a buffer array in Zygote

I have a function which takes some coordinates, a parameter, and creates a 2D array.

I want to get the Jacobian and the Hessian of this array w.r.t the input coordinates using Zygote.

The Jacobian works fine, but the Hessian does not:

``````

using Zygote

function some_array(coords,a) # `coords` is a vector length 4, `a` is a scalar

xs = zeros(typeof(a),4,4)
g = Zygote.bufferfrom(xs) #a 4x4 buffered Zygote object

t,r,θ,ϕ =  coords,coords,coords,coords #unpack the coordinates

g[1,1] = 2*r #assign array element

return copy(g)

end

#Coordinates [t,r,θ,ϕ] and parameter `a`
t = 0.0
r = 10.0
θ = π/2.0
ϕ = 0.0
a = 0.1
coords = [t,r,θ,ϕ]

#Create an array. Works ok.
some_array(coords,a)

#Get jacobian of array. Works ok.
array_jacobian = jacobian(x -> some_array(x,a), coords)
array_jacobian = reshape(array_jacobian,(4,4,4)) #array_jacobian[:, :, i] is the derivative of some_array w.r.t. coords[i]

#Get hessian of array. Does not work?
array_hessian = hessian(x -> some_array(x,a), coords)

``````

Whilst `array_jacobian` returns what I expect, `array_hessian` throws an error:

`LoadError: MethodError: no method matching Float64(::ForwardDiff.Dual{Nothing, Float64, 4})`

Can someone guide me as to where I am going wrong?