The DFunction type stores the first and second derivatives of a given input function which is not only convenient but can enhance performance significantly. At this point, the DFunction type requires the given function to be out-of-place, however, this will likely be extended to in-place functions in the future.

Once constructed, a DFunction object D can be evaluated at x via the syntax EvalF(D,x), EvaldF(D,x) and EvalddF(D,x).

In order to construct the appropriate derivatives, the input and output dimensions of a given function F are assessed and the appropriate operators (GetGrad(), GetJac() and so on) called.

By default, DFunction() attempts to construct the derivatives symbolically, however, this can be specified via the ADmode keyword:

using DerivableFunctions

D = DFunction(x->[x^7 - sin(x), tanh(x)]; ADmode=Val(:ReverseDiff))
EvalF(D, 5.), EvaldF(D, 5.), EvalddF(D, 5.)

using Symbolics;  @variables y
EvalF(D, y), EvaldF(D, y), EvalddF(D, y)