Overloads

DifferentiationInterface.jl provides a handful of operators like gradient or jacobian, each with several variants:

  • out-of-place or in-place behavior
  • with or without primal output value
  • support for one-argument functions y = f(x) or two-argument functions f!(y, x)

While it is possible to define every operator using just pushforward and pullback, some backends have more efficient implementations of high-level operators. When they are available, we always call these backend-specific overloads.

The following tables summarize all implemented overloads for each backend. The cells can have three values:

  • ❌: the operator is not overloaded because the backend does not support it
  • ✅: the operator is overloaded
  • NA: the operator does not exist
Tip

Check marks (✅) are clickable and link to the source code.

Diffractor (forward/reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Backend doesn't support mutating functions.

Enzyme (forward)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

Enzyme (reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

FastDifferentiation (symbolic)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

FiniteDiff (forward)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

FiniteDifferences (forward)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Backend doesn't support mutating functions.

ForwardDiff (forward)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

PolyesterForwardDiff (forward)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

ReverseDiff (reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

Symbolics (symbolic)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

Tapir (reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Operatoropop!value_and_opvalue_and_op!
derivative
jacobian
pullback
pushforward

Tracker (reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Backend doesn't support mutating functions.

Zygote (reverse)

One-argument functions y = f(x)

Operatoropop!value_and_opvalue_and_op!
derivative
gradient
jacobian
hessianNANA
hvpNANA
pullback
pushforward

Two-argument functions f!(y, x)

Backend doesn't support mutating functions.