# A bug in ForwardDiff?

**URL:** <https://discourse.julialang.org/t/a-bug-in-forwarddiff/60691>\
**Category:** General Usage\
**Tags:** question, forwarddiff, autodiff\
**Created:** [May 7, 2021, 3:07am UTC](https://discourse.julialang.org/t/a-bug-in-forwarddiff/60691 "2021-05-07T03:07:02Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![amrods](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amrods/32/2543_2.png) [@amrods](https://discourse.julialang.org/u/amrods)\
**Post date:** [May 7, 2021, 3:07am UTC](https://discourse.julialang.org/t/a-bug-in-forwarddiff/60691/1 "2021-05-07T03:07:02Z")

</div>

Consider this:

```julia
using ForwardDiff

function f!(F, x)
    F[1] = (x[1]+3)*(x[2]^3-7)+18
    F[2] = sin(x[2]*exp(x[1])-1)
    return F
end

F = Array{Float64}(undef, 2)
x = [1, 1]

```

Now let’s compute the Jacobian. The [documentation](https://juliadiff.org/ForwardDiff.jl/stable/user/api/#Jacobians-of-f(x::AbstractArray)::AbstractArray), says:

> ```julia
> ForwardDiff.jacobian(f!, y::AbstractArray, x::AbstractArray, cfg::JacobianConfig = JacobianConfig(f!, y, x), check=Val{true}())
> 
> ```
> 
> Return `J(f!)` evaluated at `x` , assuming `f!` is called as `f!(y, x)` where the result is stored in `y` .

since `f!(F, x)` works, then this should work:

```julia
∇f!(F, x) = ForwardDiff.jacobian!(f!, F, x)

```

however

```julia
julia> ∇f!(F, x)
ERROR: MethodError: no method matching jacobian!(::typeof(f!), ::Vector{Float64}, ::Vector{Int64})
Closest candidates are:
  jacobian!(::Union{AbstractArray, DiffResults.DiffResult}, ::Any, ::AbstractArray, ::AbstractArray) at /Users/amrods/.julia/packages/ForwardDiff/QOqCN/src/jacobian.jl:75
  jacobian!(::Union{AbstractArray, DiffResults.DiffResult}, ::Any, ::AbstractArray, ::AbstractArray, ::ForwardDiff.JacobianConfig{T, V, N, D} where {V, N, D}) where T at /Users/amrods/.julia/packages/ForwardDiff/QOqCN/src/jacobian.jl:75
  jacobian!(::Union{AbstractArray, DiffResults.DiffResult}, ::Any, ::AbstractArray, ::AbstractArray, ::ForwardDiff.JacobianConfig{T, V, N, D} where {V, N, D}, ::Val{CHK}) where {T, CHK} at /Users/amrods/.julia/packages/ForwardDiff/QOqCN/src/jacobian.jl:75
  ...
Stacktrace:
 [1] ∇f!(F::Vector{Float64}, x::Vector{Int64})
   @ Main ~/discourseQ4.jl:137
 [2] top-level scope
   @ REPL[1]:1

```

Is that a bug in `ForwardDiff` or its documentation?

---

<div class="post-metadata">

**Author:** ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)\
**Post date:** [May 7, 2021, 3:43am UTC](https://discourse.julialang.org/t/a-bug-in-forwarddiff/60691/3 "2021-05-07T03:43:45Z")

</div>

```julia
julia> ForwardDiff.jacobian(f!, F, x)
2×2 Matrix{Float64}:
 -6.0 12.0
 -0.399455 -0.399455

```

The documentaiton said `ForwardDiff.jacobian(..)`, not `ForwardDiff.jacobian!(...)`.

---

<div class="post-metadata">

**Author:** ![amrods](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/amrods/32/2543_2.png) [@amrods](https://discourse.julialang.org/u/amrods)\
**Post date:** [May 7, 2021, 3:45am UTC](https://discourse.julialang.org/t/a-bug-in-forwarddiff/60691/4 "2021-05-07T03:45:59Z")

</div>

Didn’t see that `!`!!, I guess it’s time for me to take a break…
