AutoDiffable

Trait AutoDiffable 

Source
pub trait AutoDiffable<StaticArgs>: Diffable<StaticArgs>
where <Self as Diffable<StaticArgs>>::Input: GradientType<<Self as Diffable<StaticArgs>>::Output>,
{ // Required method fn eval_grad( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> (<Self as Diffable<StaticArgs>>::Output, <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType); // Provided methods fn eval( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> <Self as Diffable<StaticArgs>>::Output { ... } fn grad( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType { ... } }

Required Methods§

Source

fn eval_grad( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> (<Self as Diffable<StaticArgs>>::Output, <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType)

Evaluate the function and its gradient for a given input and static arguments. Returns (f(x, static_args): <Self as Diffable<StaticArgs>>::Output, df/dx(x, static_args): <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType)

Provided Methods§

Source

fn eval( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> <Self as Diffable<StaticArgs>>::Output

Evaluate the function for a given input and static arguments. Returns f(x, static_args): <Self as Diffable<StaticArgs>>::Output

Source

fn grad( &self, x: &<Self as Diffable<StaticArgs>>::Input, static_args: &StaticArgs, ) -> <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType

Evaluate the gradient for a given input and static arguments.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<S, I, P: InstOne> AutoDiffable<S> for Monomial<S, I, P>
where for<'b> I: Mul<&'b I, Output = I> + Mul<&'b P, Output = I> + Pow<&'b P, Output = I> + Clone + InstOne + Pow<P, Output = I> + Mul<I, Output = I> + GradientType<I, GradientType = I>, for<'b> &'b I: Mul<&'b I, Output = I>, for<'b> &'b P: Sub<&'b P, Output = P> + Sub<P, Output = P>,

Source§

impl<S, I: GradientType<O, GradientType = O>, O> AutoDiffable<S> for Polynomial<S, I, O>
where for<'b> O: Mul<&'b O, Output = O> + InstZero + InstOne, for<'b> &'b I: Mul<&'b O, Output = O>, for<'b> &'b O: Mul<&'b I, Output = O> + Mul<&'b O, Output = O>,

Source§

impl<S, I: Clone + InstOne + GradientType<I, GradientType = G> + GradientIdentity, G> AutoDiffable<S> for Identity<S, I>

Source§

impl<StaticArgs, InnerInput, InnerOutput, InnerGrad, OuterInput, OuterOutput, OuterGrad, Grad, Outer, Inner> AutoDiffable<StaticArgs> for ADCompose<Outer, Inner>
where Outer: AutoDiffable<StaticArgs, Input = OuterInput, Output = OuterOutput>, Inner: AutoDiffable<StaticArgs, Input = InnerInput, Output = InnerOutput>, OuterInput: From<InnerOutput> + GradientType<OuterOutput, GradientType = OuterGrad>, InnerInput: GradientType<InnerOutput, GradientType = InnerGrad> + GradientType<OuterOutput, GradientType = Grad>, OuterGrad: ForwardMul<OuterInput, InnerGrad, ResultGrad = Grad>,

Source§

impl<StaticArgs, Input, AOutput, BOutput, AGrad, BGrad, Output, Grad, A, B> AutoDiffable<StaticArgs> for ADAdd<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<BOutput, GradientType = BGrad> + GradientType<Output, GradientType = Grad>, B: AutoDiffable<StaticArgs, Input = Input, Output = BOutput>, AOutput: Add<BOutput, Output = Output>, AGrad: Add<BGrad, Output = Grad>,

Source§

impl<StaticArgs, Input, AOutput, BOutput, AGrad, BGrad, Output, Grad, A, B> AutoDiffable<StaticArgs> for ADSub<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<BOutput, GradientType = BGrad> + GradientType<Output, GradientType = Grad>, B: AutoDiffable<StaticArgs, Input = Input, Output = BOutput>, AOutput: Sub<BOutput, Output = Output>, AGrad: Sub<BGrad, Output = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, A> AutoDiffable<StaticArgs> for ADAbs<A>
where A: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Grad>, Output: Signed, Grad: Mul<Output, Output = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, A> AutoDiffable<StaticArgs> for ADSignum<A>
where A: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Grad>, Output: Signed + InstZero, Grad: InstZero + UpperBounded,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, A> AutoDiffable<StaticArgs> for ADNeg<A>
where AOutput: Neg<Output = Output>, AGrad: Neg<Output = Grad>, A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, A, B> AutoDiffable<StaticArgs> for ADConstantAdd<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>, AOutput: Add<B, Output = Output>, AGrad: Add<B, Output = Grad>, B: Clone + InstZero,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, A, B> AutoDiffable<StaticArgs> for ADConstantDiv<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>, AOutput: Div<B, Output = Output>, AGrad: Div<B, Output = Grad>, B: Clone,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, A, B> AutoDiffable<StaticArgs> for ADConstantMul<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>, AOutput: Mul<B, Output = Output>, AGrad: Mul<B, Output = Grad>, B: Clone,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, A, B> AutoDiffable<StaticArgs> for ADConstantSub<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>, AOutput: Sub<B, Output = Output>, AGrad: Sub<B, Output = Grad>, B: Clone + InstZero,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, AGrad, ADB, A, B> AutoDiffable<StaticArgs> for ADConstantPow<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<Output, GradientType = Grad>, AOutput: Clone + Pow<B, Output = Output>, B: Clone + InstOne + Sub<B, Output = B>, Output: Mul<B, Output = ADB>, AGrad: Mul<ADB, Output = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, BOutput, AGrad, BGrad, BB, ADB, DAOVB, ADBOVBB, A, B> AutoDiffable<StaticArgs> for ADDiv<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<BOutput, GradientType = BGrad> + GradientType<Output, GradientType = Grad>, B: AutoDiffable<StaticArgs, Input = Input, Output = BOutput>, AOutput: Clone + Div<BOutput, Output = Output> + Mul<BGrad, Output = ADB>, BOutput: Clone + Mul<BOutput, Output = BB>, AGrad: Div<BOutput, Output = DAOVB>, ADB: Div<BB, Output = ADBOVBB>, DAOVB: Sub<ADBOVBB, Output = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, AOutput, BOutput, AGrad, BGrad, DAB, ADB, A, B> AutoDiffable<StaticArgs> for ADMul<A, B>
where A: AutoDiffable<StaticArgs, Input = Input, Output = AOutput>, Input: GradientType<AOutput, GradientType = AGrad> + GradientType<BOutput, GradientType = BGrad> + GradientType<Output, GradientType = Grad>, B: AutoDiffable<StaticArgs, Input = Input, Output = BOutput>, AOutput: Clone + Mul<BOutput, Output = Output> + Mul<BGrad, Output = ADB>, BOutput: Clone, AGrad: Mul<BOutput, Output = DAB>, DAB: Add<ADB, Output = Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, NewInput, NewOutput, NewGradient, A> AutoDiffable<StaticArgs> for ADCoerce<A, NewInput, NewOutput>
where A: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Grad> + From<NewInput>, NewInput: Clone + GradientType<NewOutput, GradientType = NewGradient>, NewOutput: From<Output>, NewGradient: From<Grad>,

Source§

impl<StaticArgs, Input, Output, Grad, T> AutoDiffable<StaticArgs> for AutoDiff<StaticArgs, T>
where T: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Grad>,

Impl of AutoDiffable for AutoDiff

Source§

impl<StaticArgs, NewStaticArgs, Input, Output, Gradient, A> AutoDiffable<(NewStaticArgs, StaticArgs)> for ADPrependStaticArgs<A, NewStaticArgs>
where A: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Gradient>,

Source§

impl<StaticArgs, NewStaticArgs, Input, Output, Gradient, A> AutoDiffable<(StaticArgs, NewStaticArgs)> for ADAppendStaticArgs<A, NewStaticArgs>
where A: AutoDiffable<StaticArgs, Input = Input, Output = Output>, Input: GradientType<Output, GradientType = Gradient>,