pub(crate) fn expand_with_mode(
ecx: &mut ExtCtxt<'_>,
expand_span: Span,
meta_item: &MetaItem,
item: Annotatable,
mode: DiffMode,
) -> Vec<Annotatable>
Expand description
We expand the autodiff macro to generate a new placeholder function which passes type-checking and can be called by users. The exact signature of the generated function depends on the configuration provided by the user, but here is an example:
#[autodiff(cos_box, Reverse, Duplicated, Active)]
fn sin(x: &Box<f32>) -> f32 {
f32::sin(**x)
}
which becomes expanded to:
#[rustc_autodiff]
fn sin(x: &Box<f32>) -> f32 {
f32::sin(**x)
}
#[rustc_autodiff(Reverse, Duplicated, Active)]
fn cos_box(x: &Box<f32>, dx: &mut Box<f32>, dret: f32) -> f32 {
std::intrinsics::autodiff(sin::<>, cos_box::<>, (x, dx, dret))
}
FIXME(ZuseZ4): Once autodiff is enabled by default, make this a doc comment which is checked in CI.