autodiff

Function autodiff 

Source
pub const fn autodiff<F, G, T, R>(f: F, df: G, args: T) -> R
where T: Tuple,
🔬This is a nightly-only experimental API. (core_intrinsics)
Expand description

Generates the LLVM body for the automatic differentiation of f using Enzyme, with df as the derivative function and args as its arguments.

Used internally as the body of df when expanding the #[autodiff_forward] and #[autodiff_reverse] attribute macros.

Type Parameters:

  • F: The original function to differentiate. Must be a function item.
  • G: The derivative function. Must be a function item.
  • T: A tuple of arguments passed to df.
  • R: The return type of the derivative function.

This shows where the autodiff intrinsic is used during macro expansion:

ⓘ
#[autodiff_forward(df1, Dual, Const, Dual)]
pub fn f1(x: &[f64], y: f64) -> f64 {
    unimplemented!()
}

expands to:

ⓘ
#[rustc_autodiff]
#[inline(never)]
pub fn f1(x: &[f64], y: f64) -> f64 {
    ::core::panicking::panic("not implemented")
}
#[rustc_autodiff(Forward, 1, Dual, Const, Dual)]
pub fn df1(x: &[f64], bx_0: &[f64], y: f64) -> (f64, f64) {
    ::core::intrinsics::autodiff(f1::<>, df1::<>, (x, bx_0, y))
}